美文网首页GO
GO代码覆盖率

GO代码覆盖率

作者: lvyz0207 | 来源:发表于2021-01-19 20:16 被阅读0次

1、修改main函数:

package main

//import waring cycle
import (
    "os"
    "os/signal"
    "sync"
    "syscall"
)

var endRunning chan bool
var (
    confPath string
)

func stop() {
    endRunning <- true
}
func handleSignals() {
    var callback sync.Once
    sigc := make(chan os.Signal, 1)
    signal.Notify(sigc, syscall.SIGINT, syscall.SIGTERM, syscall.SIGKILL)
    go func() {
        <-sigc
        callback.Do(stop)
    }()
}

func main() {

    handleSignals()

    endRunning = make(chan bool, 1)

    go func() {
        // main函数部分,******
        }()
    // blocking ...
    <-endRunning
}

2、创建main_test.go文件

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 目录:放在与被测文件同目录下

3、编译代码

1 查看main函数,将其中的os.Exit()更改为return (根据实际情况分别为return/return 0/return 255... 一定要注意,踩坑了很久~~~~~)

2 原编译命令为go build

go test -v file main_test.go -c -covermode=count  -coverpkg  ./gopath/src/...,.

① -c 表示 生成测试二进制文件

② -covermode=count 表示 生成的二进制中包含覆盖率计数信息

③ -ldflags 用来将版本信息写入二进制文件,而不使用额外的version文件

④ -coverpkg 后面是要统计覆盖率的文件源码

⑤ -o 后面是输出的二进制文件名

⑥ ......可能还有更多的可用参数,我就不知道了

3 执行命令,生成一个可执行的二进制文件,拷贝到部署目录下

4 启动服务,在启动命令后加参数: -systemTest -test.coverprofile coverage/coverage.cov

① -systemTest 用来启动前面说过的main test

② -test.coverprofile 用来指定覆盖率信息写入到哪个文件


4、统计覆盖率

#启动护服务
nohup ./abcd.test -systemTest -test.coverprofile ./coverage.cov &

1 执行自动化

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

kill $(pidof abcd.test)

覆盖率产生的条件是程序需要正常退出/结束, 因此当自动化运行完毕后,我们需要给程序发送消息表示结束才可以得到覆盖率文件

对此:go是需要return,即可以kill server_pid(若服务使用supervisor启动,还会自己拉起来,不会影响后续调用)

3 生成测试报告

# go tool cover -html=coverage.cov -o coverage.html
# go tool cover -func=coverage.cov -o coverage.txt

生成xml报告时需要安装一个小插件:go get github.com/t-yuki/gocover-cobertura

将bin下的gocover-cobertura放到方便执行的目录下即可使用

fire

相关文章

  • golang覆盖测试检测

    工具 分析测试代码的覆盖率 1. 查看整体的覆盖率 cd 项目的根目录go test -cover 2. 覆盖率分...

  • GO代码覆盖率

    1、修改main函数: 2、创建main_test.go文件 1 命名:看一下自己代码的main()函数所在的go...

  • go的入坑之路-测试和性能调优

    测试 代码覆盖率测试 运行方式 Run with cover 命令行 go test -cover . 命令行 g...

  • go代码测试覆盖率

  • 8 - 测试

    单元测试 Error 不会中断 Fail 会中断测试 使用 go test -v -cover 可是进行代码覆盖率...

  • Web端PHP代码函数覆盖率测试解决方案

    1. 关于代码覆盖率 衡量代码覆盖率有很多种层次,比如行覆盖率,函数/方法覆盖率,类覆盖率,分支覆盖率等等。代码覆...

  • go代码覆盖率工具goc使用

    最近发现了一款很好用的go代码覆盖率开源工具goc,可精准测试go项目 1,安装 2,使用步骤 a) 首先部署一个...

  • 当谈论覆盖率时我们在谈什么?

    代码覆盖率 vs. 测试覆盖率 代码覆盖率通常指跑完测试后, 由工具自动统计的在跑测试的过程中被测代码的覆盖率, ...

  • 25-覆盖率概述

    ​ 可以添加定向测试,来填补那些覆盖率漏洞, 代码覆盖率 代码覆盖率在编译仿真的时候设置,即可自动收集信息, 功能覆盖率

  • 代码覆盖率-JaCoCo

    代码覆盖率 在做单元测试时,代码覆盖率常常被拿来作为衡量测试好坏的指标,甚至,用代码覆盖率来考核测试任务完成情况,...

网友评论

    本文标题:GO代码覆盖率

    本文链接:https://www.haomeiwen.com/subject/ofudiktx.html