1

我正在尝试使用 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)来运行硒测试。任何帮助表示赞赏。

清单A:

<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>

清单B:

<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>
4

2 回答 2

3

我首先想到的是为什么要通过使用不同的文件夹来分离单元测试和集成测试,因为在 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中。

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

于 2013-01-31T08:49:58.957 回答
0
  1. 如果您的 Selenium 测试在文件夹中,请从列表 A 的配置中删除src/test/java参数<includes>maven-failsafe-plugin

  2. 将您的 Selenium 测试类命名为:

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

    (正如khmarbaise所建议的那样)

  3. Failsafe 使用 Surefire 运行集成测试,因此不要将 Selenium 测试类命名为:

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

    因为这将使它们在测试阶段运行,而不是按照您的计划在集成测试阶段运行。

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

于 2013-02-06T16:44:50.627 回答