统计 Golang 项目的测试覆盖率

我们的项目主要基于 Golang 开发,公司要求统计测试覆盖率。所以,我们摸索了一下在 Golang 下如何统计整个项目得测试覆盖率:

以下内容均基于 Go SDK 1.10.1 获得,不保证可以向下兼容

先直接上结果:

go test -coverpkg=./... -coverprofile=coverage.data -timeout=5s ./...
go tool cover -html=coverage.data -o coverage.html
go tool cover -func=coverage.data -o coverage.txt

下面是具体的分析:

如何测试并统计各go语法块覆盖率

其实,这个问题本质上可以通过 go test -h搞定:

  1. 参数 -cover:是否开启覆盖率统计的开关。但是-covermode-coverpkg-coverprofile这些参数默认会打开这个选项,所以不用专门去设置了。
  2. 参数 -covermode mode:可选值有 set、count、atomic,其中 set (默认值)仅统计语法块是否覆盖,count 会统计语法块覆盖了多少次,atomic 用于多线程测试中统计语法块覆盖了多少次。
  3. 参数 -coverpkg pattern1,pattern2,pattern3:覆盖率统计 packages 的范围,若不设置默认只统计有执行了测试的 packages。
  4. 参数 -timeout t:单个测试用例的超时时间,默认值 10 分钟。
  5. 参数 -coverprofile cover.out:覆盖率 profile 文件输出地址。

如何统计当前的项目测试覆盖率数值

输出报告时,我们需要的是整个项目,目前覆盖率达到多少。所以需要使用命令 go tool cover -func=coverage.data -o coverage.txt

在输出文件的最后一行:

total:										(statements)		3.1%

即可获得加权后的总覆盖率。

如何获取直观的测试覆盖情况

在提升测试覆盖率时,我们关注的是当前文件到底覆盖的情况如何。这时,需要使用 go tool cover -html=coverage.data -o coverage.html或者直接使用 go tool cover -html=coverage.data,即可在网页中直接查看各文件的覆盖情况。

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值