如果在maven Surefire插件中有参数,请跳过E2E测试

时间:2016-01-25 23:10:32

标签: maven pom.xml maven-surefire-plugin

我似乎无法在此找到任何内容,但我很好奇我是否可以在运行时传递参数以跳过我们所有项目的E2E测试。

无论如何,我在下面的pom示例中做了类似隔离排除块的操作吗?

<plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-surefire-plugin</artifactId>
   <configuration>
      <argLine>${argLine}</argLine>
      <excludes>

         <exclude unless="${skip.E2E.tests}> **/*E2E*.java</exclude>

         <exclude>**/IT*.java</exclude>
      </excludes>
   </configuration>
</plugin>

然后我可以致电mvn clean install -Dskip.E2E.tests=true。有人见过这样的事吗?

我想我可以做点像......

<exclude>${name.of.tests.to.exclude}</exclude>

然后是mvn clean install -Dname.of.tests.to.exclude=**/*E2E*.java但是我希望得到一个简单的真或假参数来设置而不是这个以防我想跳过的一些测试不包括E2E而我需要将它们添加到列表中。

2 个答案:

答案 0 :(得分:2)

很难从您正在展示的pom片段中分辨出来,但看起来您正在使用surefire进行单位和e2e测试。相反,您应该考虑使用failsafe插件来获取e2e。

一个好处是e2e测试将在不同的阶段运行,因此您可以获得默认查找的行为。它们在项目构建的验证阶段运行。因此,您可以运行mvn test来仅运行单元测试。

您可以将项目配置为使用故障安全,如下所示:

<project>
  [...]
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-failsafe-plugin</artifactId>
        <version>2.19.1</version>
        <executions>
          <execution>
            <goals>
              <goal>integration-test</goal>
              <goal>verify</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
  [...]
</project>

使用:mvn verify

运行它们

运行mvn install -DskipITs将仅跳过集成测试,同时仍在运行单元测试。

运行mvn install -DskipTests将跳过集成和单元测试。

答案 1 :(得分:1)

如果要实现这样的条件,可以使用Maven profiles并进行两种配置:

  • 默认的一个作为正常构建的一部分,而不是跳过E2E测试
  • 跳过他们的个人资料

然后可以在财产或直接激活时激活配置文件。

作为一个例子,你可以:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
                <argLine>${argLine}</argLine>
                <excludes>
                    <exclude>**/IT*.java</exclude>
                </excludes>
            </configuration>
        </plugin>
    </plugins>
</build>

<profiles>
    <profile>
        <id>skip.E2E.tests</id>
        <activation>
            <property>
                <name>skip.E2E.tests</name>
                <value>true</value>
            </property>
        </activation>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <configuration>
                        <argLine>${argLine}</argLine>
                        <excludes>
                            <exclude>**/*E2E*.java</exclude>
                            <exclude>**/IT*.java</exclude>
                        </excludes>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </profile>
</profiles>

注意:默认的Maven Surefire插件适用于普通版本,然后适用于配置文件。

运行:

mvn clean install

不会激活配置文件,您的构建将跳过测试。在跑步时:

mvn clean install -Pskip.E2E.tests

mvn clean install -Dskip.E2E.tests=true

将激活配置文件,并因此将排除添加到测试执行中。

所以这正是你想要的场景,我猜想。

另外,正如@AndrewEisenberg在另一个答案中所建议的那样,您可以将Maven Failsafe Plugin用于不同类型的测试。主要的两个不同之处在于:它具有不同的相位绑定,当它失败时,它以更安全的方式完成。从官方文件中可以看出:

  

如果使用Surefire插件运行测试,那么当测试失败时,构建将在集成测试阶段停止,并且集成测试环境不会被正确拆除。

     

在构建生命周期的集成测试和验证阶段使用Failsafe插件来执行应用程序的集成测试。在集成测试阶段,Failsafe插件不会使构建失败,从而使后集成测试阶段能够执行