</>

Technology

Cucumber

Difficulty

Intermediate

Interview Question

Provide an example of the TestRunner class in Cucumber.

Answer

TestRunner Class Example

Basic TestRunner with TestNG

Java
package com.sample.runner;

import io.cucumber.testng.AbstractTestNGCucumberTests;
import io.cucumber.testng.CucumberOptions;

@CucumberOptions(
    features = "src/test/resources/Features",
    glue = {"stepDefinitions"},
    plugin = {
        "pretty",
        "html:/report/report.html"
    },
    dryRun = false,
    monochrome = true
)
public class TestRunner extends AbstractTestNGCucumberTests {
    // Empty class body — Cucumber manages execution
}

Production-Ready TestRunner

Java
package runners;

import io.cucumber.testng.AbstractTestNGCucumberTests;
import io.cucumber.testng.CucumberOptions;
import org.testng.annotations.DataProvider;

@CucumberOptions(
    features = "src/test/resources/features",
    glue = {"stepDefinitions", "hooks"},
    plugin = {
        "pretty",
        "html:target/cucumber-reports/cucumber.html",
        "json:target/cucumber-reports/cucumber.json",
        "junit:target/cucumber-reports/cucumber.xml",
        "io.qameta.allure.cucumber7jvm.AllureCucumber7Jvm"
    },
    tags = "@smoke and not @skip",
    dryRun = false,
    monochrome = true,
    publish = false
)
public class TestRunner extends AbstractTestNGCucumberTests {

    // Enable parallel execution by scenario
    @Override
    @DataProvider(parallel = true)
    public Object[][] scenarios() {
        return super.scenarios();
    }
}

JUnit TestRunner

Java
package com.sample;

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

@RunWith(Cucumber.class)
@CucumberOptions(
    features = "Features",
    glue = {"StepDefinition"},
    plugin = {"pretty", "html:/report/report.html"},
    dryRun = false,
    monochrome = true
)
public class Runner {
    // Empty — @RunWith(Cucumber.class) delegates execution
}

How to Run

Bash
# Maven command line
mvn test -Dcucumber.filter.tags="@smoke"

# Specific feature
mvn test -Dcucumber.features="src/test/resources/features/login.feature"

# With testng.xml
mvn test -DsuiteXmlFile=testng.xml

testng.xml for Cucumber

XML
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.9.dtd">
<suite name="Cucumber Suite" parallel="false">
    <test name="Regression Tests">
        <classes>
            <class name="runners.TestRunner"/>
        </classes>
    </test>
</suite>

Follow AutomateQA

Related Topics