dependsOnGroups vs dependsOnMethods in TestNG
Both create execution order dependencies, but at different granularity levels.
dependsOnMethods — Method-Level Dependency
Java
@Test
public void openBrowser() {
driver = new ChromeDriver();
driver.get("https://automateqa.online");
}
@Test(dependsOnMethods = "openBrowser")
public void login() {
// Runs only after openBrowser passes
driver.findElement(By.id("username")).sendKeys("admin");
}
@Test(dependsOnMethods = {"openBrowser", "login"})
public void verifyDashboard() {
// Runs only after BOTH openBrowser AND login pass
Assert.assertTrue(driver.getTitle().contains("Dashboard"));
}
Problem: Hard to maintain in large suites — renaming one method breaks all dependsOnMethods references.
dependsOnGroups — Group-Level Dependency
Java
@Test(groups = "setup")
public void openBrowser() { ... }
@Test(groups = "setup")
public void navigateToHome() { ... }
// Login depends on the entire "setup" GROUP
@Test(groups = "login", dependsOnGroups = "setup")
public void login() {
// Runs after ALL "setup" tests pass
}
// Checkout depends on login GROUP
@Test(groups = "checkout", dependsOnGroups = "login")
public void addToCart() { ... }
@Test(groups = "checkout", dependsOnGroups = "login")
public void proceedToPayment() { ... }
testng.xml — Include/Exclude Groups
XML
<suite name="Suite">
<test name="E2ETest">
<groups>
<run>
<include name="setup"/>
<include name="login"/>
<include name="checkout"/>
<!-- exclude name="wip"/ -->
</run>
</groups>
<classes>
<class name="tests.E2ETest"/>
</classes>
</test>
</suite>
Multiple Group Dependencies
Java
@Test(groups = "payment",
dependsOnGroups = {"login", "checkout"})
public void processPayment() {
// Runs only after all "login" AND all "checkout" tests pass
}
alwaysRun with Group Dependencies
Java
// Run cleanup even if dependent group failed
@Test(groups = "cleanup",
dependsOnGroups = "payment",
alwaysRun = true)
public void closeBrowser() {
driver.quit(); // always runs — even if payment tests failed
}
Comparison
| Feature | dependsOnMethods | dependsOnGroups |
|---|---|---|
| Granularity | Specific method names | Group names |
| Maintainability | Low (names are fragile) | High (groups are stable) |
| Scale | Small suites | Enterprise suites |
| Flexibility | Rigid | Add/remove methods freely |
| testng.xml control | No | Yes (include/exclude) |
