首页 > 解决方案 > 在 Go Benchmarks 中将设置/拆卸放在哪里?

问题描述

我有一个 go test 文件,我在其中编写了一个基准函数,如下所示:

func BenchmarkStuff(b *testing.B) {
    for i := 0; i < b.N; i++ {
        stuff()
    }
}

但是,该stuff()功能需要在每次运行前进行一些设置,并在每次运行后进行清理。我有功能setup()并且cleanup()分别执行此操作。但我不想对设置和清理功能进行基准测试。

那么它们应该在哪里调用呢?如果我在 BenchmarkStuff 中调用它们,它们将被添加到结果测量中。但没有他们,stuff()就会失败。

标签: go

解决方案


基准测试包提供了避免基准测试所需的时序初始化的方法ResetTimerStopTimerStartTimer

如果需要初始化一次,ResetTimer请在开始循环之前使用:

func BenchmarkStuff(b *testing.B) {
    setup()
    b.ResetTimer()
    for i := 0; i < b.N; i++ {
        stuff()
    }
}

如果您需要在循环期间重新初始化,您可以使用StopTimerandStartTimer来避免对该部分进行计时:

func BenchmarkStuff(b *testing.B) {
    for i := 0; i < b.N; i++ {
        b.StopTimer()
        setup()
        b.StartTimer()
        stuff()
    }
}

推荐阅读