golang test测试实例

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介:

本文的目的是对mymysql进行单元测试和性能测试

准备工作:

1 go get github.com/ziutek/mymysql/thrsafe

2 在mysql建表和初始化数据(db是test)

1
2
3
4
5
6
7
8
9
10
11
12
drop table if  exists admin;
CREATE TABLE `admin` (
     `adminid` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
     `username` varchar(20) NOT NULL DEFAULT ''  COMMENT '后台用户名' ,
     `password` char(32) NOT NULL DEFAULT ''  COMMENT '密码,md5存' ,
     PRIMARY KEY(`adminid`)
)
COMMENT= '后台用户信息表'
COLLATE= 'utf8_general_ci'
ENGINE=InnoDB;
 
insert into admin set adminid=1, username= 'admin' , password= '21232f297a57a5a743894a0e4a801fc3' ;

3 gopath下建立mymysql

Image(3)

4 mymysql.go的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
package mymysql
import(
      "log"
      "github.com/ziutek/mymysql/mysql"
      _ "github.com/ziutek/mymysql/native"
)
func getAdmin(adminid int) (string, string){
      db := mysql.New( "tcp" , "" , "127.0.0.1:3306" , "root" , "password" , "test" )
      err := db.Connect()
      if  err != nil {
           panic(err)
      }
      rows, res, err := db.Query( "select * from admin where adminid=%d" , adminid)
      if  err != nil {
           panic(err)
      }
      if  len(rows) < 1 {
           log.Panic( "rows error" )
      }
      row := rows[0]
      first := res.Map( "username" )
      second := res.Map( "password" )
      username, password := row.Str(first), row.Str(second)
      return  username, password
}

很好理解,根据adminid获取用户名和密码

5 mymysql_test.go的代码:

1
2
3
4
5
6
7
8
9
10
package mymysql
import(
      "testing"
)
func Test_getAdmin(t *testing.T) {
     username, _ := getAdmin(1)
     if  (username != "admin" ) {
          t.Error( "getAdmin get data error" )
     }
}<br>这里做单元测试的,测试getAdmin函数

写到这里你就可以在命令行中运行go test了

Image(4)

这里有个 -v参数,如果不加这个参数的话,只会显示错误的测试用例,否则就显示所有的测试用例(成功 + 错误)

6 下面做性能测试

mymysql_b_test.go的代码:

1
2
3
4
5
6
7
8
9
package mymysql
import (
      "testing"
)
func Benchmark_getAdmin(b *testing.B){
      for  i := 0; i < b.N; i++ { //use b.N for looping
             getAdmin(1)
     }
}

然后运行 go test -v -bench=".*"

这里的-bench是可以指定运行的用例

Image(5)

返回结果表示这个测试用例在1s中内运行了2000次,每次调用大约用了891898ns

7 用性能测试生成CPU状态图

使用命令:

go test -bench=".*" -cpuprofile=cpu.prof -c

cpuprofile是表示生成的cpu profile文件

-c是生成可执行的二进制文件,这个是生成状态图必须的,它会在本目录下生成可执行文件mymysql.test

然后使用go tool pprof工具

go tool pprof mymysql.test cpu.prof

 

调用web(需要安装graphviz)

Image(6)

显示svg文件已经生成了

Image(7)

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
7月前
|
安全 Go
掌握Go语言:Go语言通道,并发编程的利器与应用实例(20)
掌握Go语言:Go语言通道,并发编程的利器与应用实例(20)
|
7月前
|
存储 缓存 安全
掌握Go语言:Go语言中的字典魔法,高效数据检索与应用实例解析(18)
掌握Go语言:Go语言中的字典魔法,高效数据检索与应用实例解析(18)
|
1月前
|
网络协议 Go
Go语言网络编程的实例
【10月更文挑战第27天】Go语言网络编程的实例
21 7
|
4月前
|
人工智能 NoSQL Go
Go MongoDB Driver 实例
Go MongoDB Driver 实例
25 1
|
数据采集 NoSQL 关系型数据库
Go语言网络爬虫工程经验分享:pholcus库演示抓取头条新闻的实例
网络爬虫是一种自动从互联网上获取数据的程序,它可以用于各种目的,如数据分析、信息检索、竞争情报等。网络爬虫的实现方式有很多,不同的编程语言和框架都有各自的优势和特点。在本文中,我将介绍一种使用Go语言和pholcus库的网络爬虫工程,以抓取头条新闻的数据为例,展示pholcus库的功能和用法。
952 0
Go语言网络爬虫工程经验分享:pholcus库演示抓取头条新闻的实例
|
7月前
|
Go C语言
百度搜索:蓝易云【Go与C语言的互操作,import “C“的实例】
通过import "C",我们可以在Go代码中无缝使用C语言的函数和库,这为我们在Go项目中利用C语言的特定功能提供了便利。请注意,在使用import "C"时,Go代码和C代码之间的交互有一些规则和限制,需要遵循Go的规范和C语言的语法。
58 0
|
7月前
|
存储 Go 索引
Go 语言中 For 循环:语法、使用方法和实例教程
for循环用于多次执行特定的代码块,每次都可以使用不同的值。每次循环执行都称为一次迭代。for循环可以包含最多三个语句: 语法
125 0
|
弹性计算 Prometheus 监控
推荐Go语言开源项目:Excelize ,获取阿里云ECS实例监控数据导出到自定义Excel表格(二)
推荐Go语言开源项目:Excelize ,获取阿里云ECS实例监控数据导出到自定义Excel表格(二)
344 0
推荐Go语言开源项目:Excelize ,获取阿里云ECS实例监控数据导出到自定义Excel表格(二)
|
Web App开发 Java 测试技术
VSCode配置Golang单元测试实例
说到代码的健壮性,单元测试是少不了的,基本上所有语言都有自己的单元测试方案。工作这么多年,单元测试也没少写,像 Java、C++、Golang 都有过恶补单元测试的经历,为的就是应付各种 KPI,但是也不能说单元测试没有用,只是原始动力不是为了单元测试而单元测试,而是为了应付检查而单元测试。今天呢,就来说一说 Golang 语言的单元测试(这次真的是我自己主动要加的^_^)。
459 1
|
弹性计算 Linux Shell
云服务器上ECS使用go sdk查询实例列表
云服务器上ECS使用go sdk查询实例列表
415 0
云服务器上ECS使用go sdk查询实例列表