DevOps - Java增量代码覆盖率工具

相比于全量代码单元测试覆盖率,增量代码单元测试覆盖率,粒度更小,可以帮助开发者精准的了解每个新特性、新功能甚至每次Commit的代码覆盖率。文章目录前言1. Codecov2. "定制"测试覆盖率工具2.1. 使用JGit进行代码差异分析2.2. 根据差异统计代码覆盖率变化3. 集成到Jenkins3.1. 配置单元测试覆盖率插件3.2. 覆盖率报告图表解析4. 总结前言今年开始,部门将...
摘要由CSDN通过智能技术生成

相比于全量代码单元测试覆盖率,增量代码单元测试覆盖率,粒度更小,可以帮助开发者精准的了解每个新特性、新功能甚至每次Commit的代码覆盖率。

前言

今年开始,部门将代码的单元测试覆盖率纳入KPI考核范围。领导定了两个考核指标,一个是整个工程的单元测试覆盖率,另外一个是,每个特性需求的增量测试覆盖率。

1. Codecov

Codecov是一个代码覆盖率分析网站,旨在通过各个维度和检测指标帮助开发者开发更加健壮的程序。

  • 粒度细。全量代码覆盖率报告,针对每个Commit,每个文件的有相对、绝对、增量覆盖率
  • 对GitHub开源项目免费。对GitHub工作流非常友好。集成非常方便。
  • 支持的测试覆盖率工具多。支持的报告种类多。

分析报告非常的详细,针对开源项目而言是不可多得的工具。假如你的项目是开源项目或者能使用此类第三方覆盖率检查报告的话? 本文的后续内容对您没有任何帮助,可以直接忽略

2. "定制"测试覆盖率工具

公司的老项目,不太方便开源。so没办法享受“免费”的午餐。

搜索Jenkins的测试覆盖率工具。对比如下:

-Codecov- -JaCoCo Plugin- -Code-coverage-api-
价格 开源项目免费 免费 免费
全量代码覆盖率
代码健康度告警
代码覆盖率变化趋势
支持的报告种类 非常多 仅JaCoCo
粒度 代码行 代码行 代码行
增量代码覆盖率
扩展性 非常强 仅Java 可扩展

最后选择code-coverage-api-plugin的,基于此插件扩展增量覆盖率的功能。由于新增了依赖,且功能依赖于Git作为版本控制工具,所以此特性被拒绝合并。对此我感到遗憾。所以fork了原仓库的代码,独立发布了此特性功能。言归正传,下面开始干货

2.1. 使用JGit进行代码差异分析

要统计本次提交的增量覆盖率首先要能分析代码的增量变化。
我们项目使用的时Git作为版本控制,Git提供了diff工具,可以对比文件的变化。详细参考"git diff"。在此不赘述。

根据git diff的结果进行差异分析。代码如下:

try (Git git = Git.open(new File(gitRepoPath))) {
   
    Stream<DiffEntry> stream = getDifferentBetweenTwoCommit(git, oldCommit, newCommit);
    if (null == stream)
        return null;
    try (ByteArrayOutputStream out = new ByteArrayOutputStream()) {
   
        DiffFormatter df = new DiffFormatter(out);
        // ignores all whitespace
        df.setDiffComparator(RawTextComparator.WS_IGNORE_ALL);
        df.setRepository(git.getRepository());

        List<SourceCodeFile> map = stream.map(diffEntry -> {
   
            try {
   
      
  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值