Jacoco服务器增量覆盖率统计(支持多模块)

目录

一、背景

二、增量统计思路

三、如何使用增量插件


一、背景

       在统计后端代码覆盖率时,一般都使用的是Jacoco,但是Jacoco本身并不支持增量统计,当有一个新需求出现时,经过一轮轮的测试,并不能直观的从全量覆盖率中找出我们想要的那部分统计率。

二、增量统计思路

(不想看思路的,直接拉到最后)

首先我们要想清楚几个问题:

1:什么叫增量?

2:怎么获取增量文件?

3:怎么找出增量文件中修改的部分?

4:怎么让Jacoco只统计这部分代码的覆盖率?

以下我们就来分析这4个问题:

什么叫增量?

当前发布的版本中后端修改的class文件或者是新增的class文件即是增量文件。

怎么获取增量文件?怎么找出增量文件中修改的部分?

每次Git提交的时候都是有记录的,我们可以从git下手找出我们想要的。

1:先用log找到提交的版本号

2:根据版本号去获取2次版本直接的差异文件

git diff beab05eab0499458734e9c6c1d340ef06de677df 35aa4ac5fb0497a96f9d4c4d4b6a2a70323a3082

 得到的结果如下: 

diff --git a/src/main/java/com/dxy/platform/jacoco/JacocoOrders.java b/src/main/java/com/dxy/platform/jacoco/JacocoOrders.java
index 3c52f59..1911441 100644
--- a/src/main/java/com/dxy/platform/jacoco/JacocoOrders.java
+++ b/src/main/java/com/dxy/platform/jacoco/JacocoOrders.java
@@ -43,4 +43,16 @@ 
class JacocoOrders {
         p.destroy();
         return success;
     }
+
+    public static void main(String[] args) {
+
+        try {
+            JacocoOrders jacocoOrders = new JacocoOrders();
+            boolean fail =
+                    jacocoOrders.exec("mvn clean package -f /Users/xx/IdeaProjects/testworks/logcollector".split(" "));
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+    }
 }
diff --git a/src/main/java/com/dxy/platform/utils/CaseRun.java b/src/main/java/com/dxy/platform/utils/CaseRun.java
index 146c6a9..830425a 100644
--- a/src/main/java/com/dxy/platform/utils/CaseRun.java
+++ b/src/main/java/com/dxy/platform/utils/CaseRun.java
@@ -250,7 +250,7 @@ 
public class CaseRun {
         compareInfo.setHopeData(caseInfo.getHopeValue());
         compareInfo.setHeader(caseInfo.getHeaderValue());

-        if (infos == null || EmptyUtil.isEmpty(caseInfo.getHopeValue())) {
+        if (infos == null) {
             compareInfo.setErrorMessage(errorInfo);
         } else {
             // code 是否是200 不是直接返回;是200 对比数据
diff --git a/src/main/java/com/dxy/platform/utils/GroupsRun.java b/src/main/java/com/dxy/platform/utils/GroupsRun.java
index 60a25b9..f219c16 100644
:
diff --git a/src/main/java/com/dxy/platform/jacoco/JacocoOrders.java b/src/main/java/com/dxy/platform/jacoco/JacocoOrders.java
index 3c52f59..1911441 100644
--- a/src/main/java/com/dxy/platform/jacoco/JacocoOrders.java
+++ b/src/main/java/com/dxy/platform/jacoco/JacocoOrders.java
@@ -43,4 +43,16 @@ 
class JacocoOrders {
         p.destroy();
         return success;
     }
+
+    public static void main(String[] args) {
+
+        try {
+            JacocoOrders jacocoOrders = new JacocoOrders();
+            boolean fail =
+                    jacocoOrders.exec("mvn clean package -f /Users/xx/IdeaProjects/testworks/logcollector".split(" "));
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+    }
 }

分析这些差异(这里只是简单的讲解一下,详细的讲解可以百度):

diff --git :

表示是有修改的差异文件,

a/ 修改前的文件,b/修改后的文件

--- a/ :表示改动前的文件

+++ b/:表示改动后的文件

@@ -43,4 +43,16 @@:

@@之间的表示修改的地方

-43,4:表示修改前的文件是从第43行开始,连续修改到后面4行

+43,16 表示修改后的文件是从第43行开始,连续修改到后面16行

现在我们知道了哪些是修改的文件且修改的地方我们也知道怎么找出来了。

怎么让Jacoco只统计这部分代码的覆盖率?

这里使用的是ant build.xml形式去配置的,只需要在统计代码的时候,使用<include></include>标签,告诉Jacoco我只想统计这些文件即可。

(这里省去了Jacoco 服务器环境的搭建,百度一搜全是)

三、如何使用增量插件

下载插件: incremental.jar

链接:https://pan.baidu.com/s/1Wv0IFwNCbBxoHdNPP9R3vg  密码:gudd

创建一个yml文件,配置内容如下:
jacoco:
  path:
    source:  #必填 拉取代码存放路径
    report:  #必填 存放报告路径
  git:
    url:  #必填 仅支持https
    user:  #必填
    pswd:  #必填
    branch:  # 默认master
    source:  "/api/src/main/java,/service/src/main/java" # 源码路径,多模块的话用,分隔 默认src/main/java/
    classes:  "/api/target/dist/classes,/service/target/classes" # 编译后路面 多模块的话用,分隔 默认 target/classes/
    v1:  # v1,v2不填写默认比较最新2个版本 新版本号
    v2:  # 旧版本号
    include: "**/test.class,**/test2.class,**/tst/test3.class" #包含类
    exclude: #排除类
  server:
    ip:  #必填
    port:  #必填

使用命令:java -jar incremental.jar -f [你的yml配置文件路径]

写这个插件用的时间比较少,很多细节没处理好,

  • 5
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 15
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值