JaCoCo介绍
一、JaCoCo简述
JaCoCo是一个开源的覆盖率工具,它针对的开发语言是java,其使用方法很灵活,可以嵌入到Ant、Maven中;可以作为Eclipse插件,可以使用其JavaAgent技术监控Java程序等等。
很多第三方的工具提供了对JaCoCo的集成,如sonar、Jenkins等。
JaCoCo包含了多种尺度的覆盖率计数器,包含指令级覆盖(Instructions,C0coverage),分支(Branches,C1coverage)、圈复杂度(CyclomaticComplexity)、行覆盖(Lines)、方法覆盖(non-abstract methods)、类覆盖(classes)
二、JaCoCo基本概念
jacoco支持多种覆盖率的统计,包括:
- 行覆盖率:度量被测程序的每行代码是否被执行,判断标准行中是否至少有一个指令被执行。
- 类覆盖率:度量计算class类文件是否被执行。
- 分支覆盖率:度量if和switch语句的分支覆盖情况,计算一个方法里面的总分支数,确定执行和不执行的 分支数量。
- 方法覆盖率:度量被测程序的方法执行情况,是否执行取决于方法中是否有至少一个指令被执行。
- 指令覆盖:计数单元是单个java二进制代码指令,指令覆盖率提供了代码是否被执行的信息,度量完全 独立源码格式。
- 圈复杂度:在(线性)组合中,计算在一个方法里面所有可能路径的最小数目,缺失的复杂度同样表示测 试案例没有完全覆盖到这个模块。
三、JaCoCo使用方式
3.1 Apache Ant方式
参见 http://eclemma.org/jacoco/trunk/doc/ant.html
3.2 命令行方式
参见 http://www.eclemma.org/jacoco/trunk/doc/agent.html
大概的命令:
-javaagent:[yourpath/]jacocoagent.jar=[option1]=[value1],[option2]=[value2]
其他参数可以查看上面的链接
接口测试时,我们也是使用该方式来进行,具体的说明会在下面另外说明
3.3 Apache Maven方式
参见 http://www.eclemma.org/jacoco/trunk/doc/maven.html
这种方式适合Maven的项目。
3.4 Eclipse EclDmma Plugin方式
参见 http://www.eclemma.org/
该方式主要和eclipse集成,用户可以直观的看到覆盖率的情况
四、maven配置JaCoCo
jacoco支持生成单元测试的覆盖率和接口测试的覆盖率,本节详细描述如何用jacoco生成单元测试覆盖率。
想要在单元测试时统计单元测试的覆盖率,有两种方式,大家可以各取
4.1 mvn命令增加参数
在执行mvn命令时,加上“org.jacoco:jacoco-maven-plugin:prepare-agent”参数即可。 示例:
mvn clean test org.jacoco:jacoco-maven-plugin:0.7.3.201502191951:prepare-agent install -Dmaven.test.failure.ignore=true
其中,jacoco-maven-plugin后面跟的是jacoco的版本; 【-Dmaven.test.failure.ignore=true】建议加上,否则如果单元测试失败,就会直接中断,不会产生.exec文件
执行以上命令后,会在当前目录下的target目录产生一个jacoco.exec文件,该文件就是覆盖率的文件:
4.2 在pom文件中添加jacoco插件
具体的配置方法如下:
1.添加依賴
org.jacoco jacoco-maven-plugin 0.8.3
2.配置plugins
org.jacoco jacoco-maven-plugin 0.8.3 com/**/* pre-test prepare-agent post-test test report
其中包含(includes)或排除(excludes)字段的值应该是相对于目录/ classes /的编译类的类路径(而不是包名),使用标准通配符语法:
* Match zero or more characters ** Match zero or more directories ? Match a single character
你也可以这样排除一个包和它的所有子包/子包:
com/src/**/*
这将排除某些包装中的每个课程,以及任何孩子。例如,com.src.child也不会包含在报表中。
也可以在pom中指定筛选规则:
org.jacoco jacoco-maven-plugin ${jacoco.version} com/src/**/* BUNDLE METHOD COVEREDRATIO 0.50 BRANCH COVEREDRATIO 0.50 CLASS MISSEDCOUNT 0 pre-test prepare-agent post-test test report
此时运行mvn test生成index.html(即覆盖率报告)位置在:
也可以指定输出目录:
post-unit-test test report target/jacoco.exec target/jacoco-ut
在这里,我们将单元测试结果的输出目录确定为target/jacoco-ut目录下~