go 覆蓋率統計

2022-03-13 08:04:00 字數 2900 閱讀 3464

被測服務是go服務,測試指令碼是python等非go語言實現,可參考以下兩種方法實現go服務的測試覆蓋率統計。

建立main_test.go檔案

或者與你的 func main(){}方法所在的檔名同名的test檔案。比如,有如下main.go檔案:

func main()根據以上main.go檔案,建立以下main_test.go檔案

}執行go test啟動服務

進入main_test.go所在目錄,一般在**根目錄,執行go test命令:

go test -coverprofile=cov.out -coverpkg ./... &

# -coverprofile 產出的覆蓋率檔案

# -coverpkg 要統計的覆蓋率檔案原始碼,可以指定檔案

# & 後台執行

執行測試用例

curl 127.0.0.1:8001    #服務是否正常啟動

curl 127.0.0.1:8001/api1 #測試用例1

curl 127.0.0.1:8001/api2 #測試用例2

curl 127.0.0.1:9999 #服務停止,注意:只有停止了服務才能生成覆蓋率檔案

生成覆蓋率報告

在**根目錄會生成cov.out覆蓋率檔案。為了方便檢視和瀏覽,可將out檔案轉換為html報告進行檢視,執行命令如下:

go tool cover -html cov.out -o index.html
拷貝index.html到本地可檢視**行覆蓋情況

生成覆蓋率二進位制檔案的原理介紹(插樁產物)

要執行系統測試,需要應用程式的編譯二進位制檔案。然後,在具有不同配置的不同環境中執行此二進位制檔案。golang提供了一種獨特的方法來生成 覆蓋率二進位制檔案,而不是go build生成的預設二進位制檔案。

生成的**覆蓋率二進位制檔案在每一行**後寫入乙個唯一的計數器,並檢查在執行二進位制檔案後呼叫此計數器的次數。

更多的技術細節可以在go-cover文件中找到。go cover 官方文件:

當執行go test時,覆蓋率二進位制檔案會自動生成並在之後處理。golang允許使用以下命令生成此覆蓋率二進位制檔案:

go test -c -covermode=count -coverpkg ./...

# # -c 表示 生成測試二進位制檔案

# -covermode=count 表示 生成的二進位制中包含覆蓋率計數資訊

# -o packagename.test 表示 覆蓋率二進位制檔名

# -coverpkg ./... 表示 要統計的覆蓋率檔案原始碼

更多的引數資訊可以執行go test -help來檢視。

建立main_test檔案

現在我們知道了如何生成二進位制檔案,我們必須確保二進位制檔案將按預期執行。您的**需要滿足以下要求,才能按照預期生成二進位制。

package中至少有乙個*_test.go檔案,否則不會生成二進位制檔案。建議建立main_test.go 檔案,或者與你的func main(){}所在的檔名同 名的test檔案,與上乙個方法類似,需要建立乙個main_test.go檔案讓go test來插樁

main_test.go 同上
該檔案定義了乙個systemtest標誌,幷包含乙個呼叫main函式的測試用例。

執行測試二進位制檔案開始執行測試。在例子中,這意味著呼叫testexternal,因為這是唯一的測試。執行testexternal 意味著呼叫main(),它 將像普通二進位制檔案那樣啟動應用程式。這也就意味著執行測試產生的二進位制檔案與執行普通二進位制檔案相同,只是執行測試產生的二進位制檔案將 會跟蹤覆蓋率執行,也就是我們常說的打樁。

為了防止在執行單元測試時執行此測試,新增了命令列標誌systemtest。如果未設定,則不會呼叫main()函式。而要執行系統測試,必須在執行測 試二進位制檔案期間通過附加-systemtest來設定標誌。

生成插樁後的覆蓋率二進位制檔案

在**根目錄執行以下命令:

go test -c -covermode=count -coverpkg ./... -o hello.test
執行完成後將生成乙個 hello.test檔案

以打樁二進位制檔案啟動服務

//啟動服務(打樁二進位制)

./hello.test -systemtest -test.coverprofile cov.out &

執行測試case

生成覆蓋率報告

執行完用例並停止服務後,在**根目錄下生成覆蓋率檔案cov.out

為了方便檢視和瀏覽,可將out檔案轉換為html報告進行檢視,執行命令如下:

go tool cover -html cov.out -o index.html
參考文件

go覆蓋率測試

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

覆蓋率選項,覆蓋率分析

covergroup選項提供不同的覆蓋率選項,來計算覆蓋率。乙個covergroup可能會被多個地方例化使用,預設情況下sv會將所有的例項的覆蓋率合併到一起計算。如果需要單獨列出每個covergroup例項的覆蓋率,需要以下設定覆蓋率選項。covergroup cov coverpoint tr.l...

功能覆蓋率

功能覆蓋率 function coverage 是屬於黑盒測試範疇內的,在實際測試中,涉及到的覆蓋率一般都是結構化覆蓋率,與黑盒相關的覆蓋率比較少。功能覆蓋中最常見的是需求覆蓋,其含義是通過設計一定的測試用例,要求每個需求點都被測試到。其公式是 需求覆蓋 被驗證到的需求數量 總的需求數量 在黑盒測試...