亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

golang 生成功能測試的代碼覆蓋率

golang 生成功能測試的代碼覆蓋率

Go
DIEA 2021-12-07 10:47:43
我有一個 go webservices(一個 REST Api),我們有單元測試,并且 go cover 工作正?!,F在我們有一個用 python 編寫的測試套件,它啟動一個服務器實例,運行測試,停止服務器。我想知道是否有一些工具允許我使用特定標志運行我的服務器二進制文件,以便最后打印我的“黑盒”測試執行的測試的覆蓋范圍?
查看完整描述

3 回答

?
千巷貓影

TA貢獻1829條經驗 獲得超7個贊

基于這篇文章, 這是我所做的:


main_test.go使用此內容創建了一個:


package main


// code based on technique explained here:

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

// you can look there if you want to see how not to execute this test

// when running unit test etc.


// This file is mandatory as otherwise the packetbeat.test binary is not generated correctly.


import (

    "testing"

)


// Test started when the test binary is started. Only calls main.

func TestSystem(t *testing.T) {

    main()

}

因為它是一個 Web 服務(因此處于無限循環中),所以我需要一種在 SIGTERM 上優雅退出的方法(而不會將其視為失?。?,所以我使用了該包go get gopkg.in/tylerb/graceful.v1并替換了(我使用go-restful) main.go 中的行


    -       log.Fatal(http.ListenAndServe(":"+port, nil))

    +       graceful.Run(":"+port, 10*time.Second, nil)

然后我會像這樣運行測試


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

./foo.test -test.coverprofile coverage.cov & echo $! > /tmp/test.pid

運行我的測試套件

kill "$(cat /tmp/test.pid)"


查看完整回答
反對 回復 2021-12-07
?
繁花如伊

TA貢獻2012條經驗 獲得超12個贊

你可能不想這樣做。運行具有覆蓋率、競爭檢測和/或其他工具的代碼會增加二進制文件的大小并使其變慢。在我的計算機上運行競爭檢測器和代碼覆蓋率要慢 25 倍。

go test -cover -race用于測試和go build部署時。這將為您提供您想要的輸出,盡管不是您想要的方式。


查看完整回答
反對 回復 2021-12-07
?
叮當貓咪

TA貢獻1776條經驗 獲得超12個贊

go test -c -cover解決方案有一些缺點,例如在生成代碼覆蓋率配置文件時必須停止被測服務。并且它還會向覆蓋的二進制文件中注入一些不必要的標志,例如“-test.v”,這可能會破壞服務的原始啟動方式。

我們使用goc代替,它幫助我們在運行時輕松收集系統測試(API 測試或 e2e 測試)的代碼覆蓋率,我認為它更優雅。


查看完整回答
反對 回復 2021-12-07
  • 3 回答
  • 0 關注
  • 376 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號