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

问题描述 投票:0回答:2

我有一个应用程序包含 Cucumber 和 JBehave 测试,我希望每次都能够选择运行其中一个,我可以通过显式 Maven 目标使用 JBehave 来做到这一点,但问题是 Cucumber 在每次构建或测试时隐式运行,有什么选择可以停止并运行它吗?

maven cucumber cucumber-jvm jbehave
2个回答
3
投票

您可以通过将 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
配置文件。


0
投票
<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 报告。

© www.soinside.com 2019 - 2024. All rights reserved.