我有一个 go test 文件,我在其中编写了一个基准函数,如下所示:
func BenchmarkStuff(b *testing.B) {
for i := 0; i < b.N; i++ {
stuff()
}
}
Run Code Online (Sandbox Code Playgroud)
然而,该stuff()函数每次运行前都需要进行一些设置,每次运行后都需要进行清理。我有功能setup()和cleanup()分别执行此操作。但我不想对设置和清理功能进行基准测试。
那么应该在哪里调用它们呢?如果我在 BenchmarkStuff 中调用它们,它们将被添加到结果测量中。但没有它们,stuff()就会失败。
基准测试包提供ResetTimer,StopTimer和StartTimer避免基准测试所需的计时初始化的方法。
如果需要初始化一次,请ResetTimer在开始循环之前使用:
func BenchmarkStuff(b *testing.B) {
setup()
b.ResetTimer()
for i := 0; i < b.N; i++ {
stuff()
}
}
Run Code Online (Sandbox Code Playgroud)
如果您需要在循环期间重新初始化,您可以使用StopTimer和StartTimer避免计时该部分:
func BenchmarkStuff(b *testing.B) {
for i := 0; i < b.N; i++ {
b.StopTimer()
setup()
b.StartTimer()
stuff()
}
}
Run Code Online (Sandbox Code Playgroud)