昨天我們討論到測試,其實除了一般程式的檢查以外,golang還內建了壓力測試的功能,可以檢查程式的效能。
跟測試一樣,golang是透過函數名稱來識別一個函數是否為壓力測試,命名規則上必須符合:
func BenchmarkXXX(b *testing.B) { ... }
這邊介紹一些壓力測試的特性:
go test
預設不會執行壓力測試,必須加上參數go test -test.bench=".*"
,這樣會執行全部的壓力測試案例。_test.go
結尾。Benchmark
開頭,之後可以接上任何英文字,但首字必須是大寫(原因同昨天的測試)b.N
是由框架提供的,用來決定測試的次數我們來看一個完整的例子:
package gotest
import (
"testing"
)
func Benchmark_Division(b *testing.B) {
for i := 0; i < b.N; i++ {
Division(4, 5)
}
}
程式本體的部分我們沿用昨天的Division
,一樣引入testing
就可以了,vs code也會支援壓力測試的UI,所以我們可以直接透過介面執行,會得到下面的結果:
Running tool: /usr/local/bin/go test -benchmem -run=^$ -bench ^Benchmark_Division$
goos: darwin
goarch: amd64
Benchmark_Division-8 2000000000 0.37 ns/op 0 B/op 0 allocs/op
PASS
ok _/Users/Chenbater/projects/go/day20 0.785s
Success: Benchmarks passed.
測試報告中2000000000
代表這個程式執行的次數,平均0.37
奈秒(十億分之一秒),平均使用了0 byte。
我們可以看到整個測試包非常的輕量,而且容易實踐,這樣我們每次在發佈前,都可以確認程式的品質。