0
0
Selenium Javatesting~7 mins

Test parallelization in CI in Selenium Java

Choose your learning style9 modes available
Introduction

Test parallelization helps run many tests at the same time. This makes testing faster and saves time in Continuous Integration (CI).

You want to check many parts of a website quickly after code changes.
Your test suite is large and takes too long to finish.
You want to get fast feedback from your CI system.
You have multiple browsers or devices to test at once.
You want to use your computer or cloud resources efficiently.
Syntax
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.

Examples
This runs two test classes in parallel as separate tests.
Selenium Java
<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>
This runs test methods inside one class in parallel.
Selenium Java
<suite name="Suite" parallel="methods" thread-count="3">
    <test name="Test">
        <classes>
            <class name="TestClass" />
        </classes>
    </test>
</suite>
Sample Program

This test class runs two tests in parallel using TestNG. Each test opens a browser, checks a search engine title, and closes the browser.

Selenium Java
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>
OutputSuccess
Important Notes

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.

Summary

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.