我必须编写一些需要特定数据库设置的基准测试。是这样的:func BenchmarkXxx(b *testing.B) { fmt.Println("Setup") dropRecords() createDatabaseRecords() // this require a lot of time fmt.Println("Start Test") b.ResetTimer() for i := 0; i < b.N; i++ { fmt.Println("Loop") TestMyStuffs() }}运行这个基准测试,我可以在控制台中看到“Setup”和“Start Test”打印了很多次,所以这个BenchmarkXxx函数似乎被调用了很多次。有没有办法createDatabaseRecords只运行一次设置代码(在这个例子中)并且只针对特定的基准?是否有任何类型的“最佳实践”来做到这一点?
1 回答
撒科打诨
TA贡献1934条经验 获得超2个赞
您可以使用b.Run对这种情况使用子测试
func BenchmarkXxx(b *testing.B) {
fmt.Println("Setup")
setup() // this require a lot of time
fmt.Println("Start Test")
b.Run("mytest", func(b *testing.B) {
b.ResetTimer()
for i := 0; i < b.N; i++ {
fmt.Println("Loop")
testMyStuffs()
}
})
}
子基准与任何其他基准一样。至少调用一次 Run 的基准将不会对其自身进行测量,并且将在 N=1 时调用一次。
因此BenchmarkXxx被调用一次,进行设置。
- 1 回答
- 0 关注
- 110 浏览
添加回答
举报
0/150
提交
取消
