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>
