gradle Cucumber中的TestRunner不运行我的功能文件

tjrkku2a  于 2023-01-05  发布在  其他
关注(0)|答案(1)|浏览(175)

我一直在尝试使用TestRunner运行我的特性文件,但它失败了。当我右键单击TestRunner -〉Run As JUnit时,什么都没有发生,它只显示Finished。Console选项卡没有消息,JUnit选项卡没有测试运行。它只显示“在X秒后完成”。
I attached my package structure for you to check.
我正在使用Gradle和Eclipse IDE
下面是我的TestRunner类:

package runners;

import org.junit.runner.RunWith;
import io.cucumber.junit.*;
    
@RunWith(Cucumber.class)
@CucumberOptions(
        features = "src/test/java/feature",
        glue = {"stepDefinition"},
        tags = "@Login",
    )

public class TestRunner {
    
}

下面是我步骤定义代码:

package stepDefinition;

import org.openqa.selenium.WebDriver;

import cucumber.TestContext;
import io.cucumber.java.en.*;
import managers.FileReaderManager;
import dataProvider.ConfigFileReader;

public class CommonStep {
    
    private WebDriver driver;
    private TestContext testContext;
    
    public CommonStep (ConfigFileReader configFile, TestContext testContext) {
        
        this.testContext = testContext;
        this.driver = testContext.getWebDriverManager().getDriver();
    }
    
    @Given("the user navigates to Login Page {string}")
    public void TheUserIsInLoginPage(String url) throws Throwable {
        
        driver.get(FileReaderManager.getInstance().getConfigReader().getApplicationUrl());
        testContext.getPageObjectManager().getBasePage().waitForPageToLoad(30);;
        
        Thread.sleep(5000);
    }
}

我错过什么了吗?谢谢你的帮助!
我试着把我的特性文件放在src/test/resources文件夹下,并更改了我的TestRunner features =“src/test/resources/feature”,但仍然没有运气。我得到的输出与原始问题相同。

moiiocjp

moiiocjp1#

我认为您的问题出在您的测试运行器类使用的JUnit版本上。请尝试使用JUnit 4执行您的TestRunner.java。为此,请打开您的测试运行器类的Run Configurations上下文菜单,然后从下拉菜单中选择JUnit 4。

您正在使用@CucumberOptions这一事实告诉我您正在使用JUnit 4 Cucumber配置。这就是为什么当您尝试将测试作为JUnit测试运行时会失败,但当您将其作为Cucumber Feature运行时则工作正常。基本上,您正在将JUnit排除在外。
如果您安装了JUnit 5(Jupiter),则通常会默认使用此版本来运行测试。Cucumber与JUnit 4和5的配置实际上并不兼容。如果您想使用JUnit 5,我建议您按照这些instructions配置项目。我必须澄清,链接的示例将测试作为Maven测试而不是JUnit测试运行,但确实使用了JUnit 5平台。

    • 编辑**:

这里简要介绍一下如何使用JUnit 5将项目转换为Cucumber。
您的runner、步骤定义和特性文件必须在一个公共包下。对于我的示例项目,我创建了com.example包。因此,您的结构应该如下所示:

src/test/java
  |
  - com/example/runner/TestRunner.java
  - com/example/definitions/StepDefinitions.java

src/test/resources
  |
  - com/example/features/MyTests.feature

您的TestRunner类应按如下方式注解:

import static io.cucumber.junit.platform.engine.Constants.GLUE_PROPERTY_NAME;

import org.junit.platform.suite.api.ConfigurationParameter;
import org.junit.platform.suite.api.SelectClasspathResource;
import org.junit.platform.suite.api.Suite;

@Suite
@SelectClasspathResource("com/example")
@ConfigurationParameter(key = GLUE_PROPERTY_NAME, value = "com.example")
public class Runner {}

并且,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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>SeleniumWithCucumber</groupId>
    <artifactId>SeleniumWithCucumber</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>SeleniumWithCucumber</name>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <cucumber.version>7.10.1</cucumber.version>
        <selenium.version>4.4.0</selenium.version>
        <webdrivermanager.version>5.2.1</webdrivermanager.version>
        <junit.jupiter.version>5.9.1</junit.jupiter.version>
        <apache.common.version>2.4</apache.common.version>
        <projectlombok.version>1.18.24</projectlombok.version>
        <maven.compiler.plugin.version>3.10.1</maven.compiler.plugin.version>
        <maven.surefire.plugin.version>3.0.0-M7</maven.surefire.plugin.version>
        <maven.compiler.source.version>17</maven.compiler.source.version>
        <maven.compiler.target.version>17</maven.compiler.target.version>
    </properties>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>io.cucumber</groupId>
                <artifactId>cucumber-bom</artifactId>
                <version>${cucumber.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.junit</groupId>
                <artifactId>junit-bom</artifactId>
                <version>${junit.jupiter.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>io.cucumber</groupId>
            <artifactId>cucumber-java</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>io.cucumber</groupId>
            <artifactId>cucumber-junit-platform-engine</artifactId>
            <scope>test</scope>
        </dependency>
        <!-- JUnit Platform -->
        <dependency>
            <groupId>org.junit.platform</groupId>
            <artifactId>junit-platform-suite</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-engine</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter</artifactId>
            <scope>test</scope>
        </dependency>
        <!-- Selenium -->
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
            <version>${selenium.version}</version>
        </dependency>
        <!-- Web Driver Manager -->
        <dependency>
            <groupId>io.github.bonigarcia</groupId>
            <artifactId>webdrivermanager</artifactId>
            <version>${webdrivermanager.version}</version>
        </dependency>
        <!-- Apache Common -->
        <dependency>
            <groupId>org.apache.directory.studio</groupId>
            <artifactId>org.apache.commons.io</artifactId>
            <version>${apache.common.version}</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>${projectlombok.version}</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>${maven.compiler.plugin.version}</version>
                <configuration>
                    <source>${maven.compiler.source.version}</source>
                    <target>${maven.compiler.target.version}</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>${maven.surefire.plugin.version}</version>
                <configuration>
                    <properties>
                        <configurationParameters>
                cucumber.junit-platform.naming-strategy=long
            </configurationParameters>
                    </properties>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

最后,确保您的测试运行器类使用JUnit 5而不是JUnit 4。我已经提供了如何在运行配置上下文菜单中更改此参数的说明。

    • 简而言之,您有两种选择**:

1.将当前项目配置更改为使用JUnit 4运行,或者
1.按照我在最后一次编辑中指出的那样更改项目,以便它可以运行JUnit 5。

相关问题