本文的目的是对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
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了
这里有个 -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是可以指定运行的用例
返回结果表示这个测试用例在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)
显示svg文件已经生成了
有疑问加站长微信联系(非本文作者)