</>

Technology

TestNG

Difficulty

Intermediate

Interview Question

What is dependsOnGroups in TestNG and how does it differ from dependsOnMethods?

dependsOnGroups creates dependencies between test groups (smoke, regression) rather than specific methods — more maintainable than dependsOnMethods for large test suites.

Answer

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

FeaturedependsOnMethodsdependsOnGroups
GranularitySpecific method namesGroup names
MaintainabilityLow (names are fragile)High (groups are stable)
ScaleSmall suitesEnterprise suites
FlexibilityRigidAdd/remove methods freely
testng.xml controlNoYes (include/exclude)

Follow AutomateQA

Related Topics