go语言实现新增代码单测覆盖率

6 篇文章 0 订阅

前言

解释下什么是单元测试

单元测试的最终统计标准就是单测覆盖率,统计单测总体覆盖了多少行代码。一般来说,我们只需要关注增量代码的覆盖率,而非全量代码。增量代码就是本次迭代改动的代码,比如本次迭代改动了100行代码,我们保证单测能覆盖到这 100 行代码就行。

用到的技术点

无论是单测还是自动化框架,在go语言中,比较常用的就是go test
而实现单测覆盖率测试需要用到gocov
而如何实现新增单测覆盖率呢?这个就不得不提到git的diff-cover
OK,接下来说下实现过程,小伙伴们可以无脑直接按照过程直接实现

实现过程

Go语言中,可以使用go test命令结合gocov和gocov-xml工具来生成单元测试覆盖率报告。

第一步:首先,确保你已经安装了gocov和gocov-xml。如果没有安装,可以使用以下命令安装

go get -u github.com/axw/gocov/...
go get -u github.com/AlekSi/gocov-xml

安装后记得将其添加到系统PATH中

export PATH=$PATH:$GOPATH/bin

第二步:使用go test生成测试报告

//常规用法,指定统计example文件夹内报告
go test -coverprofile=cover.out ./example
//统计全部文件夹报告
go test -v -race -p=1 -parallel=1 -json -cover -coverprofile=cover.out ./...

此时生成了cover.out报告,可以转换成html方便查看

go tool cover -html=cover.out -o cover.html

在这里插入图片描述

第三步:生成新增单测覆盖率结果

先使用gocov和gocov-xml来生成xml单测覆盖率报告;
使用上面生成的cover.out来生成xml格式结果

gocov convert coverage.out | gocov-xml > coverage.xml

接下来用diff-cover来实现新增单测覆盖率结果
执行之前需要先安装diff-cover

pip install diff-cover

安装完成后生成结果;
使用上面gocov生成的coverage.xml来进行diff

例如需要对比分支1和分支2,本地代码必须是分支1,–compare-branch参数后面则需要使用分支2,从而生成对比结果的html文件,可以快速清晰的生成增量代码覆盖率报告,包括差异文件行、未覆盖行、未覆盖行数、增量覆盖率情况等

diff-cover coverage.xml --compare-branch=origin/需要对比的分支 --html-report coverage_diff.html
--fail-under=80 # 加入该参数可以表示覆盖率没有达到80报错

生成的结果如下图:
在这里插入图片描述

在这里插入图片描述

生成的覆盖率html报告中各个参数解释:
Total: 7 lines:这表示在两个文件(dirpc.go和http.go)的差异中,总共有7行代码被纳入此次覆盖率分析的考虑范围内。
Missing: 6 lines:这表示在上述的7行代码中,有6行是没有被测试覆盖到的,即这些代码行在执行测试时未被执行。
Coverage: 14%:这是指差异部分的代码覆盖率,具体到这个例子中,是说只有14%的修改后的代码被测试覆盖到了。这是一个相对较低的覆盖率,表明有大量的代码更改没有被测试。
SourceFile:源文件名称,这里是dirpc.go和http.go,表示这些文件中的代码更改是本次覆盖率分析的对象。
DiffCoverage(%):每个文件的差异覆盖率百分比。对于dirpc.go是20.0%,意味着在该文件的修改中,有20%的代码被测试覆盖;而http.go的覆盖率为0.0%,说明该文件的所有修改都没有被测试覆盖。
Missing Lines:这列列出了每个文件中未被测试覆盖到的具体代码行号。例如,dirpc.go中的432, 448, 468, 472行,以及http.go中的940, 945行都是未被覆盖的代码行。
下面还会展示具体都那行没有被覆盖到的代码详细

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值