sonar jacoco 覆盖率为0_SonarQube8.3中的Maven项目的测试覆盖率报告

本文介绍了如何在Maven项目中配置SonarQube8.3,以合并单元测试和集成测试的覆盖率报告。针对多模块项目,文章详细展示了项目结构的调整,单元和集成测试的运行配置,测试报告的生成,以及在SonarQube仪表板上可视化测试覆盖率的方法。
摘要由CSDN通过智能技术生成

SonarQube6.2开始,测试报告不再在这些类别中分开。SonarQube将所有测试报告合并为一份涵盖整体的测试报告。因此,如果在Maven项目中将单元测试(由Maven Surefire插件运行)和集成测试(由Maven Failsafe插件运行)分开进行测试,那么如何配置JaCoCo Maven插件呢?

在以下各节中,提出了满足以下条件的解决方案:

  • 构建工具:Maven
  • 该项目可以是多模块项目。
  • 单元测试和集成测试是每个模块的一部分。
  • 测试覆盖率是通过JaCoCo Maven插件来衡量的。

首先显示了Maven项目结构,用于单元测试和集成测试的分离。然后显示了Maven项目配置,其中包含单独的单元测试运行和集成测试运行。之后,我们来看看Maven项目配置以生成涵盖单元测试和集成测试的测试报告。最后,SonarQube的仪表板中显示了SonarQube的配置,用于测试报告的可视化查看。

Maven项目结构

首先,我们看一下默认的Maven项目结构在单个模块项目中的样子。

FunTester-app
├── pom.xml
├── src
│   ├── main
│   │   └── java
│   └── test
│       └── java

目录src/main/java包含生产源代码,目录src/test/java包含测试源代码。我们可以将单元测试集成测试放到这个目录中。但是我们想将这两种类型的测试放在单独的目录中。因此,我们添加了一个名为src/it/java的新目录。然后将单元测试放在src/test/java目录中,并将集成测试放在src/it/java目录中,因此新的项目结构如下图所示。

FunTester-app
├── pom.xml
├── src
│   ├── it
│   │   └── java
│   ├── main
│   │   └── java
│   └── test
│       └── java

单元和集成测试运行

幸运的是,单元测试运行配置是Maven默认项目配置的一部分。如果满足以下条件,Maven将自动运行这些测试:

  • 测试位于目录src/test/java
  • 测试类名称以Test开头或以TestTestCase结尾。

Maven的构建生命周期阶段测试中运行这些测试。

集成测试运行配置必须手动完成,也有Maven插件提供方便。前提是满足以下条件:

  • 集成测试存储在目录src/it/java
  • 集成测试类名称要么以IT开头,要么以ITITCase结尾,
  • 集成测试在Maven的构建生命周期阶段进行集成测试。

首先,必须在其测试类路径中包含目录src/it/java。在这里用BuildHelperMaven插件。它将目录src/it/java添加到测试类路径。

    <plugin>
                <groupId>org.codehaus.mojogroupId>
                <artifactId>build-helper-maven-pluginartifactId>
                <version>3.1.0version>
                <executions>
                    <execution>
                        <goals>
                            <goal>add-test-sourcegoal>
                            <goal>add-test-resourcegoal>
                        goals>
                        <configuration>
                            <sources>
                                <source>src/it/javasource>
                            sources>
                            <resources>
                                <resource>
                                    <directory>src/it/resourcesdirectory>
                                resource>
                            resources>
                        configuration>
                    execution>
                executions>
            plugin>

上面的代码段必须插入到项目根pom中的部分。

Maven的构建生命周期包含一个称为集成测试的阶段。在此阶段,我们要运行集成测试。幸运的是,当在POM中设置Maven安全插件的目标集成测试时,会自动绑定到此阶段。如果希望在集成测试失败时取消构建,那么还必须将目标验证添加到POM中:

    <plugin>
                <groupId>org.apache.maven.pluginsgroupId>
                <artifactId>maven-failsafe-pluginartifactId>
                <version>3.0.0-M4version>
                <configuration>
                    <encoding>${project.build.sourceEncoding}encoding>
                configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>integration-testgoal>
                            <goal>verifygoal>
                        goals>
                    execution>
                executions>
            plugin>

同样,以上代码片段也必须插入到项目根pom中的部分。然后,当Maven安全插件的类名称以IT开头或以ITITCase结尾时,它们会自动运行集成测试。

测试报告生成

使用JaCoCo Maven插件生成测试报告,它应该为单元测试集成测试共同生成测试报告。因此,该插件必须要准备两个分开的代理,然后他们在测试运行期间生成报告。当JaCoCo的目标prepare-agent和在POM中设置了prepare-agent-integrationJaCoCo还必须创建一个报告,以便SonarQube可以读取报告以进行可视化。因此,我们必须在POM中添加目标报告和报告集成:

    <plugin>
                <groupId>org.jacocogroupId>
                <artifactId>jacoco-maven-pluginartifactId>
                <version>0.8.5version>
                <executions>    
                    <execution>
                        <goals>  
                            <goal>prepare-agentgoal>
                            <goal>prepare-agent-integrationgoal>
                            <goal>reportgoal>
                            <goal>report-integrationgoal>
                        goals>  
                    execution>
                executions>  
            plugin>

同样,它也必须添加在中。

SonarQube测试报告可视化

现在,我们想在SonarQube中可视化我们的测试报告。成功构建后,我们必须在我们的项目中运行SonarMaven3插件(命令mvn sonar:sonar)。因此Sonar Maven插件知道将报告存放到哪里,我们必须在〜/.m2/setting.xml中配置SonarQube信息:

 <profile>
      <id>sonarid>
      <activation>
        <activeByDefault>trueactiveByDefault>
      activation>
      <properties>
        <sonar.host.url>http://localhost:8080sonar.host.url>
      properties>
    profile>

SonarQube仪表板中打开项目时,我们会看到总体测试覆盖率报告。


公众号FunTester首发,原创分享爱好者,腾讯云、开源中国和掘金社区首页推荐,知乎八级强者,欢迎关注、交流,禁止第三方擅自转载。

FunTester热文精选

  • 写给所有人的编程思维
  • 2020年Tester自我提升
  • 未来的神器fiddler Everywhere
  • 测试开发工程师工作技巧
  • Selenium4 IDE,它终于来了
  • 自动化测试灵魂三问:是什么、为什么和做什么
  • 自动化测试框架
  • 敏捷中的端到端测试
  • 固定QPS压测模式探索
  • 弱网测试:最低流畅网速是多少?
  • 接口测试直播回顾
5194972a4bf7a4ac72c01fec0255e6b2.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值