SonarQube 8.3.x中的Maven项目的测试覆盖率报告
几年前,我写了一篇博客文章,介绍如何在SonarQube中生成测试报告,该报告独立于单元测试和集成测试的测试报告中。 从SonarQube 6.2开始,测试报告不再在这些类别中分开(请参阅SonarQube的博客文章 )。 SonarQube将所有测试报告合并为一个涵盖整体的测试报告。 因此,如果您在Maven项目中将单元测试(由Maven Surefire插件运行)和集成测试(由Maven Failsafe插件运行)分开进行测试,那么如何配置JaCoCo Maven插件。
在以下各节中,提出了满足以下条件的解决方案:
- Maven被用作构建工具。
- 该项目可以是多模块项目。
- 单元测试和集成测试是每个模块的一部分。
- 测试覆盖率由JaCoCo Maven插件测量。
下一部分的路线图是,首先显示了Maven项目结构,用于单元测试和集成测试的分离。 然后显示了Maven项目配置,其中包含单独的单元测试运行和集成测试运行。 之后,我们来看一下Maven项目配置,以生成涵盖单元测试和集成测试的测试报告。 最后,SonarQube的仪表板中显示了SonarQube的配置,用于测试报告的可视化。
Maven项目结构
首先,我们看一下默认的Maven项目结构在单个模块项目中的样子。
my-app ├── pom.xml ├── src │ ├── main │ │ └── java │ └── test │ └── java
目录src / main / java包含生产源代码,目录src / test / java包含测试源代码。 我们可以将单元测试和集成测试放到这个目录中。 但是我们想将这两种类型的测试放在单独的目录中。 因此,我们添加了一个名为src / it / java的新目录。 然后将单元测试放在src / test / java目录中,并将集成测试放在src / it / java目录中,因此新的项目结构如下图所示。
my-app ├── pom.xml ├── src │ ├── it │ │ └── java │ ├── main │ │ └── java │ └── test │ └── java
单元和集成测试运行
幸运的是,单元测试运行配置是Maven默认项目配置的一部分。 如果满足以下条件,Maven将自动运行这些测试:
- 测试位于目录src / test / java和
- 测试类名称以Test开头或以Test或TestCase结尾。
Maven在Maven的构建生命周期阶段测试期间运行这些测试。
集成测试运行配置必须手动完成。 它存在可以提供帮助的Maven插件。 我们希望满足以下条件:
- 集成测试存储在目录src / it / java和
- 集成测试类名称要么以IT开头,要么以IT或ITCase结尾 ,
- 集成测试在Maven的构建生命周期阶段进行集成测试。
首先,Maven必须知道它必须在其测试类路径中包含目录src / it / java 。 在这里,Build Helper Maven插件可以提供帮助。 它将目录src / it / java添加到测试类路径。
< plugin > < groupId >org.codehaus.mojo</ groupId > < artifactId >build-helper-maven-plugin</ artifactId > < version >3.1.0</ version > < executions > < execution > < goals > < goal >add-test-source</ goal > < goal >add-test-resource</ goal > </ goals > < configuration > < sources > < source >src/it/java</ source > </ sources > < resources > < resource > < directory >src/it/resources</ directory > </ resource > </ resources > </ configuration > </ execution > </ executions > </ plugin >
上面的代码段必须插入到项目根pom中的<project> <build> <plugins>部分 。
Maven的构建生命周期包含一个称为集成测试的阶段。 在此阶段,我们要运行集成测试。 幸运的是,当在POM中进行设置时,Maven故障安全插件的目标集成测试会自动绑定到此阶段。 如果您希望在集成测试失败时构建失败,那么还必须将目标验证添加到POM中:
< plugin > < groupId >org.apache.maven.plugins</ groupId > < artifactId >maven-failsafe-plugin</ artifactId > < version >3.0.0-M4</ version > < configuration > < encoding >${project.build.sourceEncoding}</ encoding > </ configuration > < executions > < execution > < goals > < goal >integration-test</ goal > < goal >verify</ goal > </ goals > </ execution > </ executions > </ plugin >
同样,上述代码片段也必须插入到项目根pom中的<project> <build> <plugins>部分 。 然后,当Maven故障保护插件的类名称以IT开头或以IT或ITCase结尾时,它们会自动运行集成测试。
测试报告生成
我们想使用JaCoCo Maven插件生成测试报告。 它应该为单元测试和集成测试生成测试报告。 因此,该插件必须要准备两个分开的代理。 然后他们在测试运行期间生成报告。 Maven的构建生命周期包含自己的阶段,可以在测试阶段之前进行准备( 测试和集成测试 )。 测试阶段的准备阶段称为过程测试类 , 集成测试阶段的准备阶段称为pre-integration-test 。 当在POM中设置了目标prepare-agent和prepare-agent-integration时,JaCoCo会将其代理自动绑定到这些阶段。 但这还不够。 JaCoCo还必须创建一个报告,以便SonarQube可以读取报告以进行可视化。 因此,我们必须在POM中添加目标报告和报告集成 :
< plugin > < groupId >org.jacoco</ groupId > < artifactId >jacoco-maven-plugin</ artifactId > < version >0.8.5</ version > < executions > < execution > < goals > < goal >prepare-agent</ goal > < goal >prepare-agent-integration</ goal > < goal >report</ goal > < goal >report-integration</ goal > </ goals > </ execution > </ executions > </ plugin >
同样,它是<project> <build> <plugins>部分的一部分。
现在,我们可以运行目标mvn验证,并且我们的项目已构建为包含单元和集成测试,并生成两个测试报告。
SonarQube测试报告可视化
现在,我们想在SonarQube中可视化我们的测试报告。 因此,成功构建后,我们必须在我们的项目中运行Sonar Maven 3插件(命令mvn sonar:sonar )。 因此,Sonar Maven插件知道将报告上传到何处,我们必须在〜/ .m2 / setting.xml中配置SonarQube实例:
< profile > < id >sonar</ id > < activation > < activeByDefault >true</ activeByDefault > </ activation > < properties > <!-- Optional URL to server. Default value is http://localhost:9000 --> < sonar.host.url > http://localhost:9000 </ sonar.host.url > </ properties > </ profile >
在SonarQube仪表板中打开项目时,我们会看到总体测试覆盖率报告。
摘要
该博客描述了如果单元测试和集成测试分别运行,如何为Maven构建生成测试报告。 在GitHub上 ,我托管了一个示例项目,演示了所有配置步骤。 作为技术环境,我使用
- Maven 3.6.3
- Maven插件:
- Maven Surefire插件
- SonarQube 8.3.1
- Java 11
链接
- Jacoco Maven插件项目站点
- Maven故障安全插件项目站点
- 构建助手Maven插件项目站点
- SonarQube有关通用测试覆盖率的文档
- GitHub上的示例Maven项目
翻译自: https://www.javacodegeeks.com/2020/06/test-coverage-reports-for-maven-projects-in-sonarqube-8-3-x.html
SonarQube 8.3.x中的Maven项目的测试覆盖率报告相关推荐
- SonarQube中Maven项目的测试覆盖率报告
此文章描述了如果单元测试和集成测试分别运行,如何为Maven构建生成测试报告. SonarQube将所有测试报告合并为一份涵盖整体的测试报告.因此,如果您在Maven项目中将单元测试(由Maven S ...
- IDEA中创建maven项目后解决main文件夹下目录不全的问题
IDEA中创建maven项目后解决main文件夹下目录不全的问题 参考文章: (1)IDEA中创建maven项目后解决main文件夹下目录不全的问题 (2)https://www.cnblogs.co ...
- 在Eclipse中编译maven项目出的问题
在Eclipse中编译Maven项目,运行 jetty:run 指令的时候会出错,在 JRE选项卡中加入: -Dorg.mortbay.util.URI.charset=GBK -Xms512m -X ...
- Eclipse中导入Maven项目后没有run on server
场景 在Eclipse中导入Maven项目后,想要运行时,却没有run on server 解决 右击项目--properties--project facets--勾选Dynamic Web Mod ...
- 【MAVEN】如何在Eclipse中创建MAVEN项目
目录结构: contents structure [+] 1,Maven简介 2,Maven安装 2.1,下载Maven 2.2,配置环境变量 2.3,测试 3,Maven仓库 3.1,Maven仓库 ...
- idea中新建maven项目缺少src目录的根本解决方法(适合萌新 少走弯路)
idea中新建maven项目缺少src目录的根本解决方法(适合萌新 少走弯路) 参考了很多博客,基本都是让在setting下的runner 添加-DarchetypeCatalog=internal参 ...
- Eclipse中对maven项目进行打包
在Eclipse中对maven项目进行打包,发现三种方式: 第一种方法:cmd窗体中使用maven命令进行打包 (此方式环境变量必须配置maven环境) 1.选中项目右键 --> Show in ...
- jenkins中配置maven项目
文章目录 前言 一.全局工具配置 二.配置Publish Over SSH(提前在插件管理中安装Publish Over SSH插件) 三.git认证配置 四.项目配置 前言 记录jenkins中配置 ...
- idea中的Maven项目怎么配置Tomcat部署
idea中的Maven项目怎么配置Tomcat部署 1. 开篇简介 2. 开始部署 3. 总结 1. 开篇简介 嗨,大家好! 今天,我想给大家分享的是:如何在idea中的Maven项目怎么配置Tomc ...
最新文章
- 小巧的日志记录组件 - 开源研究系列文章
- 华为S5500T 存储巡检
- ZOJ 3829 Known Notation(贪心)
- 几种多数据库表update的方式测试
- Django用户注册、登录、注销(一)
- 让我们拭目以待的5z20
- 适合初学者的安卓开源项目_开源周初学者
- 学习拾遗--用RadioButtonList 或者DropDownList 进行动态赋值问题
- HDU 4651 Partition(整数拆分)
- windows之Apache服务器搭建
- selenium指定驱动路径
- unity html get post,使用C#开发HTTP服务器系列之实现Get和Post
- 2022张宇考研基础30讲 第十一讲 多元函数微分学
- C++ function
- 基于WKT标准的空间参考系字符串及prj文件生成样例
- L1, L2以及smooth L1 loss
- 一位Java工程师的阶段性工作总结
- 普及游戏:小型团队如何赢得大赛
- sql注入漏洞,应屏蔽SQL注入攻击
- 简述相关分析(Correlation)