按功能名称进行基准测试

时间:2015-10-21 06:20:20

标签: testing go benchmarking

我有这个Benchmark功能:

BenchmarkMyTest(b *testing.B) {
}

我想只运行此函数而不运行所有其他测试,但该命令对我来说从未起作用。

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

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

谢谢,

2 个答案:

答案 0 :(得分:2)

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.

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

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"开头一样,它不被视为基准函数,同样如果它不以{开头} {1}},它不被视为测试功能(并且无论如何都不会被接收)。

答案 1 :(得分:0)

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

以下命令运行所有以 # FinTransDetail class def __str__(self): return self.fd_no.fh_code 开头的基准测试(BenchmarkMyTest1、BenchmarkMyTest2 等...)并跳过所有带有 BenchmarkMyTest 的测试

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

-benchmem

最后的命令是:

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