在项目生命周期中,非常普遍的需求是设置集成测试。

幸运的是,Maven具有针对此确切方案的内置支持,具有默认构建生命周期的以下阶段(来自Maven 文档 ):

  • 集成前测试执行集成测试之前所需的操作。 这可能涉及诸如设置所需环境的事情。
  • 集成测试如有必要,将程序包处理并部署到可以运行集成测试的环境中。
  • 集成测试后执行集成测试后执行所需的操作。 这可能包括清理环境。

首先,配置了maven-surefire-plugin ,以便从标准构建生命周期中排除集成测试

<plugin><groupId>org.apache.maven.plugins<groupId><artifactId>maven-surefire-plugin<artifactId><version>2.10<version><configuration><excludes><exclude>***IntegrationTest.java<exclude><excludes><configuration><plugin>

排除是通过蚂蚁风格的路径表达式完成的,因此所有集成测试都必须遵循此模式,并以“ IntegrationTest.java ”结尾。

接下来,使用cargo-maven2-plugin ,因为Cargo提供了对嵌入式Web服务器的顶级支持。 当然,如果服务器环境需要特定的配置,货运也知道如何从已归档的软件包中构造服务器以及如何部署到外部服务器。

<plugin><groupId>org.codehaus.cargo<groupId><artifactId>cargo-maven2-plugin<artifactId><version>1.1.3<version><configuration><wait>true<wait><container><containerId>jetty7x<containerId><type>embedded<type><container><configuration><properties><cargo.servlet.port>8080<cargo.servlet.port><properties><configuration><configuration><plugin>

定义了一个嵌入式Jetty 7 Web服务器,侦听端口8080。请注意,将等待标记设置为true –这是因为对于较新版本的货物(1.1.0以上),该标记的默认值已更改为由于此错误 ,从truefalse 。 我们希望能够通过简单地运行mvn cargo:start来启动项目,尤其是在开发阶段,因此该标志应该处于活动状态。 但是,在运行集成测试时,我们希望服务器启动,先运行测试再停止,这就是为什么该标志以后会被覆盖的原因。

为了使 maven阶段生成可部署的war文件,项目的打包必须为: <packaging> war </ packaging>

接下来, 创建一个新的集成 Maven配置文件 ,以在该配置文件处于活动状态时才允许运行集成测试,而不是将其作为标准构建生命周期的一部分。

<profiles><profile><id>integration<id><build><plugins>...<plugins><build><profile><profiles>

该配置文件将包含所有其余配置。

现在,Jetty服务器已配置为在集成前测试阶段启动 ,并在集成后 测试阶段停止

<plugin><groupId>org.codehaus.cargo<groupId><artifactId>cargo-maven2-plugin<artifactId><configuration><wait>false<wait><configuration><executions><execution><id>start-server<id><phase>pre-integration-test<phase><goals><goal>start<goal><goals><execution><execution><id>stop-server<id><phase>post-integration-test<phase><goals><goal>stop<goal><goals><execution><executions><plugin>

这样可以确保在集成测试阶段之前和之后执行cargo:start目标和cargo:stop目标。 请注意,因为有两个单独的执行定义,所以两个中都必须存在id元素(并且元素ID有所不同),以便Maven可以接受配置。

接下来,需要在集成配置文件中覆盖maven-surefire-plugin配置,以便现在将包含并运行默认生命周期中排除的集成测试:

<plugins><plugin><groupId>org.apache.maven.plugins<groupId><artifactId>maven-surefire-plugin<artifactId><executions><execution><phase>integration-test<phase><goals><goal>test<goal><goals><configuration><excludes><exclude>none<exclude><excludes><includes><include>***IntegrationTest.java<include><includes><configuration><execution><executions><plugin><plugins>

有几件事值得注意:

1. maven-surefire-plugin测试目标是在集成测试阶段执行的; 至此,Jetty已经开始部署项目,因此集成测试应该没有问题。

2.现在,集成测试包含在执行中。 为了实现这一点,排除项也被覆盖-这是因为Maven处理配置文件中的覆盖插件配置的方式。 基本配置没有被完全覆盖,而是在配置文件中增加了新的配置元素。 因此,最初排除集成测试的原始<excludes>配置仍然存在于配置文件中,并且需要被覆盖,否则它将与<includes>配置冲突并且测试仍然不会跑。

3.请注意,由于只有一个<execution>元素,因此不需要定义id

现在,整个过程可以运行:

mvn clean install -Pintegration

结论

Maven的分步配置涵盖了设置集成过程的整个过程,这是项目生命周期的一部分。

通常将此设置为在持续集成环境中运行,最好在每次提交之后运行。 如果CI服务器已经具有运行和使用端口的服务器,则货物配置将必须处理该情况,我将在以后的文章中介绍。

