日常開發中, 測試是不能缺少的,每次手動測試非常費時費力,通過單元測試可以達到一次實現多次利用;
單元測試主要是通過模擬業務中的引數,呼叫我們的函式,然後獲取執行結果,再判斷結果是否符合規則;同時還可以對某乙個方法進行效能分析
在go 標準庫中有乙個叫做testing
的測試框架, 可以用於單元測試和效能測試. 它是和命令go test
整合使用的,測試檔案是以後綴_test.go
命名的, 通常和被測試的檔案放在同乙個包中.
單元測試我們大部分情況下無需增加或修改業務**,只需增加單元測試**即可,在這個實驗過程中,我們簡單編寫乙個簡單的業務**,用來模擬專案中的業務**;然後再新增單元測試**進行測試。
我們找乙個空資料夾,新建乙個main.go檔案,在檔案中將一下**複製進去並儲存
package main
func sum(count int) int
接著我們繼續在當前資料夾下新建單元測試**,按照簡介中的規則,我們需要新建乙個名為main_test.go
的檔案,然後在檔案中編寫測試**,示例**如下
package main
import (
"testing"
)//單元測試
func testsum(t *testing.t)
}//效能測試
func benchmarksum(b *testing.b)
}
普通測試主要是驗證返回的結果是否符合預期,執行的命令如下所示
go test -v main_test.go main.go
命令執行後,返回的結果如下所示
從上圖中可以看到,單元測試提示測試通過,說明我們程式符合預期
效能測試主要是通過多次呼叫程式,總耗時來分析程式的效能,類似於ab壓力測試,執行命令如下所示
go test -v -bench="benchmarksum$" --run=none main_test.go main.go
命令中的-bench="benchmarksum$"
引數代表要窒息哪乙個方法,執行結果如下所示
在上圖中可以看到程式被呼叫了1000000000次,平均耗時0.254ns
效能分析主要是檢視方法中具體的瓶頸,比如a方法呼叫了c、b、d多個方法,具體耗時在什麼位置,我們可以在上一條效能測試的命令中加入-cpuprofile cpu.out
引數(文章附錄有多種分析指標型別)加入到效能測試中的具體資訊儲存
go test -v -bench="benchmarksum$" --run=none -cpuprofile cpu.out main_test.go main.go
通過go 自帶工具分析儲存的檔案
go tool pprof cpu.out
命令執行之後返回資訊如下圖所示
通過第三方工具檢視分析
apt install graphviz && go tool pprof -http=":" cpu.out
命令執行之後,會返回乙個localhost網域名稱加隨機埠的**,開啟**之後,能看到如下資訊,因為我測試的方法比較簡單
各引數含義翻譯
-blockprofile block.out
將goroutine阻塞配置檔案寫入指定檔案
當所有測試完成時。
按照-c的方式編寫測試二進位制檔案。
-blockprofilerate n
控制細節提供的goroutine阻塞配置檔案
呼叫執行時。setblockprofilerate與n。
參見" go doc run . setblockprofilerate "
剖析器的目標是平均每個阻塞事件取樣一次
n納秒的程式花費被阻塞。預設情況下,
如果以及。塊配置檔案沒有設定這個標誌,所有的阻塞事件
,相當於-test.blockprofilerate=1。
-coverprofile cover.out
在所有測試通過後,向檔案寫入覆蓋率配置檔案。
設定覆蓋。
-cpuprofile cpu.out
退出前將cpu配置檔案寫入指定檔案。
按照-c的方式編寫測試二進位制檔案。
-memprofile mem.out
通過所有測試後,將分配配置檔案寫入該檔案。
按照-c的方式編寫測試二進位制檔案。
-memprofilerate n
啟用更精確(和昂貴)的記憶體分配配置檔案
設定runtime.memprofilerate。參見" go doc run . memprofilerate "。
要配置所有記憶體分配,使用-test.memprofilerate=1。
-mutexprofile mutex.out
將互斥鎖爭用配置檔案寫入指定檔案
當所有測試完成時。
按照-c的方式編寫測試二進位制檔案。
-mutexprofilefraction n
樣本1在n堆疊的蹤跡goroutines持有a
爭用互斥鎖。
日期:2020-08-1 golang 單元測試框架
自動化生成測試方法 gotests 1.資料庫 mock 2.go check 框架 3.ginkgo 框架 4.各個框架的主要用途 convey 主要用途是用來組織測試用例的 gomock 主要用來給介面打樁的。mockgen可以生成對應的介面測試檔案。gostub 主要用來給變數 函式 過程打樁...
golang 單元測試
單元測試是質量保證十分重要的一環,好的單元測試不僅能及時地發現問題,更能夠方便地除錯,提高生產效率,所以很多人認為寫單元測試是需要額外的時間,會降低生產效率,是對單元測試最大的偏見和誤解 go 語言原生支援了單元測試,使用上非常簡單,測試 只需要放到以 test.go結尾的檔案中即可。golang的...
Golang測試 單元測試
1 測試檔案必須以 test.go結尾 2 測試函式名必須以test xx開始 x為對應的需要測試的函式 3 使用go test命令開啟測試 檔名以 test結尾,函式以test開頭,在執行 go test 命令時會自動匹配測試檔案很執行測試函式 1 有時候我們將測試檔案 以 test.go 結尾的...