如何只测试一个基准函数?

har*_*ass 30 benchmarking unit-testing go

在我的Go包中有几个像map1_benchmark_test.go和的基准文件map2_benchmark_test.go.在每个*_benchmark_test.go文件中,都有不止一个基准函数,比如func BenchmarkMapTravel(b *testing.B)func BenchmarkMapGet(b *testing.B).

问题是,我怎样才能测试一个基准函数?

我试图阅读一些手册,并且通过运行得不到基准go help test.

pet*_*rSO 54

测试标志的描述

-test.bench pattern
    Run benchmarks matching the regular expression.
    By default, no benchmarks run.

-test.run pattern
    Run only those tests and examples matching the regular
    expression.
Run Code Online (Sandbox Code Playgroud)

为方便起见,-test.X测试二进制文件的这些标志中的每一个也可以作为"本身-X"中的标志go test.

求助,

$ go help testflag
Run Code Online (Sandbox Code Playgroud)

例如,

go test -test.bench MapTravel
go test -test.bench MapGet
Run Code Online (Sandbox Code Playgroud)

要么

go test -bench MapTravel
go test -bench MapGet
Run Code Online (Sandbox Code Playgroud)

要绕过测试功能,请包含-test.run过滤掉每个测试的模式.例如,

go test -test.bench MapTravel -test.run=thisexpressionwontmatchanytest
Run Code Online (Sandbox Code Playgroud)

要么

go test -bench MapTravel -run=^$
Run Code Online (Sandbox Code Playgroud)

  • 请注意,您不需要在标志中使用`test.前缀,您只需编写`go test -bench MapGet -run XXX`,它可以输入更少的字体.(来自文档:为方便起见,测试二进制文件的每个`-test.X`标志也可以作为`go test`本身的标志`-X`使用.) (5认同)
  • 只有一个基准测试运行,但其他测试方法如`func TestMapGet(t*testing.T)`也不是基准测试.那么,如何在没有任何其他测试的情况下运行基准测试? (3认同)

Sal*_*ali 5

您无法提供仅运行基准测试(或仅运行一个基准测试)的标志。与这些相关的唯一标志是:

-bench regexp 运行与正则表达式匹配的基准测试。默认情况下,不运行任何基准测试。要运行所有基准测试,请使用“-bench”。或“-bench=.”。

-run regexp 仅运行与正则表达式匹配的测试和示例。

因此,如果您只想运行一个基准测试,您可以这样做:

go test -bench=nameOfYourBenchmark -run=^a
Run Code Online (Sandbox Code Playgroud)

这将导致仅运行以 开头的测试a。而且因为每个测试都应该被命名Test<something>,所以不会有任何测试要运行。

仅运行基准测试:

go test -bench=. -run=^a
Run Code Online (Sandbox Code Playgroud)