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