统计 Golang 项目的测试覆盖率

  • Post author:
  • Post category: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

,即可在网页中直接查看各文件的覆盖情况。



版权声明:本文为xiaosongluo原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。