jacoco 简介
jacoco 是一个开源的覆盖率工具,它针对的开发语言是 java。其使用方法很灵活,可以嵌入到 ant、maven 中;可以作为 Eclipse 插件;可以作为 javaAgent 探针监控 java 程序等等。 很多第三方的工具提供了对 jacoco 的集成,如 sonar、jenkins 等等。 jacoco 包含了多种尺度的覆盖率计数器,包含指令级覆盖 (Instructions,C0coverage) 、分支覆盖 (B ranches,C1coverage) 、圈复杂度 (CyclomaticComplexity) 、行覆盖 (Lines) 、方法覆盖 (non-abstract methods) 、类覆盖 (classes) ,其含义如下:行覆盖率:度量被测程序的每行代码是否被执行,判断标准行中是否至少有一个指令被执行。
类覆盖率:度量计算 class 类文件是否被执行。
分支覆盖率:度量 if 和 switch 语句的分支覆盖情况,计算一个方法里面的总分支数,确定执行和不执行的分支数量。
方法覆盖率:度量被测程序的方法执行情况,是否执行取决于方法中是否有至少一个指令被执行。
指令覆盖:计数单元是单个 java 二进制代码指令,指令覆盖率提供了代码是否被执行的信息,度量完全独立源码格式。
圈复杂度:在(线性)组合中,计算在一个方法里面所有可能路径的最小数目,缺失的复杂度同样表示测试案例没有完全覆盖到这个模块。
jacoco 和 maven 集成
2.1 mvn 命令增加参数 在执行 mvn 命令时,加上 "org.jacoco:jacoco-maven-plugin:prepare-agent" 参数即可。 示例: mvn clean test org.jacoco:jacoco-maven-plugin:0.8.5:prepare-agent install -Dmaven.test.failure.ignore=true 其中,jacoco-maven-plugin 后面跟的是jacoco的版本。"-Dmaven.test.failure.ignore=true" 建议加上,否则如果单元测试失败,就会直接中断,不会产生 .exec 文件。 执行以上命令后,会在当前目录的 target 目录下产生一个jacoco.exec文件,该文件就是覆盖率的文件。 总体说来,这种方式比较简单,在与 jenkins 集成时也非常方便。 2.2 在 pom 文件中使用 jacoco 插件 首先,需要添加 jacoco 的依赖: 0.8.5 org.jacoco jacoco-maven-plugin ${jacoco.version} test 接着,我们需要配置 jacoco-maven-plugin 和 maven-surefire-plugin 内容: maven-surefire-plugin -javaagent:${settings.localRepository}/org/jacoco/org.jacoco.agent/${jacoco.version}/org.jacoco.agent-${jacoco.version}-runtime.jar=destfile=${project.basedir}/target/coverage-reports/jacoco-unit.exec true org.jacoco jacoco-maven-plugin 0.8.5 target/coverage-reports/jacoco-unit.exec target/coverage-reports/jacoco-unit.exec **/service/** BUNDLE METHOD COVEREDRATIO 0.50 BRANCH COVEREDRATIO 0.50 CLASS MISSEDCOUNT 0 pre-test prepare-agent post-test test report 或标签的值应该是相对于目录 /classes/ 的编译类的类路径(而不是包名),用来指定哪些类需要进行单元测试。 另外 maven 的测试类需要遵循相应的规范命名,否则无法运行测试类,无法生成测试报告以及覆盖率报告。jacoco 使用的是 maven-surefire-plugin 插件,它的默认测试类名规范是:Test*.java:以 Test 开头的 Java 类;
*Test.java:以 Test 结尾的 Java 类;
*TestCase.java:以 TestCase 结尾的 Java 类;
org.apache.maven.plugins
maven-surefire-plugin
**/*Tests.java
**/*Test.java
**/Abstract*.java
指定筛选规则。 接着运行 mvn test 生成 index.html,即覆盖率报告![9d4b6336d69085ddc5530c174ac4b143.gif](https://img-blog.csdnimg.cn/img_convert/9d4b6336d69085ddc5530c174ac4b143.gif)
![9d4b6336d69085ddc5530c174ac4b143.gif](https://img-blog.csdnimg.cn/img_convert/9d4b6336d69085ddc5530c174ac4b143.gif)
链接:https://www.cnblogs.com/jmcui/p/12843171.html
本文为51Testing经授权转载,转载文章所包含的文字来源于作者。如因内容或版权等问题,请联系51Testing进行删除
推荐阅读点击阅读☞Jacoco统计Web接口/功能测试的代码覆盖率
点击阅读☞跨了个年回来,身边很多人都在补一门叫“测试覆盖率”的课!
点击阅读☞如何在Sonarqube里集成单元测试覆盖率报告?
点击阅读☞一言不合就整新技术,果然大佬是让我们望尘莫及的存在!
点击阅读☞高压下我是如何高效完成测试任务的?只需要换个方法!
![5c000802dc9a0374abfd5b96856ed753.gif](https://img-blog.csdnimg.cn/img_convert/5c000802dc9a0374abfd5b96856ed753.gif)