原文地址为:
golang test测试实例
转载请注明本文地址: golang test测试实例
本文的目的是对mymysql进行单元测试和性能测试
准备工作:
1 go get github.com/ziutek/mymysql/thrsafe
2 在mysql建表和初始化数据(db是test)
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的代码:
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的代码:
package mymysql
import(
"testing"
)
func Test_getAdmin(t *testing.T) {
username, _ := getAdmin(1)
if (username != "admin") {
t.Error("getAdmin get data error")
}
}
这里做单元测试的,测试getAdmin函数
写到这里你就可以在命令行中运行go test了
这里有个 -v参数,如果不加这个参数的话,只会显示错误的测试用例,否则就显示所有的测试用例(成功 + 错误)
6 下面做性能测试
mymysql_b_test.go的代码:
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文件已经生成了
转载请注明本文地址: golang test测试实例