【问题标题】:maven failsafe pluginmaven故障保护插件
【发布时间】:2013-01-31 04:46:00
【问题描述】:

我正在尝试使用 mvn 故障安全插件仅运行 selenium 测试。我创建了一个单独的配置文件来仅运行 selenium 测试,但 mvn 无法找到它们。我的项目结构看起来像

moduleA
  scr/main/...
  src/test/integration/java/...
  scr/test/unit/java/...    

moduleB
  scr/main/...
  src/test/integration/java/...
  scr/test/unit/java/...

moduleC (only for selenium tests)
  scr/main/java/com/selenium/A.java
  src/test/java/...

由于我在模块 A 和 B 中有单元测试和集成测试的新目录。我在 pom.xml (listingB) 中定义了以下内容,让 Maven 了解其他测试目录。到目前为止一切都很好,但是当我在 moduleC 中添加硒测试并且我只想运行硒时,它不运行硒测试。我创建了一个新的配置文件(listingA)来运行硒测试。任何帮助表示赞赏。

listingA:

<profiles>
  <profile>
    <id>selenium</id>
    <build>
      <plugins>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-failsafe-plugin</artifactId>
          <executions>
            <execution>
              <id>verify</id>
              <goals>
                <goal>integration-test</goal>
                <goal>verify</goal>
              </goals>
            </execution>
          </executions>
          <configuration>
            <includes>
              <include>**/selenium/*.java</include>
            </includes>
          </configuration>
        </plugin>

        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-surefire-plugin</artifactId>
          <configuration>
            <skip>true</skip>
          </configuration>
        </plugin>
      </plugins>
    </build>
  </profile>
</profiles>

listinB:

<plugins>
  <plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>build-helper-maven-plugin</artifactId>
    <version>1.7</version>
    <executions>
      <execution>
        <id>add-test-source</id>
        <phase>generate-test-sources</phase>
        <goals>
          <goal>add-test-source</goal>
        </goals>
        <configuration>
          <sources>
            <source>${basedir}/src/test/unit/java</source>
            <source>${basedir}/src/test/integration/java</source>
            <source>${basedir}/src/test/common/java</source>
          </sources>
        </configuration>
      </execution>
      <execution>
        <id>add-test-resource</id>
        <phase>generate-test-resources</phase>
        <goals>
          <goal>add-test-resource</goal>
        </goals>
        <configuration>
          <resources>
            <resource>
              <directory>${basedir}/src/test/integration/resources</directory>
              <directory>${basedir}/src/test/unit/resources</directory>
              <directory>${basedir}/src/test/common/resources</directory>
            </resource>
          </resources>
        </configuration>
      </execution>
    </executions>
  </plugin>
</plugins>

【问题讨论】:

  • 请告诉我们您为尝试运行 Selenium 测试而执行的 Maven 命令吗?

标签: maven selenium maven-failsafe-plugin


【解决方案1】:

我首先想到的是为什么要使用不同的文件夹来分离单元测试和集成测试,因为在 Maven 中,单元测试和集成测试之间的分离是通过命名约定完成的。

单元测试必须命名为

**/Test*.java
**/*Test.java
**/*TestCase.java

集成测试必须命名为:

**/IT*.java
**/*IT.java
**/*ITCase.java

这意味着你可以毫无问题地将集成测试和单元测试放到 src/test/java 的同一个文件夹中。集成测试的执行不受此影响。

如果你愿意的话

mvn clean package

只会运行单元测试。如果您还需要运行集成测试,您可以简单地使用:

mvn verify

如果您不想跳过单元测试,可以使用以下方法:

mvn -DskipTests=true 验证

对于您创建的单独的 selenium 模块,最好的解决方案是将集成测试放入具有适当命名约定的常用文件夹 src/test/java

您可能遇到的问题是,如果您的集成测试需要一些特殊资源,您可能会将这些集成测试移到单独的模块中,仅包含集成测试。

【讨论】:

  • 我已将 selenium 测试放在单独模块的常用文件夹 src/test/java 中,但问题是当我使用新配置文件运行时 maven 无法识别此文件夹。它不会在这个新模块中运行任何测试。
  • 你不应该为这些事情使用配置文件,因为 maven 有一个用于集成测试的生命周期阶段。
【解决方案2】:
  1. 如果您的 Selenium 测试位于 src/test/java 文件夹中,请从 listingA

  2. maven-failsafe-plugin 的配置中删除 &lt;includes&gt; 参数
  3. 将您的 Selenium 测试类命名为:

      **/IT*.java
      **/*IT.java
      **/*ITCase.java
    

    (正如 khmarbaise 所建议的)

  4. Failsafe 使用 Surefire 运行集成测试,因此不要命名您的 Selenium 测试类,例如:

    **/Test*.java
    **/*Test.java
    **/*TestCase.java
    

    因为这将使它们在 test fase 中运行,而不是按您的计划在 integration-test fase 中运行。

我有一个和你类似的配置,它可以工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-23
    • 2011-06-26
    • 2012-05-08
    • 2014-08-08
    相关资源
    最近更新 更多