用于集成测试的Maven Cargo插件

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

幸运的是,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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值