go test
语法:
go test [build/test flags] [package] [build/test flags && test binary flags]
test flag
go help testflag
- -bench 指定运行的基准测试,默认不进行基准测试,常用-bench=.来运行所有的基准测试
- -benchtime 指定每个基准测试运行的时间,默认是1s,例如-benchtime=3s制定每个基准测试运行3s,也可以通过Nx的方式来指定基准测试运行的次数,例如-benchtime=10x表示每个基准测试运行10次,这里的N对应基准测试的b.N
- -count 指定执行测试的次数,默认执行1次,如果设置了-cpu指定GOMAXPROCS,那么对指定的cpu数测试n次。
- -cpu 1,2,4指定一个或多个GOMAXPROCS来进行测试
- -cover 是否显示测试覆盖率,默认是不显示,通过-cover=true开启显示
- -covermode 指定测试覆盖率的模式,count:统计代码访问次数;set:统计代码是否被访问;atomic:一般在并发工程中使用
*-coverpkg 指定要统计覆盖率的包 ./…表示当前目录下的所有包 - -failfast 一个测试用例失败后,不进行下面的测试
- -list
- -parallel 运行在测试用例中条用t.Parallel来进行并发测试,-parallel可以指定并发的数量,默认是与GOMAXPROCS一致
- -run 指定运行的单元测试,例如-run=TestA来指定运行TestA测试
- -short
- -timeout 指定超时时间
- -v 打印详细信息
- -vet 检查静态错误
- -benchmem 在执行基准测试时打印内存分配信息
- -blockprofile 将goroutine阻塞信息写入文件
- -coverprofile 将测试覆盖率信息写入文件
- -memprofile 将内存分配信息写入文件
- -memprofilearate 更精准的内存分配信息
- -mutexprofile 锁信息
- -mutexprofilefraction
- -outputdir 输出文件的目录
- -trace 写入trace信息
常用用法:
1.单元测试
func TestRandomString(t *testing.T){
str:=RandomString(32)
t.log(str)
}
go test -v -run ^TestRandomString$ ./…
-v 打印详细信息
-run 指定要进行的单元测试用例
2.基准测试
func BenchmarkRandomString(b *testing.B){
// do something
b.ReserTimer()
for i:=0;i<b.N;i++{
RandomString(32)
}
b.StopTimer()
// do something
}
go test -bench . -run=none -benchtimes=2s -cpu=1,2,4 -count=2 -benchmem
-run=none 只运行基准测试
-benchtimes=2s 每个基准测试运行2s
-cpu=1,2,4 运行在GOMAXPROCS分别为1,2,4的情况下进行基准测试
-count=2 分别在1,2,4的cpu下分别跑两次基准测试
-benchmem 输出内存分配信息
3.并发基准测试
func BechmarkRandomString2(b *testing.B){
b.RunParallel(func(pb *testing.PB){
for pb.Next(){
RandomString(32)
}
})
}
go test -bench . -run=none
RunParallel创建多个goroutinue然后把b.N个迭代测试分布到这些goroutine上。goroutinue的数目默认是GOMAXPROCS,如果要增加non-COU-bound的benchmark的并发个数,在执行RunParallel之前调用SetParallelism。
4.测试覆盖率
go test -cover -covermode=count -coverpkg ./… -coverprofile=out.cov .
统计当前目录下的包的测试覆盖率,并生成文件
go tool cover -html=out.cov
使用网页的方式查看测试覆盖率(推荐)
go tool cover -func=out.cov