分享
  1. 首页
  2. 文章

golang test测试实例

yjf512 · · 5542 次点击 · · 开始浏览
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

本文的目的是对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

Image(3)

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了

Image(4)

这里有个 -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是可以指定运行的用例

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)


有疑问加站长微信联系(非本文作者)

本文来自:博客园

感谢作者:yjf512

查看原文:golang test测试实例

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

关注微信
5542 次点击
1 回复 | 直到 2025年05月15日 08:49:45
暂无回复
添加一条新回复 (您需要 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传

用户登录

没有账号?注册
(追記) (追記ここまで)

今日阅读排行

    加载中
(追記) (追記ここまで)

一周阅读排行

    加载中

关注我

  • 扫码关注领全套学习资料 关注微信公众号
  • 加入 QQ 群:
    • 192706294(已满)
    • 731990104(已满)
    • 798786647(已满)
    • 729884609(已满)
    • 977810755(已满)
    • 815126783(已满)
    • 812540095(已满)
    • 1006366459(已满)
    • 692541889

  • 关注微信公众号
  • 加入微信群:liuxiaoyan-s,备注入群
  • 也欢迎加入知识星球 Go粉丝们(免费)

给该专栏投稿 写篇新文章

每篇文章有总共有 5 次投稿机会

收入到我管理的专栏 新建专栏