Goでベンチマークテスト実行してみる
はじめに
Goでベンチマークテストを実行する方法を忘れないようにメモ感覚で書いておく。
対象の関数
func makeSlice() {
s := make([]int, 0, 10)
for i:=0; i<10; i++ {
s = append(s, i+1)
}
}
ベンチマーク関数の実装
func makeSlice() {
s := make([]int, 0, 10)
for i:=0; i<10; i++ {
s = append(s, i+1)
}
}
ユニットテストと同じように、次のようなフォーマットの関数として、_test.goという名前のファイルに記述する。
package main
import (
"testing"
)
func BenchmarkMakeSlice(b *testing.B) {
for i:=0; i<b.N; i++ {
makeSlice()
}
}
ベンチマークをとりたい関数をb.N回繰り返し精度を上げている。
コードが実行されるとb.Nは必要に応じて変化する。
ベンチマークテストの実行
ベンチマークテストケースを実行するには、コマンドgo testを実行する際にベンチフラグ(- bench)を指定する。以下ではドットを使うことで全てのベンチマークファイルを実行している。
$ go test -v -bench .
実行結果は以下の通り
=== RUN TestMakeSlice
--- PASS: TestMakeSlice (0.00s)
goos: darwin
goarch: amd64
pkg: awesomeProject
BenchmarkMakeSlice
BenchmarkMakeSlice-4 85463809 13.5 ns/op
PASS
ok awesomeProject 1.179s
ループは85463809回実行し、各ループは13.5ナノ秒(0.0135ミリ秒)かかった。
上では、別で用意している機能テストも実行されている。
機能テストは実行せずベンチマークだけを実行したい場合は、フラグ「- run」を指定すればよい。このフラグはどの機能テストを実行するか指定する。そのため、どの機能テストとも一致しない名前を指定すれば全てのテストが無視される。
$ go test - run x -bench .
goos: darwin
goarch: amd64
pkg: awesomeProject
BenchmarkMakeSlice-4 76079278 13.6 ns/op
PASS
ok awesomeProject 1.057s
Author And Source
この問題について(Goでベンチマークテスト実行してみる), 我々は、より多くの情報をここで見つけました https://qiita.com/kt-321/items/a422fd3a9cb11bfc417d著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .