前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SonarQube测试覆盖率--Java

SonarQube测试覆盖率--Java

原创
作者头像
源代码安全
发布2023-03-01 14:13:51
2.4K0
发布2023-03-01 14:13:51
举报
文章被收录于专栏:sonarqube

测试覆盖率报告和测试执行报告是评估代码质量的重要指标。测试覆盖率报告告诉您测试用例涵盖的代码百分比。测试执行报告告诉您已运行哪些测试及其结果。

SonarQube本身不计算覆盖范围。要在分析中包含覆盖率结果,您必须设置第三方覆盖率工具并将 SonarQube 配置为导入该工具生成的结果。

一般准则

在导入测试覆盖率之前,您需要配置适当的 SonarScanner,以便在构建管道中执行代码分析。

要启用覆盖率报告,您必须执行以下操作:

  1. 将覆盖率工具设置为作为生成管道的一部分运行。您的覆盖率工具应设置为在SonarScanner分析之前运行。
  2. 配置覆盖范围工具,使输出报告文件的位置和格式与 SonarScanner 的预期相匹配。
  3. 配置声纳扫描仪的分析参数,以便它可以导入报告文件。

现在,在项目的每次构建中,覆盖率工具都应执行其分析并将其结果输出到一个或多个文件(通常一个用于测试覆盖率,一个用于测试执行)。然后,作为其分析过程的一部分,SonarScanner将导入这些文件并将结果发送到SonarQube。

覆盖范围支持

SonarQube 直接支持以各种语言的各种工具原生格式导入覆盖数据。它还支持导入通用格式,该格式可用作从不直接支持的工具自定义转换报表的目标。

Java 测试覆盖率

SonarQube支持将测试覆盖率报告作为Java项目分析的一部分。

但是,SonarQube 不会自行生成覆盖率报告。相反,您必须设置第三方工具以在生成过程中生成报表。然后,您需要配置分析以告知 SonarScanner 报告的位置,以便它可以拾取报告并将其发送到 SonarQube,在那里它将与其他分析指标一起显示在您的项目仪表板上。

对于Java项目,SonarQube直接支持JaCoCo覆盖工具(有关集成其他覆盖工具的信息,请参阅通用测试数据)。

调整您的设置

要启用覆盖范围,您需要:

  • 调整构建过程,以便 JaCoCo 报告生成步骤在 SonarScanner 步骤之前运行。
  • 确保 JacCoCo 将其报告文件写入生成环境中定义的路径。
  • 配置构建的扫描步骤,以便 SonarScanner 从该定义的路径中选取报告文件。

在单模块 Maven 项目中添加覆盖范围

要为您的 Maven 项目添加覆盖率,您需要使用 jacoco-maven-plugin 及其创建代码覆盖率报告的目标。report通常,您将创建一个特定的 Maven 配置文件,用于使用检测执行单元测试,并仅按需生成覆盖率报告。

在最基本的情况下,我们需要执行两个目标:允许在单元测试执行期间收集覆盖率信息,以及 ,使用在单元测试执行期间收集的数据生成报告。默认情况下,该工具会生成报表的 XML、HTML 和 CSV 版本。在这里,我们显式指定XML,因为这是我们SonarQube唯一需要的XML。

您的部分应如下所示:jacoco:prepare-agentjacoco:report<profile>pom.xml

代码语言:javascript
复制
<profile>
  <id>coverage</id>
  <build>
   <plugins>
    <plugin>
      <groupId>org.jacoco</groupId>
     <artifactId>jacoco-maven-plugin</artifactId>
      <version>0.8.7</version>
      <executions>
        <execution>
          <id>prepare-agent</id>
          <goals>
            <goal>prepare-agent</goal>
          </goals>
        </execution>
        <execution>
          <id>report</id>
          <goals>
            <goal>report</goal>
          </goals>
          <configuration>
            <formats>
              <format>XML</format>
            </formats>
          </configuration>
        </execution>
      </executions>
    </plugin>
    ...
   </plugins>
  </build>
</profile>

默认情况下,生成的报告将保存在 下。扫描程序将自动检查此位置,因此无需进一步配置。只需启动:target/site/jacoco/jacoco.xml

代码语言:javascript
复制
mvn sonar:sonar -Pcoverage

像往常一样,报告将被拾取。

如果需要更改生成报告的目录,可以使用 Maven 的开关在命令行上设置属性:-D

代码语言:javascript
复制
mvn -Dsonar.coverage.jacoco.xmlReportPaths=
      ../app-it/target/site/jacoco-aggregate/jacoco.xml
    sonar:sonar -Pcoverage

或在您的 :pom.xml

代码语言:javascript
复制
<properties>
  <sonar.coverage.jacoco.xmlReportPaths>
    ../app-it/target/site/jacoco-aggregate/jacoco.xml
  </sonar.coverage.jacoco.xmlReportPaths>
</properties>

支持通配符和逗号分隔的路径列表。路径可以是绝对路径,也可以是相对于项目根目录的路径。

在多模块 Maven 项目中添加覆盖范围

对于多模块 Maven 项目,您可以在父 pom 的配置文件中配置 ,就像在上面的单模块案例中一样。默认情况下,将为每个模块生成单独的覆盖范围报告。jacoco-maven-plugin

如果要将所有特定于模块的报告聚合到一个项目级报告中,最简单的解决方案是创建一个特殊的Maven模块(以及您已有的模块),该模块除了使用该目标的模块外,什么都不包含。

下面是一个示例:pom.xmlreport-aggregate

代码语言:javascript
复制
<project>
  <artifactId>my-project-report-aggregate</artifactId>
  <name>My Project</name>
  <description>Aggregate Coverage Report</description>
  <dependencies>
    <dependency>
      <groupId>${project.groupId}</groupId>
      <artifactId>my-module-1</artifactId>
      <version>${project.version}</version>
    </dependency>
    <dependency>
      <groupId>${project.groupId}</groupId>
      <artifactId>my-module-2</artifactId>
      <version>${project.version}</version>
    </dependency>
  </dependencies>
  <build>
    <plugins>
      <plugin>
        <groupId>org.jacoco</groupId>
        <artifactId>jacoco-maven-plugin</artifactId>
        <executions>
          <execution>
            <id>report-aggregate</id>
            <phase>verify</phase>
            <goals>
              <goal>report-aggregate</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
</project>

在目录中调用时,将生成聚合报告并将其放置在该目录中的标准位置。然后,在顶层设置到此位置:maven clean verifyreport-aggregate-moduletarget/site/jacoco-aggregate/jacoco.xmlpom.xmlsonar.coverage.jacoco.xmlReportPaths

代码语言:javascript
复制
<properties>/
  <sonar.coverage.jacoco.xmlReportPaths>
    ${project.basedir}/report-aggregate/target/site/
      jacoco-aggregate/jacoco.xml
  </sonar.coverage.jacoco.xmlReportPaths>
</properties>

支持通配符和逗号分隔的路径列表。

在 Gradle 项目中添加覆盖范围

要为您的 Gradle 文件设置代码覆盖率,您只需将 JaCoCo 插件和 SonarScanner for Gradle 一起应用于您的项目文件,因为 JaCoCo 已经集成到默认的 gradle 发行版中:build.gradle

代码语言:javascript
复制
plugins {
    id "jacoco"
    id "org.sonarqube" version "3.3"
}
jacocoTestReport {
    reports {
        xml.enabled true
    }
}

您的报告将自动保存在目录中。SonarQube 插件会自动检测此位置,因此无需进一步配置。要导入覆盖范围,请启动:build/reports/jacoco

代码语言:javascript
复制
  gradle test jacocoTestReport sonarqube

覆盖范围参数也可以在UI中设置

该参数也可以在SonarQube界面中设置,在sonar.coverage.jacoco.xmlReportPaths

您的项目> JaCoCo>“常规设置”>项目设置

对于项目级设置,以及

管理>配置>常规设置>JaCoCo

对于全局设置(应用于所有项目)。

更多信息请参考:sonarqube.cc

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Java 测试覆盖率
    • 调整您的设置
      • 在单模块 Maven 项目中添加覆盖范围
        • 在多模块 Maven 项目中添加覆盖范围
          • 在 Gradle 项目中添加覆盖范围
            • 覆盖范围参数也可以在UI中设置
            相关产品与服务
            腾讯云 BI
            腾讯云 BI(Business Intelligence,BI)提供从数据源接入、数据建模到数据可视化分析全流程的BI能力,帮助经营者快速获取决策数据依据。系统采用敏捷自助式设计,使用者仅需通过简单拖拽即可完成原本复杂的报表开发过程,并支持报表的分享、推送等企业协作场景。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档