2013-04-23 73 views
26

在我的Go包中有几个基准文件,如map1_benchmark_test.gomap2_benchmark_test.go。在每个*_benchmark_test.go文件中,都有多个基准函数,如func BenchmarkMapTravel(b *testing.B)func BenchmarkMapGet(b *testing.B)如何测试只有一个基准测试功能?

问题是,我该如何测试一个基准测试函数?

我试图阅读一些手册,并通过运行go help test没有得到任何有关基准。

回答

45

Description of testing flags

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

为了方便起见,每个测试二进制的这些-test.X标志是 也可作为在 'go test' 本身的标志-X

有关帮助信息,

$ go help testflag 

例如,

go test -test.bench MapTravel 
go test -test.bench MapGet 

go test -bench MapTravel 
go test -bench MapGet 

要绕过测试功能,包括-test.run图案滤掉每一个测试。例如,

go test -test.bench MapTravel -test.run=thisexpressionwontmatchanytest 

go test -bench MapTravel -run=^$ 
+3

只有一个基准测试运行,但其他测试mehonds像'FUNC TestMapGet(T * testing.T)'不属于基准测试过。那么,如何在没有其他测试运行的情况下运行基准测试? – hardPass 2013-04-23 06:15:36

+0

看到我修改的答案。 – peterSO 2013-04-23 06:34:13

+5

请注意,您不需要标记中的'test.'前缀,您可以只写'go test -bench MapGet -run XXX',这样稍微罗嗦一点就可以输入。 (从文档:为方便起见,测试二进制文件中的每个'-test.X'标志也可以在'go test'本身作为标志'-X'使用。) – 2013-04-23 06:55:19

0

测试仅TestFuncOne

$>> go test -run TestFuncOne 

stuff_to_test.go

TestFuncOne() { 
} 

TestFuncTwo() { 
} 
2

没有可以提供的标志,只能运行基准(或只有一个基准)。所述only flags related这些是:

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

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

所以,如果你想只运行一个标杆,你可以这样做:

go test -bench=nameOfYourBenchmark -run=^a 

这将导致只运行与a开始测试。并且因为每个测试应该被命名为Test<something>,所以不会有测试运行。

只运行基准测试:

go test -bench=. -run=^a