Jacoco覆盖率工具使用调研
来源:互联网 发布:湖南卫视网络直播app 编辑:程序博客网 时间:2024/05/03 21:52
JaCoCo Java Code Coverage Library
Jacoco是一个开源的覆盖率工具。Jacoco可以嵌入到Ant 、Maven中,并提供了EclEmma Eclipse插件,也可以使用Java Agent技术监控Java程序。很多第三方的工具提供了对Jacoco的集成,如sonar、Jenkins、IDEA.
官方地址 http://www.eclemma.org/jacoco/
Java Counters
Jacoco包含了多种尺度的覆盖率计数器,包含指令级(Instructions,C0 coverage),分支(Branches,C1 coverage)、圈复杂度(Cyclomatic Complexity)、行(Lines)、方法(non-abstract methods)、类(classes)。如下所示,标示绿色的为分支覆盖充分,标黄色的为部分分支覆盖,标红色的为未执行该分支。
Integration
Jacoco团队提供了如下的一些集成工具的支持Java API
Command Line
Apache Ant
Apache Maven
Eclipse EclDmma Plugin
jacoco-maven-plugin
Jacoco总体上提供了比较完整的文档,但是Maven项目如果需要支持Jacoco,配置起来比较复杂,不如Cobertura方便。为了能够跑通该插件,调研了很多文章,其中‘Creating Code Coverage Reports for Unit And Integration Tests with The JaCoCo Maven Plugin’帮助最大。
具体的maven配置如下,执行mvn test即可得到。
<!-- jacoco plugin --> <plugin> <groupId>org.jacoco</groupId> <artifactId>jacoco-maven-plugin</artifactId> <version>0.6.4.201312101107</version> <executions> <execution> <!-- 在maven的initialize阶段,将Jacoco的runtime agent作为VM的一个参数 传给被测程序,用于监控JVM中的调用。 --> <id>default-prepare-agent</id> <goals> <goal>prepare-agent</goal> </goals> <configuration> <destFile> ${project.build.directory}/coverage-reports/jacoco.exec </destFile> <propertyName>surefireArgLine</propertyName> </configuration> </execution> <!-- 在程序的verify阶段,执行report测试的程序。 文件的输入为perpare-agent阶段中设置或者默认的jacoco.exec. 参数 includes和excludes可用来选定report中过滤的类。 --> <execution> <id>default-report</id> <phase>test</phase> <goals> <goal>report</goal> </goals> <configuration> <dataFile>${project.build.directory}/coverage-reports/jacoco.exec</dataFile> <outputDirectory>${project.reporting.outputDirectory}/jacoco</outputDirectory> </configuration> </execution> </executions> </plugin><!--使用 maven-surefire-plugin来执行单元测试。将surefireArgLine赋值给argLine参数,以保证在测试执行时Jacoco agent处于运行状态。--> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.16</version> <configuration> <argLine>${surefireArgLine}</argLine> </configuration> </plugin></plugins>
动态监测Web项目的覆盖率
Jacoco使用Java Agent 动态插桩,来监控文件执行的覆盖率数据。Jacoco 代理可以收集执行信息,并且当JVM退出时dump,输出数据的方式有3种:- 1,文件,当JVM退出时将执行数据写到本地
- 2,TCP Socket Server,以外部工具的形式连接JVM,通过socket获取执行数据。
- 3,TCP Sockect Client,程序启动时Agent连接到TCP端点,通过request将执行数据输出。
Java Agent 可以通过如下的JVM参数来启动:
-javaagent:[yourpath/]jacocoagent.jar=[opt1]=[val1],[opt2]=[val2]
shutdown jvm时获取dump数据
Jacoco插件通过agent获取覆盖率信息文件,为了保证插件可以连接到Jacoco agent,我们必须正确配置Jacoco agent和应用一起首先运行起来。
在shutdown时,获取dump数据,在tomcat的catalina.sh中JAVA_OPTS中增加如下参数-javaagent:[yourpath/]jacocoagent.jar=includes=com.xxx.*,output=xxx
其中,output=file/tcpserver/tcpclient:
覆盖率数据输出的形式,分别为file,tcpserver,tcpclient.
对应的Jenkins插件见https://wiki.jenkins-ci.org/display/JENKINS/JaCoCo+Plugin
以客户端形式运行
在tomcat的catalina.sh中JAVA_OPTS中增加如下参数
-javaagent:[yourpath/]jacocoagent.jar=includes=com.baidu.*, output=tcpserver,port=6300,address= 220.181.111.148
这样会在220.181.111.148地址的6300端口上提供client访问,并且能dump出此时的覆盖率文件。
使用这种方式,不需要停止jvm,只需要请求测试环境提供的端口地址即可。
这种调用方式,在Jacoco的网站上提供了生成报告等的API。
具体请查看: http://blog.csdn.net/kittyboy0001/article/details/26400091
- Jacoco覆盖率工具使用调研
- Jacoco覆盖率工具使用
- Jacoco覆盖率工具使用之maven篇
- Jacoco覆盖率工具使用之maven篇
- Jacoco覆盖率工具使用(已测试)
- Jacoco覆盖率工具使用之maven篇
- Jacoco覆盖率工具使用(已测试)
- Cobertura覆盖率工具的使用调研
- java代码覆盖率工具-Emma和Jacoco
- 覆盖率工具-jacoco 集成进jenkins
- JAVA代码覆盖率工具JaCoCo-实践篇
- JAVA代码覆盖率工具JaCoCo-踩坑篇
- JAVA 代码覆盖率工具 JaCoCo-原理篇
- Gradle 添加 Jacoco 分析单元测试覆盖率工具
- 基于apache ant工程的Jacoco覆盖率工具使用之ant 脚本编写
- 基于apache ant工程的Jacoco覆盖率工具使用之ant 脚本编写
- Gradle构建系统简介及在Gradle中集成覆盖率工具Jacoco并使用
- Jacoco是一个Java代码覆盖率统计工具
- strstr 和为字符串动态分配内存
- EditPlus 快捷键
- android布局——xml和局ava代码比较
- Apache ActiveMQ 高级应用 - 自定义分发策略
- Note for AIX
- Jacoco覆盖率工具使用调研
- Java 里的 abstract 和 final 关键字
- 客户情况统计
- AVCaptureVideoDataOutputSampleBufferDelegate 注意点
- 中国全部省份及简称
- 调用Win32 Api函数,非托管DLL
- 判断Big Endian 和 Little Endian
- 解决editplus新建html网页中汉字的乱码问题
- memcached简介