按函数名称进行基准测试

Go benchmark by function name

我有这个基准函数:

BenchmarkMyTest(b *testing.B) {
}

而且我想 运行 只有这个功能而不是 运行 宁所有其他测试,但命令对我不起作用。

go test -bench='BenchmarkMyTest'
or
go test -run='BenchmarkMyTest'

运行在 Go 中使用一个基准函数的正确方法是什么? 它说要使用正则表达式,但我找不到任何文档。

谢谢,

描述于Command Go: Description of testing flags

-bench regexp
    Run benchmarks matching the regular expression.
    By default, no benchmarks run. To run all benchmarks,
    use '-bench .' or '-bench=.'.

-run regexp
    Run only those tests and examples matching the regular
    expression.

所以语法是你必须用 space 或等号(没有撇号)分隔它,你指定的是正则表达式:

go test -bench BenchmarkMyTest
go test -run TestMyTest

或者:

go test -bench=BenchmarkMyTest
go test -run=TestMyTest

恰好指定 1 个函数

由于指定的表达式是一个正则表达式,这也将匹配名称包含指定名称的函数(例如,名称以此开头的另一个函数,例如 "BenchmarkMyTestB")。如果只想匹配 "BenchmarkMyTest",请附加正则表达式单词边界 '\b':

go test -bench BenchmarkMyTest\b
go test -run TestMyTest\b

请注意,仅将其附加到末尾就足够了,就好像函数名称不以 "Benchmark" 开头一样,它不被认为是基准函数,如果它不以类似的方式开始与"Test",它不被认为是一个测试函数(并且不会被拾取)。

我发现那些答案不完整,所以这里有更多的主题...

以下命令运行所有以 BenchmarkMyTest 开头的基准测试(BenchmarkMyTest1、BenchmarkMyTest2 等...)并跳过所有以 -run=^$ .

开头的测试

您还可以使用 -benchtime 5s 指定测试持续时间,或者您可以使用 -benchmem 强制 b.ReportAllocs() 以获得如下值:

BenchmarkLogsWithBytesBufferPool-48     46416456                26.91 ns/op            0 B/op          0 allocs/op

最后的命令是:

go test -bench=^BenchmarkMyTest . -run=^$ . -v -benchtime 5s -benchmem