golang代碼覆蓋率


寫了自動化,就得統計代碼覆蓋率= =

原鏈接:https://www.elastic.co/blog/code-coverage-for-your-golang-system-tests

其實看了原鏈接我並沒有能成功統計出來,還是看了同事的筆記才成功的。

操作步驟 -- 按我實際操作的步驟寫的

1 創建main函數的test文件

2 編譯代碼,生成可執行文件

3 統計覆蓋率

一  Main函數的test文件

package main
// This file is mandatory as otherwise the filebeat.test binary is not generated correctly.
import (
  "testing"
  "flag"
)
var systemTest *bool
func init() {
  systemTest = flag.Bool("systemTest", false, "Set to true when running system tests")
}
// Test started when the test binary is started. Only calls main.
func TestSystem(t *testing.T) {
  if *systemTest {
     main()
  }
}

注意:

1 命名:看一下自己代碼的main()函數所在的go文件名稱,直接命名為*_test.go文件即可;  比如,代碼文件名 main_server.go,可直接命名為main_server_test.go

2 目錄:放在與被測文件同目錄下 @1

 

二  編譯代碼

1  查看main函數,將其中的os.Exit()更改為return (根據實際情況分別為return/return 0/return 255...)

2 原編譯命令為go build

  此處使用命令go test -c -covermode=count -ldflags "-X main._VERSION_=$VERSION.${reversion}"  -coverpkg  ./gopath/src/mvdsp/module/,./gopath/src/mvdsp/extractor/,./gopath/src/mvdsp/mvutil/,./gopath/src/mvdsp/protocol/ -o dsp_server.test

① -c 表示 生成測試二進制文件

② -covermode=count 表示 生成的二進制中包含覆蓋率計數信息

③ -ldflags 用來將版本信息寫入二進制文件,而不使用額外的version文件

④ -coverpkg 后面是要統計覆蓋率的文件源碼

⑤ -o 后面是輸出的二進制文件名

⑥ ......可能還有更多的可用參數,我就不知道了

3 執行命令,生成一個可執行的二進制文件,拷貝到部署目錄下

4 啟動服務,在啟動命令后加參數: -systemTest -test.coverprofile coverage/coverage.cov

① -systemTest 用來啟動前面說過的main test

②  -test.coverprofile 用來指定覆蓋率信息寫入到哪個文件

三  統計覆蓋率

1 執行自動化

2 執行如下命令,生成覆蓋率文件coverage.cov

pid_server=`ps -ef | grep "my_server -systemTest" | grep -v "grep" | awk '{print $2}'`
kill $pid_server

覆蓋率產生的條件是程序需要正常退出/結束, 因此當自動化運行完畢后,我們需要給程序發送消息表示結束才可以得到覆蓋率文件

對此:go是需要return,即可以kill server_pid(若服務使用supervisor啟動,還會自己拉起來,不會影響后續調用)

           c/c++ 是需要exit?,發送p __gcov_flush(),見http://www.cnblogs.com/zhaoxd07/p/5608177.html

           python需要觸發atexit模塊注冊一個回調函數,可使用CTRL+C或者kill -2

3 生成測試報告 

go tool cover -html=./coverage/coverage.cov -o /data/reports/coverage.html
./coverage/gocover-cobertura < coverage.cov > /data/reports/coverage.xml  

生成xml報告時需要安裝一個小插件:go get github.com/t-yuki/gocover-cobertura

 

將bin下的gocover-cobertura放到方便執行的目錄下即可使用

4 將測試報告集成到jenkins,大功告成啦

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM