背景

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

基于这个背景,我们需要统计增量代码覆盖率作为项目质量的参考指标之一,并集成到 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 实现增量代码检查

python代码覆盖率_增量代码覆盖率工具相关推荐

  1. python捷豹_图像处理基本工具——Python 环境下的 Pillow( PIL )

    由于笔者近期的研究课题与图像后处理有关,需要通过图像处理工具对图像进行变换和处理,进而生成合适的训练图像数据.该系列文章即主要记录笔者在不同的环境下进行图像处理时常用的工具和库.在 Python 环境 ...

  2. iOS 增量代码覆盖率检测实践

    总第321篇 2018年 第113篇 本文介绍了对iOS覆盖率检测算法的研究,分享一种可以嵌入到现有开发流程中,并对开发透明的增量代码测试覆盖率工具的实现. 到店餐饮技术部交易与信息技术中心,负责点评 ...

  3. jacoco测试代码覆盖率_使用Jacoco测量多模块Android项目中的单元测试覆盖率:第2部分

    jacoco测试代码覆盖率 In the first article, we discovered one of the two key Gradle commands which come with ...

  4. vscode如何运行python文件_vscode怎么运行.py文件_编程开发工具

    vscode背景图怎么换_编程开发工具 vscode中更换背景图的方法:安装background插件,然后进入User Settings用户设置,在搜索框中搜索background进入配置文件,在ba ...

  5. 精准化测试之:jacoco实现增量代码覆盖率统计

    精准化测试可解决的问题: 根据代码变更确定用例范围 更准确深入地覆盖被测业务 白盒探索式测试 从线上数据反推有效测试用例 字节码插桩目的 1.获取执行时代码的调用链数据 2.覆盖率是调用链的一种精简模 ...

  6. python网页编程测试_李亚涛:python编写友情链接检测工具

    原标题:李亚涛:python编写友情链接检测工具 友情链接是网站外链的非常重要的来源,作为一个网站运营推广人员,需要定期对网站的友链进行更新与检查,如果有人下掉你的链接,这样你可以及时的检测并清除掉. ...

  7. 微软的python开发工具_面向 Python 开发人员的 Azure 工具

    面向 Python 开发人员的 Azure 工具Azure tools for Python developers 08/06/2020 本文内容 Visual Studio CodeVisual S ...

  8. python自动化工具开发_初识TPOT:一个基于Python的自动化机器学习开发工具

    1. TPOT介绍 一般来讲,创建一个机器学习模型需要经历以下几步: 数据预处理 特征工程 模型选择 超参数调整 模型保存 本文介绍一个基于遗传算法的快速模型选择及调参的方法,TPOT:一种基于Pyt ...

  9. python小工具小发明_【kimol君的无聊小发明】—用python写截屏小工具

    前言 今天我看了一下自己的文件夹,发现了自己写了许多似乎很无聊的代码.于是乎,一个想法油然而生:"生活已经很无聊了,不如再无聊一点叭". 说干就干,那就开一个专题,我们称之为kim ...

最新文章

  1. CentOS 7.2 时间同步与时区设置
  2. Java 容器集合框架概览
  3. Java黑皮书课后题第5章:**5.32(游戏:彩票)修改程序清单3-8,产生一个两位数的彩票。这两位数是不同的
  4. SQL 通过syscolumns.xtype动态查找指定数据类型字段所包含的数据
  5. 【CodeForces - 1027B 】Numbers on the Chessboard (没有营养的找规律题,无聊题)
  6. html字符串变量,字符串变量中的Python HTML
  7. GeoTools应用-JTS(Geometry之间的关系)
  8. 查询数据库里所有表名和字段名的语句
  9. spring之jdbcTemplate的增删改查操作--不使用配置文件
  10. matlab接口编程配置,MATLAB与外部程序接口编程
  11. [转]中国IT富翁们的第一份工作(组图)。
  12. ucOS学习--基础知识
  13. sql2019更改了表的部分字段设计出现不允许保存更改解决方案
  14. 汽车主要电子控制系统模块
  15. 深度解析 | 炎症,肠道菌群以及抗炎饮食
  16. 个人网站性能优化经历(6)网站安全方面优化
  17. 处理autocad 2010闪退
  18. coreldraw怎么画猴子_小猴子的画法
  19. 如何寻求解脱_在设计中寻求安慰
  20. SparkConf 配置的概念和用法

热门文章

  1. mybatis查询返回map的问题
  2. 图像数字化_采样和量化样例。
  3. 基于Python实现的图像相似度检测
  4. weta工作室 Linux,新西兰Weta工作室(转)
  5. Learning to Rank Proposals for Object Detection
  6. MATLAB算法实战应用案例精讲-【自动驾驶】自动驾驶中的自动泊车功能(最终篇)
  7. 联想U300 做的最漂亮的笔记本比苹果的Mac Air还漂亮的本
  8. 曾国藩:又笨又慢平天下——读书笔记
  9. 老毛桃服务器系统,老毛桃处理win7系统安装Telnet客户端和服务器的详细方案
  10. 【HTML】table标签--rowspan、colspan属性的使用