Answer
Reducing Cucumber Regression from 4 Hours to 30 Minutes
Current State Analysis
CODE
Total: 500 scenarios ร 30 seconds average = 4.2 hours (serial)
Breakdown of time per scenario:
Browser open/close: 3 sec
UI login: 15 sec โ biggest waste
Test steps: 10 sec
Waits/Thread.sleep: 2 sec
Optimization 1: Parallel Execution (Biggest Win โ 5x speedup)
Java
@CucumberOptions(features = "src/test/resources/features", glue = {"stepDefs","hooks"})
public class ParallelTestRunner extends AbstractTestNGCucumberTests {
@Override
@DataProvider(parallel = true)
public Object[][] scenarios() { return super.scenarios(); }
}
XML
<!-- testng.xml: 10 parallel threads -->
<suite name="Fast Regression" parallel="methods" thread-count="10">
<test name="Cucumber BDD">
<classes><class name="runners.ParallelTestRunner"/></classes>
</test>
</suite>
CODE
Before: 500 scenarios ร 30s = 4.2h
After: 500 รท 10 threads = 50 scenarios per thread ร 30s = 25 min
Optimization 2: API Login (Saves 15s ร 400 scenarios = 100 min)
Java
@Before("@needs-login")
public void loginViaApi() {
String token = apiClient.getAuthToken("admin@test.com", "Admin@123");
ctx.driver.get(baseUrl);
ctx.driver.manage().addCookie(new Cookie("auth_token", token));
// 0.5 sec instead of 15 sec
}
CODE
Savings: 400 scenarios ร 14.5s saved = 96.7 minutes saved
Optimization 3: Headless Chrome (Saves 2-3s per scenario)
Java
options.addArguments("--headless=new", "--no-sandbox", "--disable-dev-shm-usage");
Optimization 4: Eliminate Thread.sleep
Bash
# Find all sleeps in the project
grep -rn "Thread.sleep" src/test/java/
# Replace with explicit waits
WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(15));
wait.until(ExpectedConditions.visibilityOfElementLocated(locator));
CODE
Savings: 200 sleeps ร 2s average = 6.7 minutes saved
Optimization 5: API Test Data Setup (Saves 5-10s per scenario)
Java
@Before("@needs-product")
public void createProductViaApi() {
// 0.2s via API vs 30s clicking through admin UI
ctx.productId = apiClient.createProduct("Test Laptop", 999.00);
}
Optimization 6: Suite Tiering Strategy
CODE
Suite 1: @smoke (15 scenarios, 3 threads) = 2 min โ every commit
Suite 2: @sanity (50 scenarios, 5 threads) = 5 min โ every PR
Suite 3: @regression (500 scenarios, 10 threads) = 25 min โ nightly
Suite 4: @P1 (80 critical scenarios, 10 threads) = 8 min โ post-deploy
Optimization 7: Selenium Grid for Cloud Scale
Java
// Run 50 parallel browsers on Selenium Grid / LambdaTest / BrowserStack
ctx.driver = new RemoteWebDriver(
new URL("https://hub.lambdatest.com/wd/hub"),
capabilities
);
CODE
500 scenarios รท 50 browsers = 10 scenarios per browser ร 30s = 5 min!
Results After All Optimizations
CODE
Before: 4.2 hours (serial, UI login, Thread.sleep)
After: 22-28 minutes (10 parallel, API login, headless, no sleep)
Optimization breakdown:
Parallel (10 threads): 4.2h โ 25 min (10x)
API login bypass: -97 min
No Thread.sleep: -7 min
Headless browser: -4 min
API test data: -8 min
Final: ~22 minutes โ (under 30 minute target)
