가장 빨리 만나는 Go 언어 Unit 61.1 벤치마크 테스트 사용하기

저작권 안내
  • 책 또는 웹사이트의 내용을 복제하여 다른 곳에 게시하는 것을 금지합니다.
  • 책 또는 웹사이트의 내용을 발췌, 요약하여 강의 자료, 발표 자료, 블로그 포스팅 등으로 만드는 것을 금지합니다.

단위 테스트 사용하기

이재홍 http://www.pyrasis.com 2014.12.17 ~ 2015.02.07

벤치마크 테스트 사용하기

테스트 코드는 함수에 매개변수를 넣고 결괏값이 정상적으로 동작하는지만 검사합니다. 벤치마크 테스트는 성능을 측정하는 기능입니다.

덧셈 함수의 성능을 측정해보겠습니다. 다음 내용을 GOPATH/src/calc/sum_test.go 파일로 저장합니다.

GOPATH/src/calc/sum_test.go
package calc

import "testing"

func BenchmarkSum(b *testing.B) {
	for i := 0; i < b.N; i++ {
		Sum(1, 2)
	}
}

벤치마크를 수행하는 함수는 다음 규칙을 지켜야 합니다. 그렇지 않으면 컴파일러에서 벤치마크 테스트 코드를 인식하지 못합니다.

  • 테스트 함수는 BenchmarkSum처럼 항상 Benchmark로 시작합니다.
  • Benchmark 다음에 함수 이름이 오며 함수 이름의 첫 글자는 항상 대문자로 만들어야 합니다. 예) BenchmarkSum, BenchmarkData, BenchmarkConvert
  • 항상 *testing.B 타입의 매개변수를 받습니다.

벤치마크 테스트는 b.N에 정의된 값 만큼 for 반복문을 실행합니다. 그리고 반복문 안에서 성능을 측정할 함수를 호출합니다.

콘솔(터미널)에서 GOPATH/src/calc 디렉터리로 이동한 뒤 다음 명령을 실행합니다(Windows에서는 명령 프롬프트 또는 PowerShell을 실행합니다). 저는 GOPATH를 /home/pyrasis/hello_project로 설정하였습니다.

~$ cd $GOPATH/src/calc
~/hello_project/src/calc$ go test -bench .
testing: warning: no tests to run
PASS
BenchmarkSum    2000000000               0.81 ns/op
ok      calc    1.805s

go test -bench . 형식입니다. 즉, -bench . 옵션을 붙여주면 Benchmark로 시작하는 함수를 자동으로 실행해줍니다.

Sum 함수를 20억 회 실행하였고 for 반복문 한 번에 0.81 나노초(ns)가 걸렸다는 뜻입니다. 여기서는 덧셈 함수가 매우 간단하여 벤치마크 결과가 다소 의미가 없지만 실무에서는 유용하게 활용될 것입니다.


저작권 안내

이 웹사이트에 게시된 모든 글의 무단 복제 및 도용을 금지합니다.
  • 블로그, 게시판 등에 퍼가는 것을 금지합니다.
  • 비공개 포스트에 퍼가는 것을 금지합니다.
  • 글 내용, 그림을 발췌 및 요약하는 것을 금지합니다.
  • 링크 및 SNS 공유는 허용합니다.

Published

2015-06-01