TestRunner en Cucumber no ejecuta mis archivos de características

7 minutos de lectura

He estado tratando de ejecutar mis archivos de funciones con TestRunner, pero no ha podido hacerlo. Cuando hago clic con el botón derecho en TestRunner -> Ejecutar como JUnit, no sucede nada y solo muestra Terminado. La pestaña Consola no tiene mensajes y la pestaña JUnit no tiene ejecuciones de prueba. Simplemente muestra “terminado después de X segundos”.

Adjunté la estructura de mi paquete para que lo revises.

Estoy usando Gradle y Eclipse IDE

Aquí está mi clase 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 {
    
}

aquí está mi código para la definición de paso:

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);
    }
}

¿Me estoy perdiendo de algo? ¡Gracias por su ayuda!

Intenté poner mis archivos de características en la carpeta src/test/resources y cambié mis características de TestRunner = “src/test/resources/feature” y todavía no tuve suerte. Obtengo el mismo resultado que el problema original.

  • Por cierto, también puse etiquetas de @Login en mis archivos de funciones: ‘@Login Scenario:User Successed logs in Page DADO que el usuario navega… CUANDO el usuario ingresa… ENTONCES el usuario está “exitosamente” conectado

    – Jep Manalo

    17 de noviembre de 2022 a las 20:36


  • Todo funciona perfectamente bien si hago clic derecho en mi archivo .feature -> Ejecutar como -> Característica de pepino. Pero cuando se ejecuta TestRunner -> Ejecutar como JUnit, no funciona.

    – Jep Manalo

    17/11/2022 a las 20:55

  • Empezar con github.com/cucumber/cucumber-java-esqueleto y tal vez leer maven.apache.org/surefire/maven-surefire-plugin/examples/…

    – Diputado Korstanje

    17 de noviembre de 2022 a las 21:41

  • ¿Qué versión de JUnit está usando y su configuración es correcta?

    – hfontanez

    2 de enero a las 11:23

avatar de usuario de hfontanez
hfontanez

Creo que su problema es la versión JUnit que usa su clase Test Runner. Intenta ejecutar tu TestRunner.java con JUnit 4. Para hacer esto, abra el menú contextual Ejecutar configuraciones para su clase de corredor de prueba y seleccione JUnit 4 del menú desplegable.

ingrese la descripción de la imagen aquí

El hecho de que estés usando @CucumberOptions me dice que está usando una configuración JUnit 4 Cucumber. Esta es la razón por la cual cuando intenta ejecutar su prueba como una prueba JUnit, falla, pero cuando la ejecuta como una característica de Cucumber, funciona bien. Básicamente, estás sacando a JUnit de la imagen.

Si tiene JUnit 5 (Jupiter) instalado, tiende a usar esta versión de forma predeterminada para ejecutar sus pruebas. Las configuraciones de Cucumber con JUnit 4 y 5 no son realmente compatibles. Si desea utilizar JUnit 5, le sugiero que configure su proyecto siguiendo estos instrucciones. Debo aclarar que el ejemplo vinculado ejecuta pruebas como pruebas Maven y no como pruebas JUnit, pero usa la plataforma JUnit 5.

EDITAR:

Solo para darle un resumen rápido de cómo convertir su proyecto a Cucumber usando JUnit 5.

Su corredor, definiciones de pasos y archivos de características deben estar en un paquete común. Para mi proyecto de muestra, creé el com.example paquete. Por lo tanto, su estructura debería ser algo como esto:

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

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

Su TestRunner La clase debe anotarse de la siguiente manera:

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 {}

Y, como mínimo, su POM debe contener lo siguiente

<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>

Por último, asegúrese de que su clase de corredor de prueba use JUnit 5 en lugar de JUnit 4. Ya brindé instrucciones sobre cómo cambiar este parámetro en su menú contextual de configuraciones de ejecución.

En resumen, tienes dos opciones.:

  1. Cambie la configuración actual de su proyecto para que se ejecute con JUnit 4, o
  2. Cambie su proyecto como indiqué en esta última edición para que pueda ejecutarse con JUnit 5.

  • Si necesita (o desea) ejecutar una prueba de Maven, hágamelo saber y editaré esta respuesta.

    – hfontanez

    2 ene a las 15:14

¿Ha sido útil esta solución?