더북(TheBook)

testing 패키지는 벤치마크 테스트 기능도 제공한다. _test.go 파일에 이름은 Benchmark로 시작하고 *testing.B를 매개변수로 받는 함수가 있으면 Go는 이 함수를 벤치마크 함수로 인식한다.

func BenchmarkLenForString(b *testing.B) {
    b.StopTimer()
    v := make([]string, 1000000)
    for i := 0; i < 1000000; i++ {
        v[i] = strconv.Itoa(i)
    }
    b.StartTimer()
    for i := 0; i < b.N; i++ {
        Len(v[i%1000000])
    }
}

이 함수는 시작 부분에서 타이머를 멈추게 했다(b.StopTimer()). 벤치마크 테스트를 위한 테스트 데이터를 생성하는 시간은 측정되지 않게 하기 위해서다. 테스트 데이터 생성이 끝난 후에는 다시 타이머를 시작하게 했다(b.StartTimer()).

벤치마크 테스트를 수행하려면 go test 명령을 수행할 때 -bench 옵션과 벤치마크를 수행하려는 함수 이름에 대한 정규표현식 문자열을 함께 전달해야 한다. .*나 .을 -bench 옵션값으로 전달하면 모든 벤치마크 함수에 벤치마크 테스트를 수행한다.

명령 프롬프트

$ go test -test.bench=.

PASS

BenchmarkLenForString  20000000       94.4 ns/op

ok      test/test2 1.989s

이 결과는 벤치마크 테스트 함수인 BenchmarkLenForString()에 20,000,000 루프를 반복한 결과와 작업의 수행 시간을 나노초로 보여준다. 루프의 수(b.N)는 Go의 테스트 도구가 적절한 값으로 지정한다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.