jacoco 官网:https://jenkins.io/
jekins 官网:https://www.eclemma.org/jacoco/trunk/doc/
Springboot+maven+mybatis+mysql
Offline 模式:
在测试前先对文件进行插桩,然后生成插过桩的 class 或 jar 包,测试插过桩的 class 和 jar 包后,会生成动态覆盖信息到文件,最后统一对覆盖信息进行处理,并生成报告。
针对 maven 项目,在 pom.xml 中添加依赖包,在编译时执行单元测试用例,最终的报告生成到 target 目录中
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<!--jacoco-->
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.8.2</version>
<!--这里的execution ,每一个执行的goal,对应的id必须是唯一的-->
<executions>
<execution>
<id>prepare-agent</id>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<execution>
<id>report</id>
<phase>prepare-package</phase>
<goals>
<goal>report</goal>
</goals>
</execution>
<execution>
<id>post-unit-test</id>
<phase>test</phase>
<goals>
<goal>report</goal>
</goals>
<configuration>
<dataFile>target/jacoco.exec</dataFile>
<outputDirectory>target/jacoco-ut</outputDirectory>
</configuration>
</execution>
</executions>
<configuration>
<systemPropertyVariables>
<jacoco-agent.destfile>target/jacoco.exec</jacoco-agent.destfile>
</systemPropertyVariables>
</configuration>
</plugin>
</plugins>
</build>
job 名称:cssjacoco
On-the-fly 插桩:
JVM 中通过-javaagent 参数指定特定的 jar 文件启动 Instrumentation 的代理程序,代理程序在通过 ClassLoader 装载一个 class 前判断是否转换修改 class 文件,将统计代码插入 class,测试覆盖率分析可以在 JVM 执行测试代码的过程中完成。
jar 包方式启动:
java -javaagent:C:\Work\css\jacoco-0.8.2\lib\jacocoagent.jar=includes=,output=tcpserver,port=8086,address= -jar css-0.0.1-SNAPSHOT.jar
镜像方式启动:
构建 docker 镜像:
在当前目录中新建 Dockerfile 文件,执行 docker build -t dockername:v1 .命令
执行完毕后查看是否镜像创建成功:docker images:
启动镜像:docker run -d -it -p 8089:8089 f2e3d36e34c4
http://221.122.129.111:8089/CRUD/ListUser
查询容器日志:docker logs -f 容器 id
查询启动的 docker 进程:docker ps -l
删除 docker 容器:docker rm 容器 id
删除 docker 镜像:docker rmi 镜像 id
导出容器:docker export 容器 id > 文件名.tar
进入 docker 内部:docker exec 4d70138f6755 /bin/sh
LInux 查询端口使用情况:netstat -anp|grep 8089
jacocoant.xml:
<?xml version="1.0" encoding="UTF-8"?>
<project name="JaCoCo" default="run" xmlns:jacoco="antlib:org.jacoco.ant">
<!--Jacoco的安装路径-->
<property name="jacocoAntPath" value="C:\Work\css\jacoco-0.8.2\lib/jacocoant.jar"/>
<!--生成.exec文件的路径,Jacoco就是根据这个文件生成HTML报告的-->
<property name="jacocoExecPath" value="C:\Work\css\jacocoresult\jacoco.exec"/>
<!--生成覆盖率报告的路径-->
<property name="jacocoReportPath" value="C:\Work\css\jacocoresult\jacocoReport"/>
<!--远程服务的ip地址 -->
<property name="server_ip" value="39.105.66.41"/>
<!--前面javaagent配置的远程服务打开的端口,要跟上面配置的一样-->
<property name="server_port_css" value="8086"/>
<!--css项目源代码路径-->
<property name="css_sourceaPath" value="C:\Work\css\css\src\main\java\"/>
<!--css项目class文件路径-->
<property name="css_classPath" value="C:\Work\css\css\target\classes\"/>
<!--让ant知道去哪儿找Jacoco-->
<taskdef uri="antlib:org.jacoco.ant" resource="org/jacoco/ant/antlib.xml">
<classpath path="${jacocoAntPath}"/>
</taskdef>
<target name="run">
<echo message="start..."/>
<echo message="dump..."/>
<antcall target="dump"/>
<echo message="report..."/>
<antcall target="report"/>
<echo message="end..."/>
</target>
<!--dump任务:
根据前面配置的ip地址,和端口号,访问目标服务,并生成.exec文件。
reset=true时,会在dump出exec文件后,清空覆盖率数据;
append=false时,dump出的exec文件会覆盖原有的exec文件;append=true时,dump出的exec文件
追加至原有的exec文件;
-->
<target name="dump">
<jacoco:dump address="${server_ip}" reset="false" destfile="${jacocoExecPath}/class_css.exec" port="${server_port_css}" append="true"/>
</target>
<!--jacoco任务:
根据前面配置的源代码路径和.class文件路径,
dump后生成的.exec文件,生成最终的html覆盖率报告。-->
<target name="report">
<jacoco:report>
<executiondata>
<file file = "C:\Work\css\jacocoresult\jacoco.exec\class_css.exec" />
</executiondata>
<structure name="JaCoCo Report">
<!--group name 对应生成的报告中的列表名-->
<group name="css_Demo">
<sourcefiles encoding="UTF-8">
<fileset dir="${css_sourceaPath}"/>
</sourcefiles>
<classfiles>
<fileset dir="${css_classPath}"/>
</classfiles>
</group>
</structure>
<html destdir="${jacocoReportPath}" encoding="utf-8"/>
<csv destfile="${jacocoReportPath}/report.csv"/>
<xml destfile="${jacocoReportPath}/report.xml"/>
</jacoco:report>
</target>
</project>
执行 ant -f jacocoant.xml 生成代码覆盖率报告:
###4、与 Jekins jacoco plugin 插件集成:
环境配置:
Job 名称:jacoco_report
###5、不同使用场景下的设置
ant dump 任务属性: