golang testing包測試用例和性能測試
發佈時間: 2016-01-10 瀏覽次數:2802 分類: GO
如何保證代碼的質量和可靠性?Golang自帶了testing包可用來實現測試用例和性能測試.
如下爲例,新建gotest項目目錄,編寫兩個文件bubblesort.go和bubblesort_test.go
bubblesort.go
- package gotest
- //from small to big
- func BubbleSort(num []int) {
- flag := false
- for i := 0; i < len(num)-1; i++ {
- flag = false
- for j := 0; j < len(num)-1-i; j++ {
- if num[j] > num[j+1] {
- num[j], num[j+1] = num[j+1], num[j]
- flag = true
- }
- }
- if !flag {
- break
- }
- }
- return
- }
bubblesort_test.go
- package gotest
- import (
- "testing"
- )
- func TestBubbleSort(t *testing.T) {
- values := []int{5, 4, 3, 2, 1}
- BubbleSort(values)
- if values[0] != 1 || values[1] != 2 || values[2] != 3 || values[3] != 4 ||
- values[4] !=5 {
- t.Error("BubbleSort() failed. Got", values, "Expected 1 2 3 4 5")
- }
- }
- func BenchmarkBubbleSort(b *testing.B) {
- for i := 0; i < b.N; i++ {
- values := []int{5, 4, 3, 2, 1}
- BubbleSort(values)
- }
- }
golang測試用例使用原則:
- 文件名必須是_test.go結尾的,這樣在執行go test的時候纔會執行到相應的代碼
- 你必須import testing這個包
- 所有的測試用例函數必須是Test開頭
- 測試用例會按照源代碼中寫的順序依次執行
- 測試函數TestXxx()的參數是testing.T,我們可以使用該類型來記錄錯誤或者是測試狀態
- 測試格式:func TestXxx (t *testing.T),Xxx部分可以爲任意的字母數字的組合,但是首字母不能是小寫字母[a-z],例如Testintdiv是錯誤的函數名。
- 函數中通過調用testing.T的Error, Errorf, FailNow, Fatal, FatalIf方法,說明測試不通過,調用Log方法用來記錄測試的信息。
- 壓力測試用例必須遵循如下格式,其中XXX可以是任意字母數字的組合,但是首字母不能是小寫字母
- go test不會默認執行壓力測試的函數,如果要執行壓力測試需要帶上參數-test.bench,語法:-test.bench="test_name_regex",例如go test -test.bench=".*"表示測試全部的壓力測試函數
- 在壓力測試用例中,請記得在循環體內使用testing.B.N,以使測試可以正常的運行
- 文件名也必須以_test.go結尾
如何運行測試用例?在項目目錄下運行:go test
- PASS
- ok test/gotest 0.002s
顯示詳細測試通過和log信息:go test -v
- === RUN TestBubbleSort
- --- PASS: TestBubbleSort (0.00s)
- PASS
- ok test/gotest 0.002s
查看測試覆蓋率:go test -cover
- $ go test -cover
- PASS
- coverage: 90.0% of statements
- ok test/gotest 0.001s
如果運行壓力測試?執行: go test -test.bench=".*"
- $ go test -test.bench=".*"
- PASS
- BenchmarkBubbleSort-4 30000000 45.8 ns/op
- ok test/gotest 1.424s
還可以利用go tool pprof工具生產性能報告.