我们的项目主要基于 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
搞定:
-
参数
-cover
:是否开启覆盖率统计的开关。但是
-covermode
、
-coverpkg
、
-coverprofile
这些参数默认会打开这个选项,所以不用专门去设置了。 -
参数
-covermode mode
:可选值有 set、count、atomic,其中 set (默认值)仅统计语法块是否覆盖,count 会统计语法块覆盖了多少次,atomic 用于多线程测试中统计语法块覆盖了多少次。 -
参数
-coverpkg pattern1,pattern2,pattern3
:覆盖率统计 packages 的范围,若不设置默认只统计有执行了测试的 packages。 -
参数
-timeout t
:单个测试用例的超时时间,默认值 10 分钟。 -
参数
-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
,即可在网页中直接查看各文件的覆盖情况。
版权声明:本文为xiaosongluo原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。