SpringBoot接入JaCoCo实践代码覆盖率
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
这里写自定义目录标题
参考
概述
JaCoCo是面向Java的开源代码覆盖率工具JaCoCo以Java代理模式运行它负责在运行测试时检测字节码。 JaCoCo会深入研究每个指令并显示每个测试过程中要执行的行。 为了收集覆盖率数据JaCoCo使用ASM即时进行代码检测并在此过程中从JVM Tool Interface接收事件最终生成代码覆盖率报告。
接入
静态接入和动态接入
SpingBoot可以通过2种方式接入JaCoCoMaven和Agent。Maven方式是静态接入在编译时计算代码覆盖率。Agent方式是动态接入服务启起来以后能实时根据代码命中情况计算代码覆盖率。
Maven
pom.xml添加依赖
<dependency>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.8.7</version>
</dependency>
添加配置
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${project.parent.version}</version>
</plugin>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.8.7</version>
<executions>
<execution>
<id>default-prepare-agent</id>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<execution>
<id>default-report</id>
<goals>
<goal>report</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
点击maven的install
target/site/jacoco目录下就生成了覆盖率报告
Agent
下载jacoco文件后解压提取2个文件
使用命令启动SpringBoot启动参数添加-javaagent
java -javaagent:jacoco/jacocoagent.jar -jar target/mini-0.0.1-SNAPSHOT.jar
此时会生成1个jacoco.exec文件这个文件就是覆盖率数据文件采用以下命令根据数据文件生成HTML报告
java -jar jacoco/jacococli.jar report jacoco.exec --classfiles ./target/classes/ --sourcefiles ./src/main/java/ --html ./report
接下来就来验证动态特性。把report目录和jacoco.exec都删了因为jacoco每次部署只能分析一次。把服务停掉后重新启动。这一次不直接分析而是先用postman调一下接口
然后再分析一把
可以看到覆盖率变成100%说明postman调接口这个操作命中了代码被jacoco统计到了。javaagent相当于是个代理在服务运行期间所有调用都会经过javagent这样就能实时统计代码覆盖率。换句话说只要服务运行起来以后只要你能命中代码无论是跑单元测试还是调接口或者是手工测试都能生成代码覆盖率数据。