首页 > 解决方案 > 直接使用 testing.Benchmark() 时设置基准时间

问题描述

在 Go 中,我正在手动运行testing.Benchmarkmain() ,如下所示:

func main() {
  br := testing.Benchmark(BenchmarkConnectionOpen)
  fmt.Println(br.String() + br.MemString())
}

我想做的是为所有基准设置“基准时间”。我知道在测试(例如运行go test)时,这是作为这样的标志传入的:

-benchtime=100x

但是当我在 main() 中运行时如何设置这个标志呢?我试过flag.Set()(下)但没有骰子。

flag.Set("test.benchtime", "100x")

标签: go

解决方案


弄清楚了!医生推了我一下,但花了一点时间才把它拼凑起来。文档:

// If f depends on testing flags, then Init must be used to register
// those flags before calling Benchmark and before calling flag.Parse.
//
// If f calls Run, the result will be an estimate of running all its
// subbenchmarks that don't call Run in sequence in a single benchmark.

这转化为:

func main() {
  testing.Init()
  flag.Parse()
  br := testing.Benchmark(BenchmarkConnectionOpen)
  fmt.Println(br.String() + br.MemString())
}

然后运行:

go run main.go  -test.benchtime 100x

推荐阅读