Test parallelization helps run many tests at the same time. This makes testing faster and saves time in Continuous Integration (CI).
Test parallelization in CI in Selenium Java
public class TestClass { @Test public void testMethod() { // test steps here } } // In TestNG XML: <suite name="Suite" parallel="tests" thread-count="3"> <test name="Test1"> <classes> <class name="TestClass" /> </classes> </test> <test name="Test2"> <classes> <class name="TestClass" /> </classes> </test> </suite>
Use TestNG XML file to configure parallel tests in CI.
Set parallel attribute to tests, methods, or classes depending on your need.
<suite name="Suite" parallel="tests" thread-count="2"> <test name="Test1"> <classes> <class name="TestClass1" /> </classes> </test> <test name="Test2"> <classes> <class name="TestClass2" /> </classes> </test> </suite>
<suite name="Suite" parallel="methods" thread-count="3"> <test name="Test"> <classes> <class name="TestClass" /> </classes> </test> </suite>
This test class runs two tests in parallel using TestNG. Each test opens a browser, checks a search engine title, and closes the browser.
import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import org.testng.Assert; import org.testng.annotations.AfterMethod; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; public class ParallelTest { private ThreadLocal<WebDriver> driver = new ThreadLocal<WebDriver>(); @BeforeMethod public void setup() { driver.set(new ChromeDriver()); } @Test public void testGoogle() { driver.get().get("https://www.google.com"); Assert.assertTrue(driver.get().getTitle().contains("Google")); System.out.println("Google test passed"); } @Test public void testBing() { driver.get().get("https://www.bing.com"); Assert.assertTrue(driver.get().getTitle().contains("Bing")); System.out.println("Bing test passed"); } @AfterMethod public void teardown() { if (driver.get() != null) { driver.get().quit(); } driver.remove(); } } // TestNG XML configuration: // <suite name="Suite" parallel="methods" thread-count="2"> // <test name="ParallelTests"> // <classes> // <class name="ParallelTest" /> // </classes> // </test> // </suite>
Make sure your tests do not share data or browser instances when running in parallel.
Configure your CI tool (like Jenkins or GitHub Actions) to run tests with the TestNG XML file.
Use thread-safe WebDriver instances to avoid conflicts.
Test parallelization runs tests at the same time to save time.
Use TestNG XML to set parallel execution and thread count.
Ensure tests are independent to avoid errors when running in parallel.
Practice
Solution
Step 1: Understand parallel test execution
Parallel execution means running multiple tests at the same time instead of one after another.Step 2: Identify the benefit in CI
Running tests simultaneously saves time, making the feedback faster in continuous integration.Final Answer:
It reduces the total test execution time by running tests simultaneously. -> Option CQuick Check:
Parallel tests = faster execution [OK]
- Thinking parallel means tests run in order
- Believing parallel increases test count
- Assuming parallel disables flaky tests
Solution
Step 1: Recall TestNG XML syntax for parallelism
The correct attribute to enable parallel execution is 'parallel' with values like 'methods', 'tests', or 'classes'.Step 2: Identify correct thread count attribute
The attribute 'thread-count' sets how many threads run in parallel.Final Answer:
<suite parallel="methods" thread-count="4"> -> Option BQuick Check:
parallel + thread-count = correct syntax [OK]
- Using non-existent attributes like runParallel
- Confusing thread-count with threads
- Using order="sequential" disables parallelism
<suite name="Suite" parallel="tests" thread-count="3"> <test name="Test1">...</test> <test name="Test2">...</test> <test name="Test3">...</test> <test name="Test4">...</test> </suite>
Solution
Step 1: Understand parallel="tests" meaning
Setting parallel="tests" means TestNG runs multiple <test> tags at the same time.Step 2: Check thread-count value
thread-count="3" limits the number of simultaneous threads to 3, so max 3 tests run together.Final Answer:
3 tests run simultaneously -> Option AQuick Check:
parallel=tests + thread-count=3 means 3 parallel tests [OK]
- Assuming all tests run at once ignoring thread-count
- Confusing parallel="methods" with parallel="tests"
- Thinking thread-count is ignored
parallel="methods" and thread-count="2". Your tests share a static WebDriver instance. What problem will most likely occur?Solution
Step 1: Understand parallel methods with shared static WebDriver
Parallel methods run at the same time, but sharing a static WebDriver means all tests use the same browser instance.Step 2: Identify concurrency issues
Sharing one WebDriver causes conflicts like commands overlapping, leading to test failures.Final Answer:
Tests will fail due to WebDriver conflicts from shared instance. -> Option AQuick Check:
Shared static WebDriver + parallel = conflicts [OK]
- Assuming shared WebDriver works fine in parallel
- Thinking parallel disables shared resource conflicts
- Believing TestNG creates separate WebDriver automatically
Solution
Step 1: Identify parallel="methods" for running all test methods in parallel
To run all methods in parallel, use parallel="methods" in the suite tag.Step 2: Set thread-count="6" to limit total threads
thread-count="6" limits the number of simultaneous threads to 6, matching the requirement.Step 3: Confirm classes are inside a single <test> tag
All classes are grouped under one <test> tag, so methods from all classes run in parallel within the thread limit.Final Answer:
<suite parallel="methods" thread-count="6"> -> Option DQuick Check:
parallel="methods" + thread-count="6" + single <test> [OK]
- Using parallel="classes" runs classes in parallel, not methods
- Using thread-count too high ignores limit
- Splitting classes into multiple tests changes parallel behavior
Ready to prove it?
Pass the test and this pattern moves unknown
