go testing

golang testing包測試用例和性能測試

發佈時間: 2016-01-10 瀏覽次數:2802 分類: GO

如何保證代碼的質量和可靠性?Golang自帶了testing包可用來實現測試用例和性能測試.
如下爲例,新建gotest項目目錄,編寫兩個文件bubblesort.go和bubblesort_test.go
bubblesort.go

  1. package gotest
  2.  
  3. //from small to big
  4. func BubbleSort(num []int) {
  5. flag := false
  6. for i := 0; i < len(num)-1; i++ {
  7. flag = false
  8. for j := 0; j < len(num)-1-i; j++ {
  9. if num[j] > num[j+1] {
  10. num[j], num[j+1] = num[j+1], num[j]
  11. flag = true
  12. }
  13. }
  14. if !flag {
  15. break
  16. }
  17. }
  18. return
  19. }

bubblesort_test.go
  1. package gotest
  2.  
  3. import (
  4. "testing"
  5. )
  6.  
  7. func TestBubbleSort(t *testing.T) {
  8. values := []int{5, 4, 3, 2, 1}
  9. BubbleSort(values)
  10. if values[0] != 1 || values[1] != 2 || values[2] != 3 || values[3] != 4 ||
  11. values[4] !=5 {
  12. t.Error("BubbleSort() failed. Got", values, "Expected 1 2 3 4 5")
  13. }
  14. }
  15.  
  16. func BenchmarkBubbleSort(b *testing.B) {
  17. for i := 0; i < b.N; i++ {
  18. values := []int{5, 4, 3, 2, 1}
  19. BubbleSort(values)
  20. }
  21. }

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方法用來記錄測試的信息。

golang壓力測試使用原則:

  • 壓力測試用例必須遵循如下格式,其中XXX可以是任意字母數字的組合,但是首字母不能是小寫字母
  • go test不會默認執行壓力測試的函數,如果要執行壓力測試需要帶上參數-test.bench,語法:-test.bench="test_name_regex",例如go test -test.bench=".*"表示測試全部的壓力測試函數
  • 在壓力測試用例中,請記得在循環體內使用testing.B.N,以使測試可以正常的運行
  • 文件名也必須以_test.go結尾

如何運行測試用例?在項目目錄下運行:go test

  1. PASS
  2. ok test/gotest 0.002s

顯示詳細測試通過和log信息:go test -v

  1. === RUN TestBubbleSort
  2. --- PASS: TestBubbleSort (0.00s)
  3. PASS
  4. ok test/gotest 0.002s

查看測試覆蓋率:go test -cover

  1. $ go test -cover
  2. PASS
  3. coverage: 90.0% of statements
  4. ok test/gotest 0.001s

如果運行壓力測試?執行: go test -test.bench=".*"

  1. $ go test -test.bench=".*"
  2. PASS
  3. BenchmarkBubbleSort-4 30000000 45.8 ns/op
  4. ok test/gotest 1.424s

還可以利用go tool pprof工具生產性能報告.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章