如何使用不同配置运行两个Maven Surefire插件?

6
我有两个测试套件。其中一个可以并行运行,另一个必须按顺序运行。请参考以下定义。
我发现只有第二个运行。
我尝试定义了2个插件,但没有成功。
我尝试给它们不同的执行 ID,但也没有成功。
我试图将配置放在执行下面,但出现了错误,指出配置下的元素不被允许,例如“failIfNoSpecifiedTests”。
你有什么想法可以让这些套件以不同的配置运行 - 一个并行,另一个按顺序?
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.18.1</version>
    <executions>
        <execution>
            <id>SequentialTests</id>
        </execution>
    </executions>
    <configuration>
        <includes>
            <include>**/SequentialTests.java</include>
        </includes>
    </configuration>
</plugin>
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.18.1</version>
    <executions>
        <execution>
            <id>ParallelTests</id>
        </execution>
    </executions>
    <configuration>
        <includes>
            <include>**/ParallelTests.java</include>
        </includes>
        <threadCount>10</threadCount>
        <parallel>classes</parallel>
    </configuration>
</plugin>

顺序测试听起来像集成测试,而ParallelTests听起来像单元测试? - khmarbaise
两者都是单元测试。那些不设计并行运行的必须按顺序运行。 - AlikElzin-kilaka
很抱歉,如果它们无法并行运行,那么它们就不是单元测试... - khmarbaise
2个回答

1
你需要在构建的插件管理部分配置一个单独的surefire插件,并进行多个执行。就像下面这样:
   <build>
     <pluginManagement>
      <plugins>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-surefire-plugin</artifactId>
          <configuration>
            <! any common config-->
          </configuration>
          <!-- multiple executions-->
          <executions>
            <execution>
              <id>default-test</id>
              <configuration>
                <!-- skip default execution since we want to run tests in separate groups, remove this execution if not required for you -->
                <skip>true</skip>
              </configuration>
            </execution>
            <execution>
              <id>firstTestGroup</id>
              <configuration>
                <includes>
                  <include>**/*BlahTest</include>
                </includes>
              </configuration>
              <goals>
                <goal>test</goal>
              </goals>
            </execution>
            <execution>
              <id>secondTestGroup</id>
              <configuration>
                <excludes>
                  <exclude>**/*BlahTest</exclude>
                </excludes>
              </configuration>
              <goals>
                <goal>test</goal>
              </goals>
            </execution>
          </executions>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>

这个解决方案与@roiros的建议有何不同? - AlikElzin-kilaka
1
它更加明确并指定了放置位置 - 插件管理部分 - 并提供了一个具体的工作示例,显示需要跳过(或覆盖,如果您想要)的默认执行等。这对我使用failsafe-plugin(扩展surefire)以及其他插件都有效。您已经在评论中提到了之前@roiros的解决方案无法正常工作,我认为这可能会有所帮助。它现在还是不起作用吗? - Deepak

0
请将不同的配置放置在两个独立的执行节点下,而不是作为顶级元素。作为顶级元素时,它们会相互干扰,而在独立的执行节点下,它们可以“并排”存在。 例如:
<execution> 
  <id>SequentialTests</id>
  <configuration>...<configuration>
</execution>

<execution>
  <id>ParallelTests</id>
  <configuration>...<configuration>
</execution>

1
无法工作,所有配置子标签都被忽略了,比如<includes><failIfNoSpecifiedTests>等。甚至IDEA将配置子元素标记为红色,以表明它们未被接受。 - AlikElzin-kilaka

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接