1. 程式人生 > >GO Test 單元測試&壓力測試

GO Test 單元測試&壓力測試

背景

本文主要介紹golang的一個工具go test
Go語言中自帶有一個輕量級的測試框架testing和自帶的go test命令來實現單元測試和效能測試,testing框架和其他語言中的測試框架類似,你可以基於這個框架寫針對相應函式的測試用例,也可以基於該框架寫相應的壓力測試用例

go test 單元測試介紹

規則

  • 檔名必須是_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方法用來記錄測試的資訊。

編譯方式

  • go test . 編譯當前資料夾所有test測試用例
  • go test -p 編譯這個包測試
  • go test -v 列印測試資訊(預設不列印測試通過資訊)

例子

package test

import "testing"
func TestCount(t *testing.T) { count := 0 if count != 0 { t.Error("Test No Accept") } else { t.Log("Test Accept") } } func TestCount1(t *testing.T) { t.Error("Test Error") }

go test .
![測試結果](/Users/yidwang/Library/Containers/com.tencent.qq/Data/Library/Application Support/QQ/Users/1520990951/QQ/Temp.db/3.png)
go test -v .
![測試結果](/Users/yidwang/Library/Containers/com.tencent.qq/Data/Library/Application Support/QQ/Users/1520990951/QQ/Temp.db/2.png)

go test 壓力介紹

規則

  • 壓力測試用例必須遵循如下格式,其中XXX可以是任意字母數字的組合,但是首字母不能是小寫字母 func BenchmarkXXX(b *testing.B) { … }
  • 在壓力測試用例中,請記得在迴圈體內使用testing.B.N,他預設設定輪詢次數,保證程式正常退出
  • 其他約束跟單員測試相同

編譯方式

  • go test不會預設執行壓力測試的函式,如果要執行壓力測試需要帶上引數-bench,例如go test -bench=”.*” 表示測試全部的壓力測試函式
  • go test -count 測試例子執行測試
  • go test -run=name 要測試的檔名字

例子

package test

import "testing"

func Add(a int, b int) int {
    return a + b
}
func Benchmark_Addd(b *testing.B) {
    for i := 0; i < b.N; i++ {
        Add(i, i*10)
    }
}

![測試結果](/Users/yidwang/Library/Containers/com.tencent.qq/Data/Library/Application Support/QQ/Users/1520990951/QQ/Temp.db/4.png)
![測試結果](/Users/yidwang/Library/Containers/com.tencent.qq/Data/Library/Application Support/QQ/Users/1520990951/QQ/Temp.db/6.png)