jacoco使用
在毕业设计中,老师希望知道每个测试api的覆盖率是多少。所以在网上看到了jacoco可以统计覆盖率,下面就是jacoco的使用过程记录。
1. 首先对driver进行编译,依赖要加上。
javac -cp xxxxxx[依赖] xxx.java
先把所有的文件编译好,以便运行。
2. 使用javaagent运行时插桩,运行被测程序,把输入喂给程序
java -cp xxxxxx[依赖] -javaagent:[yourpath/]jacocoagent.jar=destfile=xxxx.exec xxx[被测程序] xxxxx[输入]
在这里我采用的是使用shell的方式去遍历所有的目录下的输入去执行,把输出文件和依赖都写固定了,如果想要运行其他或者生成不同的exec文件,可以直接在shell中修改即可。
我们采用的是运行时插桩的模式;可以从启动参数javaagent看出
#! /bin/bash
input=$1
cur=$PWD
cd $input
for file in `ls | grep id`
do
f=$input$file
cd $cur
java -cp /home/lfl/commons-imaging/target/commons-imaging-1.0-alpha3-SNAPSHOT.jar:/home/lfl/test_jacoco/ -javaagent:/home/lfl/jacoco-0.8.7/lib/jacocoagent.jar=destfile=bmp.exec ImagingBmpDriver $f
done
3. 使用report输出覆盖率信息,以html形式查看,生成的文件是index.html文件名是固定的
java -jar [yourpath/]jacococli.jar report xxxx.exec --classfiles [依赖] --html [输出文件夹]
可以从上图看到,生成的是一个文件夹,文件夹中的index.xml便是我们想要的消息。
jacoco记录的消息还是很全面的;比如说指令覆盖,绿色表示已经覆盖的,红色表示未覆盖,百分数就是表示覆盖率。
覆盖率信息有指令覆盖、分支覆盖、行覆盖、方法覆盖、类型覆盖、圈复杂度覆盖
4.后续
https://stackoverflow.com/questions/47717538/usage-of-jacococli-jar-with-multiple-classfiles
在后续的操作中如果有多个的classfile位置,必须多次指定--classfiles
,上面是一个解决的链接