美文网首页CI/CDTest测试框架
Jenkins + Jacoco 持续集成代码覆盖率

Jenkins + Jacoco 持续集成代码覆盖率

作者: 纳爱斯 | 来源:发表于2017-05-13 21:11 被阅读1945次

    Jenkins Jacoco Ant

    * 特别提醒:
    看这篇文章之前,一定要保证你已经看过 Jacoco Code coverage 这篇文章了,要不然不好顺利的进行下去

    • 第一步:打开 Jenkins系统管理管理插件可选插件安装 JaCoCo plugin
      见下图👇
    install plugin
    • 第二步:选择 Pre Steps or Post StepsAdd stepExecute shell 中增加命令 ant dump -buildfile [yourpath/]build.xml
      ant dump
    Tip:
    1. (需特别注意)确保 [Jacoco Code coverage] 这篇文章中的 build.xml 已经上传至 Jenkins 打包服务器(建议放在 `Git` 仓库中,然后在 JOB 配置 `源码管理` 中增加这个 `Git` 地址)
    2. 执行 `ant` 的确保 Jenkins 打包服务器已经安装 ant
    3. 确认是否已经设置 `ant` 环境变量,如果未位置直接就写 `ant` 全路径,如:`/usr/lib/apache-ant-1.9.7/bin/ant dump -buildfile [yourpath/]build.xml`
    
    • 第三步:进入 JOB,选择 配置构建后操作增加构建后操作选择 Record Jacoco coverage report,见下图👇
    Select jacoco coverage report
    • 第四步:配置报告的相关参数(我的选择都是默认的),见下图👇


      Jacoco coverage report parameter config

    接下来就是构建 JOB,等待结果,如果成功的话,就会见到下图👇

    Code Coverage Trend Detailed Report

    Frequently Asked Questions:

    • 针对图上的每个字段 Jacoco Code coverage 在这篇文章中已经说明
    • 图中 M:xxx C:xxxM 的意思表示:Missed;C 的意思表示:Covered

    相关文章

      网友评论

      • 1644cec4646b:jenkins配置不需要绑定git代码吗?我想生成一个开发代码和我的自动化脚本之间产生的覆盖率,这个用该怎么办呗
        纳爱斯:@倾听ing_7fb7 代码时必须的,你的自动化脚本是什么自动化脚本?单测?
      • 41fb38e77776:你好,想问下,如果是统计功能测试代码覆盖率,是要先通过jenkins编译war包,部署并测试后再执行ant dump么?最终的jacoco报告是还在jenkins上查看么?
        纳爱斯:@Co丶CC 其实这个是没有顺序的,生成报告你只需要确保两点就可以:
        1. 你在 Tomcat 中配置好了 jacocoagent,并保证服务正常;
        2. 生成集成测试覆盖率报告,需保证三个东西存在:源码、classes、exec 文件。
        你说的那三步只不过是在我写的简书中的顺序,其实你完全可以在 Jenkins 上单独拉一个 Job 去做生成报告这件事,不知道这样是否回答了你的问题呢
        41fb38e77776:@纳爱斯 不好意思,可能是我没有表达清楚;我的意思是要分三步么?第一步jenkins构建编译;第二步部署测试;第三部再使用jenkins插件生成报告?
        纳爱斯:是的,测试之后执行 `ant dump`,报告最终由 Jenkins 的插件生成
      • 澜瑜:大神,问个问题。我构建job后,在控制台报了一个ERROR: Build step failed with exception,
        java.lang.IllegalStateException: basedir classes does not exist。我的版本号是3.0.1
        澜瑜:@纳爱斯 已加,通过一下
        澜瑜:jacoco插件版本号是3.0.1
      • 不可分类者bubble:楼主我想问一下,像maven项目,它不同于ant,ant在build.xml文件里面需要配置report和dump,可是maven其实应该是不需要的,maven插件(jacoco-maven-plugin)里:就包含了report和dump功能,我是否只需要引入这个插件即可?还需要其他配置吗?
        纳爱斯:@不可分类者bubble 恩~~~~,怎么说呢,大概已经就是这样的,我写的文章中不是写了一个build.xml对吧,你可以理解为这个build.xml就相当于一个脚本文件,是和项目本身没有关系的,当然你放入项目里面也没有关系,你只需要将build.xml中的IP地址和存放路径配置好了之后,就可以直接运行ant dump -d build.xml,就跟你执行python脚本一样,python *.py
        不可分类者bubble:@纳爱斯 =。=好吧,其实这个插件里面也包含了merge这个功能了的。我也没搞懂除了这些配置之外还需要啥。官网也木有例子,我再研究研究好了:sob:。但是我其实不太明白你说我的maven工程本身跟使用ant还是maven没关系,毕竟ant对应配置文件是build.xml而maven是pom.xml。我看到网上很多例子确实比较简单,配置build文件就好。等我尝试在我的项目使用ant命令,看看行不行
        纳爱斯:@不可分类者爱喝养乐多 这个的话 只是我对maven不怎么熟,当然不适用ant也是可以的,除了dump可能你还需要merge,merge是将单测的exec与集成测试的exec文件内容进行合并的,另外你使用ant和你工程本身使用maven是没有关系的,我个人觉得还是用ant dump这种方式比较方便一点,特别是进行jenkins配置的时候。当然,我也承认maven我不熟,如果你选择maven这种方式配置好的话,麻烦把方法分享我一下,谢谢~
      • 8dd3cd05ac9d:感谢分享~
        请问下,第四步中的几个路径,是相对路径吗?如果想要绝对路径,格式是怎样的呢?
        例如我exec文件的路径是 /tmp/jacocotest/report.exec,我尝试了
        **/tmp/jacocotest/**.exec 取到exec文件数为0
        /tmp/jacocotest/**.exec 直接报错
        tmp/jacocotest/**.exec 取到exec文件数为0
        **/jacocotest/**.exec 取到exec文件数为0

        :sweat: 全部都不行,后面两个路径也是。求大神指教
        纳爱斯:@阿笙许 ../../../../../tmp/jacocotest/**.exec这样的写法,我没用过但是不推荐这样使用,尽可能还是用相对路径,另外也要注意,文件名不要写错,这个错误虽然很低级但不是没有
        8dd3cd05ac9d:@纳爱斯 不好意思才看到回复,这样写也会报错,取到的路径是:
        /var/lib/jenkins/workspace/jacocotest/tmp/jacocotest/report.exec
        报错信息:
        ERROR: Step ‘Record JaCoCo coverage report’ aborted due to exception:
        java.io.IOException: Expecting Ant GLOB pattern, but saw '/var/lib/jenkins/workspace/jacocotest/tmp/jacocotest/report.exec'. See http://ant.apache.org/manual/Types/fileset.html for syntax

        研究了下,这里的填写路径是相对于workspace的,我把exec文件放到workspace 这个工程的路径下,填**.exec 就可以读到。
        但写原文件的相对路径 ../../../../../tmp/jacocotest/**.exec 就读不到。忧桑。。
        所以目前暂时用html report插件来直接展示report了。
        纳爱斯:第四步中的图上上的路径是相对路径,如果要是绝对路径的话,你可以试试这样写$WORKSPACE/tmp/jacocotest/report.exec

      本文标题:Jenkins + Jacoco 持续集成代码覆盖率

      本文链接:https://www.haomeiwen.com/subject/utqfxxtx.html