您的位置:首页 > 编程语言

(二期)单元测试的代码覆盖率接入Jacoco技术实现

2020-02-01 20:28 525 查看

一、背景

项目的接口方法写了单元测试后,怎么才能知道单元测试对接口的方法的调用是否执行了有效的逻辑代码呢?而且还有的接口压根就没有写单元测试,怎么自动执行测试?代码覆盖率的统计就可以比较有效解决这个问题。

二、目标

  1. 项目的接口方法写了单元测试后,需要知道单元测试对接口的方法的调用是否执行了有效的逻辑代码,而且没有写单元测试的接口也需要被统计;
  2. 设置代码覆盖率合格率的阈值,检测到低于这个阈值的标记结果不合格,大于或等于这个阈值的标记结果合格。
  3. 无论检测结果是失败还是合格,都需要一周至少发布一次检测结果告知java开发。

三、技术方案

  1. 市场上java主要代码覆盖率工具:Cobertura、EMMA、JaCoCo,而其中Cobertura和EMMA已停止维护,但JaCoCo社区比较活跃,官网也在不断的维护更新。jenkins上也有插件JaCoco可以统计单元测试TestNG的结果。

  2. 在java项目中添加插件jacoco-maven-plugin。
  3. 在Java项目中添加依赖jacoco-maven-plugin。

四、方案实施

  • java项目中的pom.xml配置

  1. 在Java项目中依赖jacoco-maven-plugin。

    <dependency>

        
    <groupId>org.jacoco</groupId>

        
    <artifactId>jacoco-maven-plugin</artifactId>

        
    <version>
    0.8
    .
    3
    </version>

    </dependency>

  2. 在java项目中添加插件jacoco-maven-plugin。

    <!--检测代码覆盖率插件 start-->

    <plugin>

        
    <groupId>org.jacoco</groupId>

        
    <artifactId>jacoco-maven-plugin</artifactId>

        
    <version>
    0.8
    .
    3
    </version>

        
    <executions>

            
    <execution>

                
    <goals>

                    
    <goal>prepare-agent</goal>

                
    </goals>

            
    </execution>

            
    <execution>

                
    <id>report</id>

                
    <phase>prepare-
    package
    </phase>

                
    <goals>

                    
    <goal>report</goal>

                
    </goals>

            
    </execution>

        
    </executions>

    </plugin>

    <!--检测代码覆盖率插件 end-->

 

  • jenkins部署配置

         1、登陆jenkins后,选择table面板“code coverage rate”, 然后点击“新建Item”, 如下图。

           

         2、接着进入新建任务名称页面,任命名称命名规范是"项目名_codeCoverageRate",记得选中“Freestyle project”自由风格的项目,然后点击“OK”按钮创建,如下图:

          

3、接着,下一个页面有多个配置,需要特别注意,分步走:

    3.1、 “源码管理”面板配置,在标记1的地方勾选git,在标记2的地方“Repository URL”输入ssh方式的git地址),然后在标记3的地方输入分支名,注意,自动化测试分之名统一使用“test_automation”,如果变更代码也请合并到该分支。

 

4、“构建触发器”面板配置,勾选“build periodically”,表示定期触发构建,在“日程表”输入框中天蝎corn表达式,建议填写“H 9 * * 1”,表示每周一早上9点触发构建。

 

5、“构建”面板配置,选择“invoke top-level maven targets”表示maven设置,“maven版本”选择“maven”,目标填写命令行参数“clean test -Dspring.profiles.active=daily”,其中:clean 表示“删除之前编译的文件”,test“表示执行单元测试,“-Dspring.profiles.active=daily”表示选择构建的环境时“daily”。

 

 

6、点击按钮“增加构建后步骤”,选中“Publish TestNG Results”,缺少这一步,邮件中的部分值将拿不到;点击后多出一处“Publish TestNG Results”配置, 不用编辑,使用默认配置路径。

 

 

7、再次点击按钮“增加构建后步骤”,选中“Record JaCoCo coverage report”后,多出一处配置块“Record JaCoCo coverage report”;

  1. 其中“Path to class directories”是指定扫描类的包的路径,以'/'隔开,多个路径以英文','隔开;标注1的地方是值排出的类。
  2. 标注2的地方是指扫描的编译后的类路径。
  3. 标注3的地方是指定包含那些源码,查看具体的代码覆盖率时用到。
  4. 勾选“Change build status according the thresholds”和“Fail the build if coverage degrades more than the delta thresholds”,其中“Change build status according the thresholds”是根据阈值变更状态,我们只需改“%Method”和“%Class”对应的值,“太阳”表示良好,对应的“%Method”和“%Class”都改成80;“闪电云”表示合格阈值,对应的类覆盖率“%Class”改成100;方法覆盖率“%Method”及格线60%,良好80%;行覆盖率“%Method”及格线60%,良好80%。“Fail the build if coverage degrades more than the delta thresholds”是如果覆盖率下降超过delta阈值,则构建失败的配置,只有“闪电云”标示,对应的“%Method”为60%和“%Class”改成100。

 

6、“构建后操作”面板配置

    6.1、点击按钮“增加构建后操作步骤”,选中“Editable Email Notification Templates”,编辑邮件通知,注意,这里是选择邮件模板,模板我已配置好。选择后多出一块配置“Editable Email Notification Templates”, 这里选择“代码覆盖率检测结果邮件模板 - 代码覆盖率测试”。

 

6.2、如果需要指定某个或几个类不扫描,则在面板“Record JaCoCo coverage report”的第一行的最后一个“Exclusions”配置配置“**/类名.class”,如果多个用英文逗号隔开,如下图。

 

8、最后别忘“保存”,否则不生效。

  • 点赞
  • 收藏
  • 分享
  • 文章举报
CJB_JZ 发布了12 篇原创文章 · 获赞 0 · 访问量 366 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: