11

如何使用 Maven 在以下位置运行黄瓜测试。

源文件夹“src/main/java”和“src/main/resources”包括在每个源文件夹中创建的包“com.testing.TestProject.login”中的步骤定义和功能文件。

我在 POM 文件中包含了插件和依赖项,但是当我运行 maven 阶段集成测试时,黄瓜测试没有被执行。

我是Maven的新手。请让我知道在 POM 文件中包含哪些内容以使用 Maven 运行黄瓜测试。

这是我的 POM 文件:

   <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.testing</groupId>
  <artifactId>MyMavenProject</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>MyMavenProject</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <cucumber-jvm.version>1.1.5</cucumber-jvm.version>
    <selenium.version>2.39.0</selenium.version>
    <junit.version>4.11</junit.version>
  </properties>

    <build>

    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <version>1.2.1</version>
            <executions>
                <execution>
                    <phase>integration-test</phase>
                    <goals>
                        <goal>java</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <executableDependency>
                    <groupId>info.cukes</groupId>
                    <artifactId>cucumber-core</artifactId>
                </executableDependency>
                <mainClass>cucumber.api.cli.Main</mainClass>
                <arguments>
                    <argument>--format</argument>
                    <argument>junit:target/cucumber-junit-report/allcukes.xml</argument>
                    <argument>--format</argument>
                    <argument>pretty</argument>
                    <argument>--format</argument>
                    <argument>html:target/cucumber-html-report</argument>
                    <argument>--tags</argument>
                    <argument>@login</argument>
                    <argument>--glue</argument>
                    <argument>com/</argument>
                    <argument>src/</argument>
                </arguments>
            </configuration>
            <dependencies>
                <dependency>
                    <groupId>info.cukes</groupId>
                    <artifactId>cucumber-core</artifactId>
                    <version>1.1.5</version>
                </dependency>
            </dependencies>
        </plugin>
    </plugins>
</build>  

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>${junit.version}</version>
      <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-java</artifactId>
        <version>${selenium.version}</version>
    </dependency>
    <dependency>
        <groupId>info.cukes</groupId>
        <artifactId>cucumber-picocontainer</artifactId>
        <version>${cucumber-jvm.version}</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>info.cukes</groupId>
        <artifactId>cucumber-junit</artifactId>
        <version>${cucumber-jvm.version}</version>
        <scope>test</scope>
    </dependency>
    <dependency>
    <groupId>org.testng</groupId>
    <artifactId>testng</artifactId>
    <version>6.8.7</version>
</dependency>
<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.16</version>
</dependency>
<dependency>
    <groupId>commons-logging</groupId>
    <artifactId>commons-logging</artifactId>
    <version>1.1.3</version>
</dependency>
</dependencies>
</project>

提前致谢。

4

3 回答 3

18

您的测试类需要以Test后缀结尾。

于 2015-07-29T07:54:18.133 回答
10

我从 Maven 运行 Cucumber JVM 测试的首选方法是通过提供一个RunCukesTest从 JUnit 触发 Cucumber 的类来通过 JUnit 桥接它们。我发现这比为 Maven 使用特定的 Cucumber 插件更容易且控制更多。此外,这更独立于构建工具。大多数构建工具都支持开箱即用的 JUnit,无需任何进一步的配置。直接从构建工具运行 cucumber 需要使用插件并对其进行配置。

通过 JUnit 运行 Cucumber,如下所示,不仅适用于 Maven,也适用于 Gradle。

但是,请注意,这会以与 JUnit 测试相同的方式运行 Cucumber 测试。这可能是也可能不是您想要的。出于测试执行性能的原因,您可能希望将单元/开发人员测试、集成/架构测试和验收/用户测试保持在单独的执行中。但是,即使您将它们分开,我还是建议您查看与测试自动化金字塔层正交的测试框架的选择。这意味着,您可以更改名称RunCukesTest,比如说,RunCukesIT或者您用于选择的任何命名方案,或者将它们放在不同的路径中。这更容易

一个典型的 RunCukesTest 类可能如下所示:

package com.testing;

import cucumber.api.CucumberOptions;
import cucumber.api.junit.Cucumber;
import org.junit.runner.RunWith;

@RunWith(Cucumber.class)
@CucumberOptions(
        features = "src/test/resources/features",
        glue = "com.testing"
)
public class RunCukesTest {
}

详细说明:

  • @RunWith(Cucumber.class)告诉 JUnit 不要用它的默认运行器运行这个测试类,而是用Cucumber它来运行 JUnit4 的测试运行器,它从 JUnit 中运行 Cucumber。
  • @CucumberOptions告诉Cucumber在哪里可以找到它的东西。主要的事情是:
    • features告诉Cucumber在哪里可以找到功能文件。
    • glue告诉Cucumber哪些包包含步骤定义。

请注意,上面的示例适用于用 Cucumber 编写的测试与您的包架构正交的情况。对于简单的项目,可以进行更简单的设置:将功能文件和步骤定义放在与 in 相同的目录/包中src/resources,并删除注释。RunCukesTestsrc/java@CucumberOptions

将 Cucumber 与 JUnit5 结合起来仍然有点棘手和麻烦。一旦我发现它实用,我将用 JUnit5 更新这个答案。

于 2016-11-11T19:56:50.300 回答
4

根据 Maven 标准,测试应该在src/test/java而不是在src/main/java. 你的 pom.xml 对我来说看起来不错。我怀疑如果您将测试和资源从文件夹导入maintest您的测试应该执行得很好。

于 2014-02-04T00:15:24.427 回答