目的:基准测试的主要目的是比较不同实现方式之间的性能差异,找出性能瓶颈。
1 准备以_test.go结尾文件和导入testing包
在命名文件时需要让文件必须以_test结尾,在文件中导入testing包。基准测试可以测试一段程序的运行性能及耗费CPU的程度,获得代码内存占用和运行效率的性能数据。Go语言中提供了基准测试框架,使用方法类似于单元测试,使用者无须准备高精度的计时器和各种分析工具,基准测试本身既可以打印出非常标准的测试报告。
基准测试以Benchmark为前缀,需要一个*testing.B类型的参数b,基准测试必须要执行b.N次,这样的测试才有对照性,b.N的值是系统根据实际情况去调整的,从而保证测试的稳定性。
测试代码如下:
1 package main 2 3 import ( 4 "testing" 5 "time" 6 ) 7 func Benchmark_Log(b *testing.B) { 8 for i := 0; i < b.N; i++ { 9 b.Log("hello world") 10 time.Sleep(1 * time.Second) 11 b.Log("hello world jkjk") 12 } 13 }
2 终端输入命令进行golang基准测试
(1) go test -bench . 执行项目中所有基准测试文件
在终端输入命令:go test -bench . 可以看到 执行了1次,即为b.N的值。Benchmark_Log2函数平均每次操作花费了1011875500纳秒,Benchmark_Log函数平均每次操作花费了1003084600纳秒。
(2) go test -bench . xxx_test.go, 执行指定基准测试文件,如go test -bench . time_test.go 、go test -bench . time_test.go time2_test.go
(3) go test -bench . -benchtime=10s 执行10s
(4) go test -bench . -benchtime=10x 执行10次
3 VScode测试进行golang基准测试
点击VScode视图左侧的测试按钮,点击运行按钮下方的运行测试按钮进行基准测试,或者点击module、_test.go文件,基准函数的运行测试按钮。
VScode测试进行golang基准测试的操作与golang单元测试一致,但输出的信息不同。
在进行基准测试的过程中,可以点击取消测试运行按钮取消测试。