为了账号安全,请及时绑定邮箱和手机立即绑定

按函数名称进行基准测试

按函数名称进行基准测试

Go
汪汪一只猫 2021-11-15 20:41:02
我有这个基准功能:BenchmarkMyTest(b *testing.B) {}而且我只想运行此功能而不运行所有其他测试,但该命令对我不起作用。go test -bench='BenchmarkMyTest'orgo test -run='BenchmarkMyTest'在 Go 中运行单个基准测试函数的正确方法是什么?它说要使用正则表达式,但我找不到任何文档。谢谢,
查看完整描述

2 回答

?
ITMISS

TA贡献1871条经验 获得超8个赞

在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.

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


go test -bench BenchmarkMyTest

go test -run TestMyTest

或者:


go test -bench=BenchmarkMyTest

go test -run=TestMyTest

精确指定 1 个函数


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


go test -bench BenchmarkMyTest\b

go test -run TestMyTest\b

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


查看完整回答
反对 回复 2021-11-15
?
不负相思意

TA贡献1777条经验 获得超10个赞

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

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

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

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

最后的命令是:

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


查看完整回答
反对 回复 2021-11-15
  • 2 回答
  • 0 关注
  • 222 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信