如何使用显式Maven目标运行Cucumber测试?

时间:2016-01-03 12:28:28

标签: maven cucumber cucumber-jvm jbehave

我有一个包含Cucumber和JBehave测试的应用程序,我希望能够每次都可以选择运行其中一个,我可以通过显式Maven目标使用JBehave来做到这一点,但问题是Cucumber隐含地运行每个构建或者测试,无论如何都要停下来运行它吗?

1 个答案:

答案 0 :(得分:3)

您可以通过将Maven Surefire插件配置为默认构建的一部分或/和通过配置文件来实现此目的。

如果您的Maven构建部分,您可以默认skip Cucumber测试(假设它们具有相同的后缀或属于同一个包,或者您可以安排它们以满足这两个中的任何一个规定 - ):

<project>
  [...]
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>2.19.1</version>
        <configuration>
          <excludes>
             <!-- classes that include the name CucumberTest, as an example -->
             <exclude>**/*CucumberTest*.java</exclude>
             <!-- classes in a package whose last segment is named cucumber, as an example -->
             <exclude>**/cucumber/*.java</exclude>
          </excludes>
        </configuration>
      </plugin>
    </plugins>
  </build>
  [...]
</project>

因此,Maven默认情况下(作为默认构建的一部分)将跳过您的Cucumber测试。

然后,您可以配置Maven Profile以使用Maven Surefire插件配置的对应方式专门运行Cucumber测试,如下所示:

<project>
  [...]
  <profiles>
     <profile>
          <id>cucumber-tests</id>
          <build>
            <plugins>
              <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.19.1</version>
                <configuration>
                    <excludes>
                        <exclude>none</exclude>
                    </excludes>
                    <includes>
                        <!-- Include your Cucumber tests, as an example -->
                        <include>**/*CucumberTest.java</include>
                    </includes>
                </configuration>
              </plugin>
            </plugins>
          </build>
    <profile>
  </profiles>
  [...]
</project>

然后运行mvn clean install -Pcucumber-tests将运行您的Cucumber测试。

这种方法可以在两种情况下(默认或黄瓜测试构建)为您提供更大的配置灵活性,您可以根据需要交换行为。

或者,对于更简单(但不太灵活)的方法,您可以按照另一个SO answer的建议并使用Maven属性打开/关闭切换黄瓜测试,如下所示:

<properties>
  <exclude.cucumber.tests>nothing-to-exclude</exclude.cucumber.tests>
</properties>

<profiles>
  <profile>
    <id>exclude-cucumber</id>
    <properties>
      <exclude.cucumber.tests>**/*Cucumber*.java</exclude.cucumber.tests>
    </properties>
  </profile>
</profiles>

<build>
    <plugins>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-surefire-plugin</artifactId>
          <configuration>
            <excludes>
             <exclude>${exclude.cucumber.tests}</exclude>
            </excludes>
          </configuration>
        </plugin>
    </plugins>
</build>

使用上面的配置,默认情况下,Maven将执行Cucumber测试并在执行mvn clean install -Pexclude-cucumber时跳过它们(配置文件将更改exclude.cucumber.tests属性的内容,并因此更改Surefire插件过滤器)。您当然也可以交换行为并改为使用include-cucumber个人资料。