参考: 如何在baeldung博客上使用我们的JCG合作伙伴 Eugen Paraschiv 的Maven Cargo插件设置集成测试 。

翻译自: https://www.javacodegeeks.com/2012/09/maven-cargo-plugin-for-integration.html

用于集成测试的Maven Cargo插件相关推荐

  1. cargo maven_用于集成测试的Maven Cargo插件

    cargo maven 在项目生命周期中,非常普遍的需求是设置集成测试. 幸运的是,Maven在默认构建生命周期的以下阶段(来自Maven 文档 )具有对这一确切方案的内置支持: 集成前测试 : 执行 ...

  2. cargo maven_与Maven 3,Failsafe和Cargo插件的集成测试

    cargo maven 开箱即用,可以在Maven中进行单元测试. 因此,它也经常用于集成测试. 这样做的主要缺点是集成测试可能需要花费更多的时间来执行,并且因为没有人喜欢每次构建都要等待很长时间–只 ...

  3. 与Maven 3,Failsafe和Cargo插件的集成测试

    开箱即用,可以在Maven中进行单元测试. 因此,它也经常用于集成测试. 这样做的主要缺点是集成测试可能需要花费更多的时间来执行,并且因为没有人喜欢每次构建都要等待很长时间–使用-Dmaven.tes ...

  4. maven常用插件配置

    常用插件配置详解 Java代码    <!-- 全局属性配置 --> <properties> <project.build.name>tools</proj ...

  5. maven 版本号插件_测试Maven版本插件自动递增版本号

    maven 版本号插件 抽象 Maven版本插件是一个非常强大的工具,我在很大程度上依赖于它来协调软件版本. 通常,软件发行版本号遵循简单的1.0.0.0-SNAPSHOT格式. 但是最近我需要在版本 ...

  6. 构建maven项目插件_如何构建一个Maven插件

    构建maven项目插件 使用Okta的身份管理平台轻松部署您的应用程序 使用Okta的API在几分钟之内即可对任何应用程序中的用户进行身份验证,管理和保护. 今天尝试Okta. 由于其插件生态系统的普 ...

  7. 测试Maven版本插件自动递增版本号

    抽象 Maven版本插件是一个非常强大的工具,我在很大程度上依赖于它来协调软件版本. 通常,软件发行版本号遵循简单的1.0.0.0-SNAPSHOT格式. 但是最近我需要在版本号中添加限定符-类似于1 ...

  8. maven插件依赖_当Maven依赖插件位于

    maven插件依赖 问题: 我们进行了一个集成测试,该测试创建了一个Spring ClassPathXmlApplicationContext ,同时这样做导致NoSuchMethodError爆炸. ...

  9. 当Maven依赖插件位于

    问题: 我们进行了一个集成测试,该测试创建了一个Spring ClassPathXmlApplicationContext ,同时这样做导致NoSuchMethodError爆炸. 事实证明,我们对S ...

最新文章

  1. 【 C 】对指针表达式的个人总结与思考
  2. tensorflow中的placeholder()
  3. nginx 直接在配置文章中设置日志分割
  4. 从链接中获取文件名及扩展名
  5. 跳转点算法_跳转搜索算法介绍
  6. linux 查看真实路径-软连接
  7. 重要数据 | 数据分类和分级概念解析
  8. dblink连接远程mysql_MySQL中使用federated 实现dblink 远程表访问
  9. mysql查询男生基本情况_MySQL(一)基本查询
  10. 【ME909】华为ME909 4G LTE模块在树莓派下通过minicom进行发送短信演示
  11. Ubuntu Server上如何安装Gi
  12. PIC 1508 TIM1的定时器门控的理解
  13. 虚拟人在虚拟现实中应用的技术思考与研究
  14. Centos 7iso百度网盘下载
  15. matlab典型环节性能仿真,实验一典型环节的matlab仿真
  16. 前22年的Loser,后4年和自己赛跑的人 | 最惨前端面经
  17. 操作系统上机随笔《实验三》
  18. sendmail安装
  19. STM32 标准库3.5修改默认外部8M晶振为16M晶振
  20. 研究生考试 之 计算机网络第七版(谢希仁) 第一章 课后答案

热门文章

  1. pythondocx模板_使用python-docx-template修改word文档
  2. rabbitmq-消息追踪rabbitmq_tracing
  3. 官网下载mysql实例数据库
  4. jvm(10)-早期(编译期)优化
  5. AVL树的单双旋转解析
  6. Spring boot(六):如何优雅的使用mybatis
  7. lucene 源码分析_Lucene分析过程指南
  8. jax-ws和jax-rs_带有JAX-RS和PrimeFaces的RESTful图表
  9. 余数运算符在Java中用于Doubles
  10. consul宕机配置丢失_简单的配置死机