性能分析:benchmark基准测试
benchmark(基准测试) 可以度量某个函数或方法的性能,也就是说,如果我们知道性能的瓶颈点在哪里,benchmark 是一个非常好的方式。
// fib.go
package main
func fib(n int) int {
if n == 0 || n == 1 {
return n
}
return fib(n-2) + fib(n-1)
}
// fib_test.go
package main
import "testing"
func BenchmarkFib(b *testing.B) {
for n := 0; n < b.N; n++ {
fib(30) // run fib(30) b.N times
}
}
// 运行用例
$ go test -bench .
goos: darwin
goarch: amd64
pkg: example
BenchmarkFib-8 200 5865240 ns/op
PASS
ok example 1.782s
- 与Test测试的区别
-
benchmark
测试用例和普通test单元用例一致,都位于_test.go
文件中 -
benchmark
测试以函数名Benchmark
开头, test测试以函数Test
开头 -
benchmark
测试入参为b *testing.B
, test测试入参为t *testing.T
-
-
运行benchmark
-
go test
默认不运行benchmark
测试用例, 需要添加-bench
才能运行benchmark
测试用例。 -
-bench=
可以传入正则表达式,这样匹配的用例才会执行。 -
-cpu
可以改变GOMAXPROCS
, 变更运行的cpu核数 -
-benchtime
可指定执行时间或具体次数 -
-count
可设置 benchmark 轮数 -
-benchmem
可查看内存分配量和分配次数
-
-
进行性能测试时,尽可能保持测试环境的稳定
- 可以使用
b.ResetTimer()
可重置定时器 - 可以使用
b.StopTimer()
暂停计时 - 可以使用
b.StartTimer()
开始计时
- 可以使用