jacoco测试覆盖率统计

一、所需依赖:

JDK1.8
apache-ant-1.10.11-bin.zip(使用ant来生成报告)
jacoco-0.8.8-20210723.142902-15.zip。

二、准备

  1. 新建一个spring boot项目,简单写两个GET请求,执行mvn clean package打包。


    image.png
  2. 将build.xml放入ant的bin目录下,其中有几个参数是需要改动的。


    image.png

三、使用

  1. 启动spring项目:
java -javaagent:D:\software\jacoco-0.8.8\lib\jacocoagent.jar=includes=*,output=tcpserver,port=6300,address=127.0.0.1 -jar .\target\demo-0.0.1-SNAPSHOT.jar

注意port和address需要和build.xml中指定一致。
启动后,调用几个接口。

  1. cmd进入ant的bin目录,执行ant dump:


    image.png
  2. 再执行ant report:


    image.png
  3. 进入jacoco报告路径查看报告:


    image.png

四、延伸

有的时候只想统计特定类的覆盖率,需要做一些调整:

  1. 首先,build.xml中的.class需要指定到具体的路径:


    image.png
  2. 然后,启动项目时,include参数需要指定到具体的类:
java -javaagent:D:\software\jacoco-0.8.8\lib\jacocoagent.jar=includes=com.example.demo.Service.TestServiceImp,output=tcpserver,port=6300,address=127.0.0.1 -jar .\target\demo-0.0.1-SNAPSHOT.jar
  1. 效果如下:


    image.png

五、踩坑总结:

  1. 当组件在服务器,本地生成报告时,服务器启动组件命令时的address不要设置为127.0.0.1,要设置为0.0.0.0,不然声场报告时会连接不到Tomcat服务。

  2. ant report时,报错“[jacoco:report] Execution data for class ******** does not match”,如下图:


    image.png

    解决:这是因为本地重新编译后的包中classid与原包的classid不一致,原因是因为两次编译的环境不一致。所以本地编译后要去原包的.jar中拿到.class文件,覆盖到本地target的classes中,就可以了。

你可能感兴趣的:(jacoco测试覆盖率统计)