结合sonarqube的jacoco使用实践

上一篇 / 下一篇  2016-10-12 11:37:37 / 个人分类:代码覆盖率

jacoco原理: 

主流代码覆盖率工具都采用字节码插桩模式,通过钩子的方式来记录代码执行轨迹信息。其中字节码插桩又分为两种模式On-The-FlyOffineOn-The-Fly模式优点在于无需修改源代码,可以在系统不停机的情况下,实时收集代码覆盖率信息。

 

流程:

1 下载jacocoagent.jar

2 jacocoagent.jar放在某目录下

3  Tomcatbin目录下新建setenv.sh文件,

     内容如下:export CATALINA_OPTS="-javaagent:/home/apache-tomcat/jacocoagent.jar=destfile=/home/apache-tomcat/DS_cover/jacoco.exec,output=tcpserver,port=XXX,address=XXX"

4 启动tomcat

5 在构建服务器上,即sonarqube所在服务器上新建任意目录,将sonar-project.propertiesjacoco_tcp.jar以及jacoco_XXX.sh放入

     其中sonar-project.properties形如:

    sonar.sources=src/main/java

    sonar.binaries=target/classes

    sonar.language=java

    #Tells SonarQube where the integration tests code coverage report is

    sonar.jacoco.itReportPath=/home/XXX/jacoco-it.exec

    sonar.jacoco.reportPath=/home/XXX/jacoco.exec

    # Encoding of the source files

    sonar.sourceEncoding=UTF-8

     用来指定class和源码位置,否则执行的时候会报找不到class文件

     jacoco_tcp.jar则是用来获得远程位置的jacoco.exec文件,因为一般sonarqube测试服务不部署在一起,代码可以参考jacoco官网上的example

7创建jacoco_XXX.shshell脚本的内容**

sonar-project.properties文件复制到各个项目根目录,指定项目代码及classes文件位置;

执行jacoco_DSWeb.jarjar**从远程开放的端口循环获取覆盖率报告文件jacoco.exec,之后将其与第一次获取的jacoco-it.exec进行对比,若大小不一致,则证明覆盖率出现了变化,新的jacoco.exec覆盖jacoco-it.exec

之后执行mvn命令解析指定位置的jacoco-it.exec

    本人shell水平有限,就不拿来献丑了

8、修改sonar中对应项目的配置,将jacoco的集成测试覆盖率报告路径配置改为/home/XXX/jacoco-it.exec

9、赋予jacoco_XXX.sh脚本运行权限,执行命令nohup sh jacoco_XXX.sh &

10、进行集成测试(手动或自动化)

11、在sonarqube中即可查看集成测试覆盖率 


优点:

1、集成性强,通过sonarqube直接集成对源码和覆盖率的查看 

2Jacoco脱胎于EMMA,工具新

3、实时能够监控代码覆盖率,不需要先停止tomcat

 


TAG: jacoco sonar sonarqube 代码覆盖率

 

评分:0

我来说两句

Open Toolbar