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开头或以TestTestCase结尾

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

集成测试运行配置必须手动完成。 它存在可以提供帮助的Maven插件。 我们希望满足以下条件:

  • 集成测试存储在目录src / it / java
  • 集成测试类名称要么以IT开头,要么以ITITCase结尾
  • 集成测试在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开头或以ITITCase结尾时,它们会自动运行集成测试

测试报告生成

我们想使用JaCoCo Maven插件生成测试报告。 它应该为单元测试和集成测试生成测试报告。 因此,该插件必须要准备两个分开的代理。 然后他们在测试运行期间生成报告。 Maven的构建生命周期包含自己的阶段,可以在测试阶段之前进行准备( 测试集成测试 )。 测试阶段的准备阶段称为过程测试类集成测试阶段的准备阶段称为pre-integration-test 。 当在POM中设置了目标prepare-agentprepare-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

链接

  1. Jacoco Maven插件项目站点
  2. Maven故障安全插件项目站点
  3. 构建助手Maven插件项目站点
  4. SonarQube有关通用测试覆盖率的文档
  5. GitHub上的示例Maven项目

翻译自: https://www.javacodegeeks.com/2020/06/test-coverage-reports-for-maven-projects-in-sonarqube-8-3-x.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/331209.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

单例模式懒汉、饿汉和登记

转载自 JAVA设计模式之单例模式本文继续介绍23种设计模式系列之单例模式。 概念&#xff1a;  java中单例模式是一种常见的设计模式&#xff0c;单例模式的写法有好几种&#xff0c;这里主要介绍三种&#xff1a;懒汉式单例、饿汉式单例、登记式单例。  单例模式有以下特点…

量角器中Selenium定位器的完整指南(示例)

在测试网站的功能时&#xff0c;特别是Web元素&#xff08;例如单选按钮&#xff0c;文本框&#xff0c;下拉列表等&#xff09;&#xff0c;您需要确保能够访问这些元素。 Selenium定位器正是出于这个目的&#xff0c;通过使用此命令&#xff0c;我们可以识别这些Web元素DOM&a…

MySQL的自然联结+外部联结(左外连接,右外连接)+内部联结

【0】README0.1&#xff09;本文旨在review MySQL的自然联结外部联结&#xff08;左外连接&#xff0c;右外连接&#xff09;内部联结 的相关知识&#xff1b;【1】自然联结1&#xff09;自然联结定义&#xff1a;无论何时对表进行联结&#xff0c;应该至少有一个列出现不止一个…

MySQL 添加列+修改列+删除列

【0】REAMDE 0.1&#xff09;本文部分文字描述转自 http://blog.163.com/zhangjie_0303/blog/static/99082706201191911653778/ 0.2&#xff09;本文旨在review mysql 对列的相关操作&#xff1a;如添加&#xff0c;修改&#xff0c;删除以及重命名表名等操作&#xff1b; 【1】…

compose应用_带有PostgreSQLDocker Compose for Spring Boot应用程序

compose应用在此博客文章中&#xff0c;您将学习如何使用PostgreSQL配置Spring Boot应用程序以与Docker Compose一起运行。 这篇博客文章涵盖&#xff1a; Spring Boot应用程序Dockerfile配置&#xff0c;在依赖项和资源之间进行了清晰的分离 用于通过PostgreSQL运行应用程序…

单例模式面试题

转载自 单例模式面试题&#xff08;特点、理解&#xff09; (1)单例模式特点&#xff08;什么是单例模式&#xff09;&#xff1f;  a.单例类只能有一个实例。  b.单例类必须自己创建自己的唯一实例。  c.单例类必须给所有其他对象提供这一实例。 (2)单例模式的作用&#x…

MySQL的source命令不加分号和delimiter的使用

【0】README 0.1&#xff09;本文旨在 review source 命令&#xff0c; 这一直是我的痛&#xff0c;为什么一直导入 sql 文件不成功&#xff0c;一直没有写 blog 吧他 记录下来&#xff08;事实上&#xff0c;也间接证明我就是个小白&#xff09;&#xff1b; 0.2&#xff09…

selenium自动化测试_维持Selenium测试自动化的完美方法

selenium自动化测试毫无疑问&#xff0c; 自动浏览器测试已改变了软件开发的工作方式。 如果不是Selenium&#xff0c;我们将无法像我们一样使用各种各样的无错误的Web应用程序。 但是有时&#xff0c;甚至IT部门也误解了自动化一词。 大多数人认为计算机将为他们完成所有测试…

单例模式的优与劣

