Go 工具链详解(二): 代码覆盖率分析神器 go tool cover

go tool cover 作用

go tool cover 是 Go 工具链中的一个命令,作用是分析测试用例的代码覆盖率。通过对测试覆盖文件进行分析,帮助开发人员和测试人员了解在测试中哪些代码执行了以及执行了多少次。

通过代码覆盖率分析可以知道测试用例执行后覆盖了多少代码行、分支和语句以及是否存在未被测试用例覆盖的代码,有助于发现代码中的潜在问题和错误,提高代码的质量和可靠性。

go tool cover 使用方法和使用示例

首先需要提供使用 go test 命令生成的代码覆盖文件(也可提供通过其他方式生成的和 go test 生成的文件格式一致的文件)。举个例子,以 github.com/luduoxin/json-validator-go 项目为例,clone 代码后,切换到项目的 validator 目录,打开终端,执行如下命令:

 $ go test -coverprofile=c.out

截取 c.out 的前两行内容如下

mode: set
github.com/luduoxin/json-validator-go/validator/scanner.go:11.30,15.2 3 

第二行每个部分代表的意思如下:

"文件:起始行.起始列,结束行.结束列 该基本块中的语句数量 该基本块被执行到的次数"

接下来看下使用go tool cover 来分析上面生成的文件 c.out 的方法,使用如下命令来查看每个方法的覆盖率和总的覆盖率

$ go tool cover -func=c.out

默认是将结果输出到标准输出,可以使用 -o 将结果输出到其他地方,例如输出到文件:

$ go tool cover -func=c.out -o coverage.out

使用如下方法生成一个 html 页面并且自动打开浏览器来展示覆盖率的详细情况:

$ go tool cover -html=c.out

这样可以非常直观地查看代码覆盖率的情况,已被覆盖的代码被标记为绿色(绿色越深,表示被覆盖的次数越多)、未被覆盖的代码被标记为红色、不需要检测的代码被标记为灰色,将鼠标移到代码块上,还会弹出对应的被覆盖次数。也可以不自动打开浏览器展示,而是将 html 内容输出到其他地方:

$ go tool cover -html=c.out -o coverage.html

要生成覆盖文件,首先需要对源代码插桩,使用 go tool cover 可以生成插桩后的代码,例如:

扫描二维码关注公众号,回复: 15786657 查看本文章
go tool cover -mode=set -var=CoverageVariableName scanner.go

执行后会输出插桩后的源代码到标准输出。

go tool cover 使用场景

可以用于以下场景:

  1. 开发人员可以用于分析单元测试用例的覆盖率,通过分析单元测试用例的覆盖率,以优化单元测试用例。
  2. 测试人员可以用于分析测试用例的覆盖率,通过一定的手段,随着测试用例的不断执行,持续生成覆盖文件,然后使用 go tool cover 分析覆盖率,发现可能存在的测试盲点和未被测试用例覆盖的代码。

猜你喜欢

转载自blog.csdn.net/luduoyuan/article/details/131797896
go