JaCoCo简述
JaCoCo是一个开源的覆盖率工具,它针对的开发语言是java,其使用方法很灵活,可以嵌入到Ant、Maven中;可以作为Eclipse插件,可以使用其JavaAgent技术监控Java程序等等。
很多第三方的工具提供了对JaCoCo的集成,如sonar、Jenkins等。
JaCoCo包含了多种尺度的覆盖率计数器,包含指令级覆盖(Instructions,C0coverage),分支(Branches,C1coverage)、圈复杂度(CyclomaticComplexity)、行覆盖(Lines)、方法覆盖(non-abstract methods)、类覆盖(classes)
- Jacoco官方文档链接
https://www.eclemma.org/jacoco/trunk/index.html
一、静态实现
maven项目中的pom.xml设置
<build>
<plugins>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.8.10</version>
<configuration>
<propertyName>jacoco.agent.argline</propertyName>
</configuration>
<executions>
<execution>
<id>pre-test</id>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<execution>
<id>post-test</id>
<phase>test</phase>
<goals>
<goal>report</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
执行mvn clean test 命令会在target目录下生成jacoco目录里面有csv,html,xml聚合报告,也会在target目录下生成jacoco.exec的二进制文件
- 一些其他的配置,如有需求,可以替换上方的节点
<configuration>
<propertyName>jacoco.agent.argline</propertyName>
<!--定义输出的文件夹-->
<outputDirectory>target/jacoco-report</outputDirectory>
<!--执行数据的文件-->
<dataFile>${project.build.directory}/jacoco.exec</dataFile>
<!--要从报告中排除的类文件列表,支持通配符(*和?)。如果未指定则不会排除任何内容-->
<excludes>
<!--排除example中所有的文件和文件夹-->
<exclude>**/example/**</exclude>
</excludes>
<!--包含生成报告的文件列表,支持通配符(*和?)。如果未指定则包含所有内容-->
<includes></includes>
<!--HTML 报告页面中使用的页脚文本。-->
<footer></footer>
<!--生成报告的文件类型,HTML(默认)、XML、CSV,添加此配置只会生成一种报告格式-->
<formats>HTML</formats>
<!--生成报告的编码格式,默认UTF-8-->
<outputEncoding>UTF-8</outputEncoding>
<!--源文件编码-->
<sourceEncoding>UTF-8</sourceEncoding>
<!--HTML报告的标题-->
<title>${project.name}</title>
<configuration>
- tartget目录如下:
- exec文件可以通过idea打开查看具体的覆盖情况,还可以通过第三方工具如:sonarqube
- 浏览器打开html会看到类似下方的内容
二、动态实现
- 下载依赖包
Jacoco官网下载对应版本的zip包 https://www.jacoco.org/jacoco/
拿到jacocoagent.jar和jacococli.jar
找到自己的项目打包成jar包[you project].jar
[you project]-替换成自己的项目jar包 - 添加jacoco探针启动[you project].jar
java -javaagent:D:\jacoco\jacocoagent.jar
这里换成自己存放jacocoagent.jar的实际路径
完整的启动命令如下:(可以使用cmd命令,调起黑窗口,执行下方命令)
java -javaagent:D:\jacoco\jacoco-0.8.8\lib\jacocoagent.jar -jar [you project].jar
jacocoagent.jar的更多运行参数参考
https://www.jacoco.org/jacoco/trunk/doc/agent.html
- 使用postman或者其他测试工具,访问你项目中的功能
- 例如查询用户信息:localhost:8080/qryUser
- 测试结束后停止jar包的运行,直接关闭黑窗口即可
- 关闭之后你会发现在运行Java -jar的文件目录下生成jacoco.exec的文件
- 生成html聚合报告
利用jacococli.jar 生成报告
参数信息 :
【report jacoco.exec 】如果jacoco.exec不在当前目录,用绝对路径指过去
【–classfiles D:\ZE\mycode\five\youjan_demo\target\classes\】 项目编译后的classes目录
注:也可以是项目依赖jar的绝对路径,可以测出此项目依赖jar包的覆盖率
【–sourcefiles D:\ZE\mycode\five\youjan_demo\src\main\java\】 项目源码路径
注:–sourcefiles 配置项非必穿,效果主要是当在访问生成html时能看到具体的哪些代码块没有覆盖到,如果不设置只能看到没有达到覆盖率的文件名,看不到该文件的具体内容
【 --html D:\ZE\mycode\five\youjan_demo\target\report】说明要生成html和存放html的位置
命令如下:
java -jar D:\jacoco\jacococli.jar report jacoco.exec --classfiles D:\ZE\mycode\five\youjan_demo\target\classes\ --sourcefiles D:\ZE\mycode\five\youjan_demo\src\main\java\ --html D:\ZE\mycode\five\youjan_demo\target\report
jacococli.jar的更多运行参数参考
https://www.jacoco.org/jacoco/trunk/doc/cli.html
- 浏览器打开html会看到类似下方的内容