go生成單元測試覆蓋率 Go 中的效能測量

2021-10-17 09:43:56 字數 1729 閱讀 6143

「a journey with go」 專屬插圖,由 renee french 根據原始 go gopher 製作。

:information_source: 本文基於 go 1.13.

go test 命令提供了許多出色的功能,比如**覆蓋率,cpu 和 記憶體分析。要提供這些統計資訊,go 就需要一種方式來跟蹤 cpu 使用率,或在**覆蓋中跟蹤乙個函式何時被用到。

go 使用多種方式來產生這些統計資訊:

我們來寫乙個簡單的程式並回顧所有內容。這是我們在後面的章節將使用的**:

package mainimport "math/rand"func main() //go:noinlinefunc run() int  else }return a}//go:noinlinefunc add(a *int) //go:noinlinefunc sub(a *int)
main.go 託管在 [github] (檢視通過 gossafunc=run go test -cover 命令生成的 ssa **,我們可以檢視 go 對程式進行了什麼樣的修改:

變數 gocover_0_313837343662366134383538 是乙個標誌陣列,其中每個鍵是乙個**塊,當**實際進入這一塊時對應的標誌設定為 1.

生成的**將稍後在管理**覆蓋率報告的函式中使用。 我們可以通過使用 objdump 命令反彙編**覆蓋期間生成的目標檔案來進行驗證。 執行 go test -cover -o main.o && go tool objdump main.go 將反彙編**並顯示缺少的部分。 它首先初始化並在自動生成的 init 函式中註冊 coverage:

test.go 新增的 init 方法

然後,如前所述,測試將在執行期間收集覆蓋率資料並且會觸發乙個方法來實際寫入和顯示覆蓋率:

go test 呼叫的 after 函式

跟蹤 cpu 使用率的策略則有所不同。go 會停止程式並收集正在執行程式的樣本。這裡是未開啟 cpu 分析的**的 trace:

這裡是相同**開啟了 cpu 分析的 trace:

profilewriter 方法將迴圈呼叫,每 100 毫秒收集 cpu 資料,以在效能分析結束時最終生成報告。

記憶體分析包含在原始碼中,並已整合在記憶體分配系統中。在使用 -memprofile開啟記憶體分析的情況下,位於malloc.go中的記憶體分配器,將對已分配的記憶體進行分析。這裡,依然可以通過反彙編**進行驗證。這裡是記憶體分配器的使用:

開啟了記憶體分配分析

go覆蓋率測試

原文 對beego的控制器函式進行單測 改進的內容 需要攜帶的body資訊 c.ctx.input.requestbody byte content 需要攜帶的header c.ctx.request.header myheader string c.setsession login 123 c.p...

Gcov單元測試覆蓋率

所謂單元測試覆蓋率是指 的每一行都應該寫單元測試覆蓋到,所以對於每乙個方法都寫乙個單元測試是必須的,另外,如果該方法中存在眾多的 if語句分支,也應該在單元測試中覆蓋到。在c的世界中,可以用 gcov工具計算覆蓋率,它會運動每乙個單元測試,然後統計 每一行的執 況,gcov是最初用來測試 linux...

golang 單元測試覆蓋率

參考單元測試是 質量的重要保證,測試覆蓋率是關鍵的衡量指標。在golang 中,通過go test 進行單元測試,並可以分析覆蓋率。首先看下示例 新建目錄utils,目錄有以下檔案 ll total 16 rw r r 1 lanyang staff 132b 12 31 21 09 add hin...