转载自 大话设计模式(四)单例模式的优与劣前言首先来明确一个问题&#xff0c;那就是在某些情况下&#xff0c;有些对象&#xff0c;我们只需要一个就可以了&#xff0c;比如&#xff0c;一台计算机上可以连好几个打印机&#xff0c;但是这个计算机上的打印程序只能有一个&…

MySQL存储过程+游标+触发器

【0】README0.1&#xff09;本文旨在 arrange mysql 存储过程及如何在存储中使用游标 的相关知识&#xff1b;0.2&#xff09;delimieter的用法&#xff1a;参见 http://blog.csdn.net/pacosonswjtu/article/details/51407756&#xff1b;【1】存储过程基础1&#xff09;intro…

java迭代器退出迭代_使用Java迭代器修改数据时要小心

java迭代器退出迭代随着本学期的结束&#xff0c;我想我会分享一个关于如何非常熟悉Java迭代器的小故事。 现实世界语境 就上下文而言&#xff0c;我开设了第二年软件组件课程&#xff0c;这是尝试进入该专业的学生的最后障碍。 当然&#xff0c;这门课程对学生来说压力很大&a…

pojo 带参构造函数_带有Java Pojo作为输入输出示例的AWS Lambda函数

pojo 带参构造函数在上一个教程中&#xff0c;我们看到了如何使用Java创建AWS Lambda函数&#xff0c;我们传递了String作为输入&#xff0c;还返回了String作为Output。如果您是第一次创建lambda函数&#xff0c;我建议先阅读该教程。 在本教程中&#xff0c;我们将看到如何传…

MySQL检索数据(过滤+通配符+正则表达式)

【0】README0.1&#xff09;本文部分文字描述转自“MySQL 必知必会”&#xff0c;旨在review “MySQL的基础知识”&#xff1b;【1】检索数据1&#xff09;检索单个列&#xff1a;select a_name from table_name;2&#xff09;检索多个列&#xff1a;select a_name,b_name from…

创建者模式

转载自 设计模式之创建者模式创建者模式又叫建造者模式&#xff0c;是将一个复杂的对象的构建与它的表示分离&#xff0c;使得同样的构建过程可以创建不同的表示。创建者模式隐藏了复杂对象的创建过程&#xff0c;它把复杂对象的创建过程加以抽象&#xff0c;通过子类继承或者重…

buildpack_使用Buildpack容器化Spring Boot应用程序

buildpack在本文中&#xff0c;我们将看到如何使用Buildpacks容器化Spring Boot应用程序。 在先前的一篇文章中&#xff0c;我讨论了Jib 。 Jib允许我们在不使用Dockerfile的情况下将任何Java应用程序构建为Docker映像。 现在&#xff0c;从Spring Boot 2.3开始&#xff0c;我们…

MySQL创建字段+数据处理函数+汇总数据(聚集函数)+分组数据

【0】README0.1&#xff09;本文部分文字描述转自“MySQL 必知必会”&#xff0c;旨在review“MySQL创建字段数据处理函数汇总数据&#xff08;聚集函数&#xff09;分组数据” 的基础知识&#xff1b;【1】创建计算字段1&#xff09;problemsolution1.1&#xff09;problem&am…

apache.camel_Apache Camel 3.2 – Camel的无反射配置

apache.camel在Apache Camel项目中&#xff0c;我们正在努力开发下一个即将发布的Apache Camel 3.2.0版本。 我们在Camel 3中努力研究的问题之一就是使其变得更小&#xff0c;更快。 其中一个方面是配置管理。 您可以按照12要素原则以多种方式完全配置Camel&#xff0c;以使配…

MySQL数据检索+查询+全文本搜索

【0】README0.1&#xff09;本文部分文字描述转自“MySQL 必知必会”&#xff0c;旨在review“MySQL数据检索查询全文本搜索” 的基础知识&#xff1b;【1】使用子查询1&#xff09;查询定义&#xff1a;任何sql 语句都是查询。但此术语一般指 select语句&#xff1b;SQL 还允许…

selenium自动化测试_49自动化测试中最常见的Selenium异常

selenium自动化测试开发人员将始终在编写代码时牢记不同的场景&#xff0c;但是在某些情况下&#xff0c;实现可能无法按预期工作。 相同的原则也适用于测试代码&#xff0c;该代码主要用于测试现有产品的功能&#xff0c;发现bug并确保产品100&#xff05;不受bug影响。 正确…

MySQL的CRUD操作+使用视图

【0】README0.1&#xff09;本文部分文字描述转自“MySQL 必知必会”&#xff0c;旨在review“MySQL数据检索查询全文本搜索” 的基础知识&#xff1b;【1】插入数据1&#xff09;insert是用来插入&#xff08;或添加&#xff09;行到数据库表的。插入可以用以下几种方式使用&a…