我有一个应用程序包含 Cucumber 和 JBehave 测试,我希望每次都能够选择运行其中一个,我可以通过显式 Maven 目标使用 JBehave 来做到这一点,但问题是 Cucumber 在每次构建或测试时隐式运行,有什么选择可以停止并运行它吗?
您可以通过将 Maven Surefire 插件配置为默认构建的一部分或/和通过配置文件来实现此目的。
如果您的 Maven 构建部分,默认情况下您可以跳过 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 配置文件,以使用 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 答案 上的建议,并使用 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
配置文件。
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.2.5</version>
<dependencies>
<dependency>
<groupId>org.apache.maven.surefire</groupId>
<artifactId>surefire-junit47</artifactId>
<version>3.2.5</version>
</dependency>
</dependencies>
<configuration>
<includes>
<include>TestRunner.java</include>
</includes>
</configuration>
</plugin>
<plugin>
<groupId>net.masterthought</groupId>
<artifactId>maven-cucumber-reporting</artifactId>
<version>5.7.5</version>
<executions>
<execution>
<id>execution</id>
<phase>verify</phase>
<goals>
<goal>generate</goal>
</goals>
<configuration>
<projectName>ProjectName</projectName>
<outputDirectory>CucumberReport</outputDirectory>
<inputDirectory>target</inputDirectory>
<jsonFiles>
<param>**/*.json</param>
</jsonFiles>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
在 pom.xml 文件中更新此内容。还包括您的 TestRunner.xml 文件。之后在终端中执行以下代码
mvn 全新安装
它将执行 TestRunner.xml 中包含的所有 Cucumber 测试并自动生成 Cucumber 报告。