SpringBoot接入JaCoCo实践教程

静态接入和动态接入

SpingBoot可以通过2种方式接入JaCoCo:Maven和Agent。Maven方式是静态接入 ,在编译时计算代码覆盖率。Agent方式是动态接入,服务启起来以后,能实时根据代码命中情况计算代码覆盖率。

教程代码已上传开源项目:github.com/dongfanger/...

Maven

pom.xml添加依赖:

xml 复制代码
<dependency>
    <groupId>org.jacoco</groupId>
    <artifactId>jacoco-maven-plugin</artifactId>
    <version>0.8.7</version>
</dependency>

添加配置:

xml 复制代码
<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:

bash 复制代码
java -javaagent:jacoco/jacocoagent.jar -jar target/mini-0.0.1-SNAPSHOT.jar

此时会生成1个jacoco.exec文件,这个文件就是覆盖率数据文件,采用以下命令根据数据文件生成HTML报告:

css 复制代码
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,这样就能实时统计代码覆盖率。换句话说,只要服务运行起来以后,只要你能命中代码,无论是跑单元测试还是调接口,或者是手工测试,都能生成代码覆盖率数据。

相关推荐
IT枫斗者枫哥几秒前
AI返回合法JSON,字段就可信吗?给抽取结果补一道业务校验
java·人工智能·后端
溪语流沙12 分钟前
Django + Vue电商项目第005讲:后端骨架|Django初始化、配置分层与DRF接入
vue.js·后端·python·django
益达是我啊13 分钟前
前端工程师的 Java 后端 30 天快速入门(1)
后端
IT枫斗者枫哥23 分钟前
UPDATE影响0行,接口却返回成功:把版本冲突接回业务
java·后端
一帅43 分钟前
Muzzle:给 Java Agent 戴上的"安全口罩"
后端
Bazingga1 小时前
从0到1吃透Function Calling:Spring AI完整实战
后端
写了20年代码的老程序员1 小时前
想让 AI 改 Bug 快准狠?先给日志加个业务代码坐标
java·后端·apache log4j
据说幸运很容易1 小时前
从 Run 到 Report:现有框架引入 Allure 的实践
后端·架构
合橱瑰1 小时前
踩坑实录:子进程“假 Ready”导致窗口永远无法唤起?
后端·全栈
imDwAaY1 小时前
如何快速定位线上OOM
后端