按函数名称进行基准测试

2 testing benchmarking go

我有这个基准函数:

BenchmarkMyTest(b *testing.B) {
}
Run Code Online (Sandbox Code Playgroud)

我只想运行这个函数而不运行所有其他测试,但该命令对我来说从来没有用过。

go test -bench='BenchmarkMyTest'
or
go test -run='BenchmarkMyTest'
Run Code Online (Sandbox Code Playgroud)

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

谢谢,

icz*_*cza 6

在 Command Go 中描述:测试标志的描述

-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.
Run Code Online (Sandbox Code Playgroud)

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

go test -bench BenchmarkMyTest
go test -run TestMyTest
Run Code Online (Sandbox Code Playgroud)

或者:

go test -bench=BenchmarkMyTest
go test -run=TestMyTest
Run Code Online (Sandbox Code Playgroud)

精确指定 1 个函数

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

go test -bench BenchmarkMyTest\b
go test -run TestMyTest\b
Run Code Online (Sandbox Code Playgroud)

请注意,仅将其附加到末尾就足够了,就好像函数名称不以 开头一样"Benchmark",它不被视为基准函数,同样,如果它不以 开头"Test",则不被视为测试功能(并且无论如何都不会被拾取)。