In my Go package there are several benchmark files like map1_benchmark_test.go
and map2_benchmark_test.go
. In every *_benchmark_test.go
file, there is more than one benchmark function like func BenchmarkMapTravel(b *testing.B)
and func BenchmarkMapGet(b *testing.B)
.
Question is, how can I test just one benchmark function?
I attempted to read some manuals, and got nothing about benchmark by running go help test
.
-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.
For convenience, each of these
-test.X
flags of the test binary is also available as the flag-X
in 'go test
' itself.
For help,
$ go help testflag
For example,
go test -test.bench MapTravel
go test -test.bench MapGet
or
go test -bench MapTravel
go test -bench MapGet
To bypass test functions, include a -test.run
pattern that filters out every single test. For example,
go test -test.bench MapTravel -test.run=thisexpressionwontmatchanytest
or
go test -bench MapTravel -run=^$
Test only TestFuncOne
$>> go test -run TestFuncOne
stuff_to_test.go
TestFuncOne() {
}
TestFuncTwo() {
}
There is no flag you can provide, that will run only benchmarks (or only one benchmark). The only flags related to these are:
-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.
So if you want only to run one benchmark, you can do this:
go test -bench=nameOfYourBenchmark -run=^a
This will cause to run only tests that starts with a
. And because each test should be named Test<something>
, there will be no tests to run.
To run only benchmarks:
go test -bench=. -run=^a