我必須編寫一些需要特定數據庫設置的基準測試。是這樣的: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 關注
- 95 瀏覽
添加回答
舉報
0/150
提交
取消