tags: Java
前阵子使用 Jacoco 进行代码覆盖率测试,由于项目特殊遇到了不少坑,网上搜到的教程感觉也不够全面,特此记录。
所用到的工具软件的版本信息如下
Jacoco 版本:0.8.0
Eclemma 版本:3.0.0
Eclipse 版本:4.3
JDK 版本:1.8
ANT 版本:1.9
1. 工具介绍
JaCoCo,即 Java Code Coverage,是一款开源的 Java 代码覆盖率统计工具。支持 Ant 、Maven、Gradle 等构建工具,支持 Jenkins、Sonar 等持续集成工具,支持 Java Agent 技术远程监控 Java 程序运行情况,支持Eclipse、IDEA等IDE,提供HTML,CSV 等格式的报表导出,轻量级实现,对外部库和系统资源的依赖性小,性能开销小。
JaCoCo 支持从 JDK1.0 版本到 JDK1.8 版本 的 Java 类文件。但是,JaCoCo 工具所需的JRE 版本最小为 1.5。另外,1.6及以上版本的测试中的类文件必须包含有效的堆栈映射帧。
覆盖率统计数据
2. 入门使用
本文将以 tcpserver 模式远程获取应用覆盖率,通过 Ant 脚本执行相关命令,在 Eclipse 上查看源码覆盖率情况。
2.1 配置部署
先从官网获取 Jacoco 的压缩包, 将其上传到你要进行覆盖率检测的应用所在的服务器上。在解压后的 lib 目录下找到 jacocoagent ,将其路径添加到 JAVA_OPTS 环境变量中(如果项目中用到了 Tomcat,也可以直接将其添加到 CATALINA_OPTS 的环境变量中,JAVA_OPTS 只是更通用而已)。
如果是 Windows 系统,将以下内容追加到 JAVA_OPTS 环境变量。
-javaagent:D:\jacoco-0.7.9\lib\jacocoagent.jar=includes=*,address=10.1.231.168,port=6300,output=tcpserver,append=true;%JAVA_OPTS%
如果是 Linux 系统,可以直接编辑 .bash_profile
export JACOCO="-javaagent:/$your_path/jacocoagent.jar=includes=com.grgbanking.*,output=tcpserve