go 学习随记:基准测试
简单记录一下工具使用和介绍
简介
通过testing包来写基准测试, 用于测试代码性能
一般尽量保证机器空闲且稳定
用法
前置要求
- 所有测试函数都应该写在_test.go为后缀的文件中
- 基准测试函数必须加上Benchmark前缀
- 后面拼接字符串必须开头大写或下划线拼接 如:BenchmarkAbc Or Benchmark_abc
- 使用的命令是go test -bench=(正则) {其实写的就是函数名的可匹配正则比较随意}
a.go
func abc(n int) int {
if n <= 0 {
return 0
}
return abc(n-1)
}
a_test.go
目的:求abc执行一次的耗时和使用的空间
每个基准函数被执行时都有一个不同的b.N值,这个值代表基准函数应该执行的迭代次数。
b.N从1开始,如果基准函数在1秒内就执行完了,那么b.N的值会递增以便基准函数再重新执行(译者注:即基准函数默认要运行1秒,如果该函数的执行时间在1秒内就运行完了,那么就递增b.N的值,重新再执行一次)
b.N按照近似顺序增加,每次迭代大约增长20%。基准框架试图更智能,如果它看到较小的b.N值相对较快的完成了迭代,它将b.N增加的更快。
就是执行多次求一个平均值
func Benchmark_abc40(b *testing.B) {
b.ReportAllocs()
for n := 0; n < b.N; n++ {
abc(40)
}
}
命令
go test -bench=40 # 因为是正则40或abc40都可以
go test -bench=. # 执行当前目录下的所有, 也可以写目录地址