Go test 詳解

Go test 的測試用例形式

測試用例有四種形式:

  • TestXxxx(t *testing.T) // 基本測試用例
  • BenchmarkXxxx(b *testing.B) // 壓力測試的測試用例
  • Example_Xxx() // 測試控制臺輸出的例子
  • TestMain(m *testing.M) // 測試Main函數(shù)

Go test 有兩種運(yùn)行模式:

1、本地目錄模式,在沒有包參數(shù)(例如 go testgo test -v)調(diào)用時發(fā)生。在此模式下,go test 編譯當(dāng)前目錄中找到的包和測試,然后運(yùn)行測試二進(jìn)制文件。在這種模式下,caching 是禁用的。在包測試完成后,go test 打印一個概要行,顯示測試狀態(tài)、包名和運(yùn)行時間。

2、包列表模式,在使用顯示包參數(shù)調(diào)用 go test 時發(fā)生(例如 go test math,go test ./... 甚至是 go test .)。在此模式下,go 測試編譯并測試在命令上列出的每個包。如果一個包測試通過,go test 只打印最終的 ok 總結(jié)行。如果一個包測試失敗,go test 將輸出完整的測試輸出。如果使用 -bench-v 標(biāo)志,則 go test 會輸出完整的輸出,甚至是通過包測試,以顯示所請求的基準(zhǔn)測試結(jié)果或詳細(xì)日志記錄。

go test 的變量有哪些?

  • test.short : 一個快速測試的標(biāo)記,在測試用例中可以使用 testing.Short() 來繞開一些測試
  • test.outputdir : 輸出目錄
  • test.coverprofile : 測試覆蓋率參數(shù),指定輸出文件
  • test.run : 指定正則來運(yùn)行某個/某些測試用例
  • test.memprofile : 內(nèi)存分析參數(shù),指定輸出文件
  • test.memprofilerate : 內(nèi)存分析參數(shù),內(nèi)存分析的抽樣率
  • test.cpuprofile : cpu分析輸出參數(shù),為空則不做cpu分析
  • test.blockprofile : 阻塞事件的分析參數(shù),指定輸出文件
  • test.blockprofilerate : 阻塞事件的分析參數(shù),指定抽樣頻率
  • test.timeout : 超時時間
  • test.cpu : 指定cpu數(shù)量
  • test.parallel : 指定運(yùn)行測試用例的并行數(shù)

Go test flag

  • -args
  • -c
  • -exec xprog
  • -i
  • -o file
  • -bench regexp
  • -benchtime t
  • -count n
  • -cover
  • -covermode set,count,atomic
  • -coverpkg pkg1,pkg2,pkg3
  • -cpu 1,2,4
  • -list regexp
  • -parallel n
  • -run regexp
  • -short
  • -timeout d
  • -v
  • -benchmem
  • -blockprofile block.out
  • -blockprofilerate n
  • -coverprofile cover.out
  • -cpuprofile cpu.out
  • -memprofile mem.out
  • -memprofilerate n
  • -mutexprofile mutex.out
  • -mutexprofilefraction n
  • -outputdir directory
  • -trace trace.out

更多中文文檔:

什么是單元測試?

單元測試,是一種測試我們的代碼邏輯有沒有問題,有沒有按照我們所期望的來運(yùn)行,通過它來保證我們的代碼質(zhì)量。

顧名思義,單元測試,大多都是對某一個函數(shù)方法進(jìn)行的測試,以讓我們的測試粒度最細(xì)。

如何編寫單元測試?

go test

可以測試 func TestXxx(*testing.T)

子測試

如何跳過一些測試

https://stackoverflow.com/questions/24030059/skip-some-tests-with-go-test

什么是基準(zhǔn)測試?

基準(zhǔn)測試,是一種測試代碼執(zhí)行性能的方式,你可以將多種代碼實(shí)現(xiàn)進(jìn)行比對。

基準(zhǔn)測試主要是通過測試 CPU (go test -bench . -test.cpuprofile) 和內(nèi)存 (go test -bench . --benchmem) 的分配,來展示被測試代碼的性能,進(jìn)而找到性能更優(yōu)的解決方案。

如何編寫基準(zhǔn)測試?

func BenchmarkXXX(b *testing.B) {    }

什么是 HTTP 測試?

顧名思義,就是測試 web http 協(xié)議的測試。

如何編寫 HTTP 測試?

Go 標(biāo)準(zhǔn)庫為我們提供了一個 httptest 的庫,通過它就能夠輕松的完成 HTTP 的測試。

什么是測試覆蓋率?

由單元測試的代碼,觸發(fā)運(yùn)行到的被測試代碼的代碼行數(shù)占所有代碼行數(shù)的比例,被稱為測試覆蓋率,代碼覆蓋率不一定完全精準(zhǔn),但是可以作為參考,可以幫我們測量和我們預(yù)計的覆蓋率之間的差距。

go test 工具就為我們提供了一個度量測試覆蓋率的能力。

go test -v -coverprofile=c.out

再通過 go tool 來將 c.out 轉(zhuǎn)換成 html 格式的測試覆蓋率報告。

go tool cover -html=c.out -o=tag.html

其他更多,可以參考:測試

# 生成指定 package 的測試覆蓋率(fib.out 后面不帶參數(shù)的,默認(rèn)是命令所在目錄)
$ go test -v -covermode=count -coverprofile fib.out
# 查看匯總的 fib 測試覆蓋率
$ go tool cover -func=fib.out
# 生成 html
$ go tool cover -html=fib.out -o fib.html

VSCode Go Test Coverage 插件

Go Coverage Viewer is the simplest way to view your code coverage results right inside the editor

測試比較工具

  • benchcmp
  • benchviz

第三方測試庫

參考資料

  1. Go 單元測試,基準(zhǔn)測試,http 測試
  2. Go 測試,go test 工具的具體指令 flag
  3. 測試、性能測試以及代碼示例的編寫
  4. visualizing-go-benchmarks-with-benchviz
  5. advanced-testing-with-go / YouTube 視頻
  6. Testing Techniques / YouTube 視頻
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容