本文共 2561 字,大约阅读时间需要 8 分钟。
注意:在Golang中,对于单元测试程序来说通常会有一些重要约束,主要如下:
1、单元测试文件名必须为xxx_test.go 2、单元测试的函数名必须为TestXxx(大驼峰) 3、单元测试函数参数必须为t *testing.T(测试框架强要求) 4、基准测试也要放在xxx_test.go文件里面,以BenchmarkXxxx(大驼峰)为文件名,参数为 b *testing.Bxxx_test.go 文件可以放在任何地方,测试的时候进入该目录再运行。
在实际使用中,避免不了要去测试一些功能,而它又牵涉到项目的初始化操作,尤其是加载配置文件,这就决定了测试源码文件和命令源码文件放在同个地方。// 单元测试func TestLock(t *testing.T) { ...}// 基准测试func BenchmarkLock(b *testing.B) { ...}
进入要测试的目录
cd tests
1、运行单元测试
相关命令go help test
运行测试,只输出失败的单元测试用例信息
go test
对当前目录下的全部单元测试程序进行运行测试(也就是所有的xxx_test.go文件中的所有function都会运行)
运行测试,输出详细的单元测试结果
go test -v
运行测试,运行匹配的函数,注意此处会全部运行名称为 functionnamexxx
的函数
go test -v -run functionnamego test -v -test.run functionname
2、运行基准测试
go test -v -bench=.
运行所有的单元测试和基准测试
-bench
可以指定函数名,支持正则 go test -v -bench=. -benchmem
-benchmem
输出每次运行分配内存的次数和字节数
-benchtime="3s"
设置每次运行的时间上线 go test -v -run="none" -bench=. -benchmemgo test -v -run=^$ -bench=. -benchmem
不运行单元测试,只运行所有的基准测试
基准测试结果说明
BenchmarkLock-8 1 1378545000 ns/op 228240 B/op 1194 allocs/op1、BenchmarkLock-8 表示当前系统有8个逻辑CPU2、1 表示运行了1次3、nx/op 表示每次运行耗时,纳秒4、B/op 表示每次运行使用了内存的字节数5、allocs/op 表示每次运行分配内存的次数
性能测试函数计时器:
当性能测试函数中有一些额外的初始化操作时,可以通过启停计时器来屏蔽这些操作对最终性能测试的影响效果比较
go test -v -bench=. -run=^$ -benchmem
func BenchmarkLock(b *testing.B) { b.StopTimer() time.Sleep(time.Second * 1) b.StartTimer() a := 0 for i := 0; i < b.N; i++ { a++ }}
goos: linuxgoarch: amd64pkg: voteapiBenchmarkLockBenchmarkLock-8 1000000000 0.373 ns/op 0 B/op 0 allocs/opPASSok voteapi 6.942s
func BenchmarkLock(b *testing.B) { time.Sleep(time.Second * 1) a := 0 for i := 0; i < b.N; i++ { a++ }}
goos: linuxgoarch: amd64pkg: voteapiBenchmarkLockBenchmarkLock-8 1 1000116000 ns/op 104 B/op 3 allocs/opPASSok voteapi 1.538s
对于 b.N
参数而言, test 命令先会尝试设置为1,之后执行函数。如果测试函数没有达到执行上限的话, test 函数会增大,之后再次执行测试函数,如此往复,直到执行时间大于或者等于上限时间为止。 上限时间可以使用 -benchtime
设定
几个常用的参数 -args: 指定一些测试时的参数(可以指定超时时间,cpu绑定,压测等等(go test包含单元测试,压力测试等)) -test.v: 是否输出全部的单元测试用例(不管成功或者失败),默认没有加上,所以只输出失败的单元测试用例 -test.run pattern: 只跑哪些单元测试用例 -test.bench patten: 只跑那些性能测试用例 -test.benchmem : 是否在性能测试的时候输出内存情况 -test.benchtime t : 性能测试运行的时间,默认是1s -test.cpuprofile cpu.out : 是否输出cpu性能分析文件 -test.memprofile mem.out : 是否输出内存性能分析文件 -test.blockprofile block.out : 是否输出内部goroutine阻塞的性能分析文件 -c: 编译测试文件到pkg.test,但是不会运行测试程序 -exec xprog: 使用xprog参数来运行编译的测试文件(参数类似go run后的参数) -i: 安装测试程序中的依赖包,但是不运行测试程序 -json: 以json格式输出测试结果 -o file: 指定测试程序编译后生成的文件名
转载地址:http://hdaui.baihongyu.com/