python代码覆盖率_增量代码覆盖率工具

背景

当存量代码较多时,项目单元测试整体覆盖率就会偏低,但这可能是正常现象,因此不能依据已有的全量单元测试覆盖率来判断项目质量。

基于这个背景,我们需要统计增量代码覆盖率作为项目质量的参考指标之一,并集成到 DevOps 平台。

方案

1、先通过 git diff 统计代码差异,根据差异代码选择运行单元测试案例,最后得到差异覆盖率报告

2、先运行全量单元测试案例来生成整体覆盖率报告,然后通过 git diff 统计差异代码,最后根据整体覆盖率报告和差异代码来形成差异覆盖率报告

通过比较方案 2 侵入性小,扩展好,能方便支持多种 java 覆盖率工具,还能支持 python 、js 等覆盖率工具,下面简单例子介绍下实现方案 2 的开源工具 diff-cover

diff-cover 介绍

diff-cover 用 python 开发的开源工具,github 地址是 https://github.com/Bachmann1234/diff-cover。它不仅能实现增量代码单元测试覆盖率统计,还能实现增量代码质量检查。

支持单元测试覆盖率工具或报告格式有:Cobertura、JaCoCo、JSCover、coverage.py、nosetests、JSCover 等。

支持代码检查工具或报告格式有:pycodestyle, pyflakes, flake8, pylint, checkstyle, checkstylexml、 findbugs。

鉴于公司用 Cobertura 生成单元测试覆盖率,因此 diff-cover 可以容易集成到 DevOps 平台。缺点是由于代码质量检查用的是 pmd 工具,可能 diff-cover 还不支持,

diff-cover 安装和使用

1、首先安装 python 环境,网上一堆,请 google

2、输入如下命令安装 diff-cover

pip install diff_cover

3、新建 git 项目 DiffDemo

新建远程仓库 DiffDemo

克隆代码

git clone https://github.com/scottlinlin/DiffDemo

cd DiffDemo

4、新建 maven 工程

打开 idea 新建一个 maven 工程 DiffDemo,工程路径是 DiffDemo

新建 Math 类,实现两个数相乘的简单功能

新建 MathTest 类,使用 junit4 实现相乘的单元测试

git add & git commit 添加到本地仓库

git push 推送到远程仓库,此时远程和本地仓库代码一致

然后本地运行 mvn cobertura:cobertura,生成覆盖报告路径是 ./target/site/cobertura/coverage.xml,此时覆盖率100%

运行 diff-cover,

diff-cover target/site/cobertura/coverage.xml --compare-branch=origin/master

结果应该为空,即没有新增代码也没有差异覆盖率

scott.lin

diff-cover 参数说明

第一个参数是覆盖率报告文件,也可以填写多个文件

第二个参数是比较 git 分支 或 commit id,上诉比较是 origin/master 和 HEAD之间代码差异,origin/master 是远程 master 分支,HEAD 当前分支即指向本地 Master 最新提交

5、新增代码,统计差异覆盖率

Math 类新增除、平方功能代码

本地运行 mvn cobertura:cobertura,生成覆盖报告

运行 diff-cover,

diff-cover target/site/cobertura/coverage.xml --compare-branch=origin/master --html-report report.html

输出差异覆盖率报告,即新增除和平台代码覆盖率为0,如下:

scott.lin

展望

将 diff-cover 集成到目前 DevOps 平台,并将增量覆盖率作为项目质量的一个重要指标

继续 poc diff-cover 的代码质量检查命令 diff-quality ,看能否支持 pmd 生成的质量报告

集成 pylint pytest 等 python 工具,用 diff-cover 实现增量代码检查

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值