</>

Technology

TestNG

Difficulty

Advanced

Interview Question

What is singleThreaded in TestNG and when do you use it?

Answer

singleThreaded in TestNG

When a suite runs in parallel="methods" mode, individual @Test methods from the same class can run in different threads. @Test(singleThreaded = true) at class level overrides this — forcing all methods of that class to run in ONE thread.

The Problem Without singleThreaded

Java
// parallel="methods" — each method runs in its own thread
// LoginTest.validLogin     → Thread-1
// LoginTest.invalidLogin   → Thread-2   ← CONFLICT: both share driver!
// LoginTest.sessionTimeout → Thread-3

Without ThreadLocal, multiple threads interfere with each other''s driver.

Solution 1 — singleThreaded (Keep Class Sequential)

Java
@Test(singleThreaded = true) // ALL methods run in same thread
public class LoginTest extends BaseTest {

    @Test
    public void openLoginPage() {
        driver.get("https://automateqa.online/login");
    }

    @Test(dependsOnMethods = "openLoginPage")
    public void enterCredentials() {
        driver.findElement(By.id("username")).sendKeys("admin");
    }

    @Test(dependsOnMethods = "enterCredentials")
    public void submitAndVerify() {
        driver.findElement(By.id("loginBtn")).click();
        Assert.assertTrue(driver.getTitle().contains("Dashboard"));
    }
}

All 3 methods run sequentially in the same thread → same driver instance → no conflict.

testng.xml Configuration

XML
<suite name="Suite" parallel="methods" thread-count="5">
    <test name="Tests">
        <classes>
            <class name="tests.LoginTest"/>      <!-- singleThreaded=true in class -->
            <class name="tests.CartTest"/>       <!-- can run methods in parallel -->
            <class name="tests.ProductTest"/>
        </classes>
    </test>
</suite>

LoginTest runs its methods sequentially, while CartTest and ProductTest methods run in parallel.

Solution 2 — ThreadLocal (Better for Parallel Methods)

Rather than using singleThreaded, the modern approach is:

Java
// No singleThreaded needed — each thread gets its OWN driver
public class LoginTest extends BaseTest {
    // BaseTest uses ThreadLocal<WebDriver>

    @Test
    public void validLogin() {
        DriverManager.getDriver().get("..."); // Thread-safe
    }

    @Test
    public void invalidLogin() {
        DriverManager.getDriver().get("..."); // Different thread, different driver
    }
}

When to Use singleThreaded

ScenarioUse singleThreaded?
Tests share browser session (login → cart → checkout)Yes
Tests are fully independentNo — use ThreadLocal
Methods have dependsOnMethods chainYes (or use parallel="classes")
Complex state machine testsYes
Stateless API testsNo

singleThreaded vs parallel="classes"

  • singleThreaded=true on a class: that specific class is sequential; others may be parallel
  • parallel="classes" in XML: all classes run in parallel, but each class''s methods are sequential

Best modern approach: Use ThreadLocal<WebDriver> + parallel="methods" rather than singleThreaded.

Follow AutomateQA

Related Topics