51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

查看: 1224|回复: 0
打印 上一主题 下一主题

[原创] 能帮你生成单元测试覆盖率报告的工具你知道吗?

[复制链接]
  • TA的每日心情
    无聊
    昨天 09:14
  • 签到天数: 938 天

    连续签到: 5 天

    [LV.10]测试总司令

    跳转到指定楼层
    1#
    发表于 2022-9-22 15:19:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
     jacoco简介
      jacoco 是一个开源的覆盖率工具,它针对的开发语言是 java。其使用方法很灵活:
      可以嵌入到 ant、maven 中;
      可以作为 Eclipse 插件;
      可以作为 javaAgent 探针监控 java 程序等等。
      很多第三方的工具提供了对 jacoco 的集成,如 sonar、jenkins 等等。
      jacoco 包含了多种尺度的覆盖率计数器,包含指令级覆盖(Instructions,C0coverage)、分支覆盖(Branches,C1coverage)、圈复杂度(CyclomaticComplexity)、行覆盖(Lines)、方法覆盖(non-abstract methods)、类覆盖(classes)。
      其含义如下:
      行覆盖率:度量被测程序的每行代码是否被执行,判断标准行中是否至少有一个指令被执行。
      类覆盖率:度量计算 class 类文件是否被执行。
      分支覆盖率:度量 if 和 switch 语句的分支覆盖情况,计算一个方法里面的总分支数,确定执行和不执行的分支数量。
      方法覆盖率:度量被测程序的方法执行情况,是否执行取决于方法中是否有至少一个指令被执行。
      指令覆盖:计数单元是单个 java 二进制代码指令,指令覆盖率提供了代码是否被执行的信息,度量完全独立源码格式。
      圈复杂度:在(线性)组合中,计算在一个方法里面所有可能路径的最小数目,缺失的复杂度同样表示测试案例没有完全覆盖到这个模块。
      jacoco 和 maven 集成
      mvn 命令增加参数
      在执行 mvn 命令时,加上 "org.jacoco:jacoco-maven-plugin:prepare-agent" 参数即可。示例:
    1. 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 集成时也非常方便。
      在 pom 文件中使用 jacoco 插件
      首先,需要添加 jacoco 的依赖:
    1. <properties>
    2.         <jacoco.version>0.8.5</jacoco.version>
    3.     </properties>
    复制代码
    接着,我们需要配置 jacoco-maven-plugin 和 maven-surefire-plugin 内容:
    1.   <dependency>
    2.         <groupId>org.jacoco</groupId>
    3.         <artifactId>jacoco-maven-plugin</artifactId>
    4.         <version>${jacoco.version}</version>
    5.         <scope>test</scope>
    6.     </dependency>
    复制代码
    <includes>或<excludes>标签的值应该是相对于目录 /classes/ 的编译类的类路径(而不是包名),用来指定哪些类需要进行单元测试。
      另外 maven 的测试类需要遵循相应的规范命名,否则无法运行测试类,无法生成测试报告以及覆盖率报告。jacoco 使用的是 maven-surefire-plugin 插件,它的默认测试类名规范是:
      Test*.java:以 Test 开头的 Java 类;
      *Test.java:以 Test 结尾的 Java 类;
      *TestCase.java:以 TestCase 结尾的 Java 类;
      或者可以在pom中自定义测试类:
    1.    <plugins>
    2.             <plugin>
    3.                 <artifactId>maven-surefire-plugin</artifactId>
    4.                 <configuration>
    5.                     <argLine>
    6.                         -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
    7.                     </argLine>
    8.                     <testFailureIgnore>true</testFailureIgnore>
    9.                 </configuration>
    10.             </plugin>
    11.             <!--检查代码覆盖率的插件配置-->
    12.             <plugin>
    13.                 <groupId>org.jacoco</groupId>
    14.                 <artifactId>jacoco-maven-plugin</artifactId>
    15.                 <version>0.8.5</version>
    16.                 <configuration>
    17.                     <!--指定生成.exec文件的存放位置-->
    18.                     <destFile>target/coverage-reports/jacoco-unit.exec</destFile>
    19.                     <!--Jacoco是根据.exec文件生成最终的报告,所以需指定.exec的存放路径-->
    20.                     <dataFile>target/coverage-reports/jacoco-unit.exec</dataFile>
    21.                     <includes>
    22.                         <include>**/service/**</include>
    23.                     </includes>
    24.                     <!-- rules里面指定覆盖规则 -->
    25.                     <rules>
    26.                         <rule implementation="org.jacoco.maven.RuleConfiguration">
    27.                             <element>BUNDLE</element>
    28.                             <limits>  
    29.                                 <!-- 指定方法覆盖到50% -->
    30.                                 <limit implementation="org.jacoco.report.check.Limit">
    31.                                     <counter>METHOD</counter>
    32.                                     <value>COVEREDRATIO</value>
    33.                                     <minimum>0.50</minimum>
    34.                                 </limit>
    35.                                 <!-- 指定分支覆盖到50% -->
    36.                                 <limit implementation="org.jacoco.report.check.Limit">
    37.                                     <counter>BRANCH</counter>
    38.                                     <value>COVEREDRATIO</value>
    39.                                     <minimum>0.50</minimum>
    40.                                 </limit>
    41.                                 <!-- 指定类覆盖到100%,不能遗失任何类 -->
    42.                                 <limit implementation="org.jacoco.report.check.Limit">
    43.                                     <counter>CLASS</counter>
    44.                                     <value>MISSEDCOUNT</value>
    45.                                     <maximum>0</maximum>
    46.                                 </limit>
    47.                             </limits>
    48.                         </rule>
    49.                     </rules>
    50.                 </configuration>
    51.                 <executions>
    52.                     <execution>
    53.                         <id>pre-test</id>
    54.                         <goals>
    55.                             <goal>prepare-agent</goal>
    56.                         </goals>
    57.                     </execution>
    58.                     <execution>
    59.                         <id>post-test</id>
    60.                         <phase>test</phase>
    61.                         <goals>
    62.                             <goal>report</goal>
    63.                         </goals>
    64.                     </execution>
    65.                 </executions>
    66.             </plugin>
    67.         </plugins>
    复制代码
    <rules> 指定筛选规则。
      接着运行 mvn test 生成 index.html,即覆盖率报告:






    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

    x
    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-4-27 09:45 , Processed in 0.069694 second(s), 26 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表