Automation Architecture Course > Module 6: Parallel Execution and Scalability

Module 6: Parallel Execution and Scalability

⏱️ 65 minutes 📈 Advanced ⚡ Performance & Scalability

🎯 Learning Objectives

Design Parallel Test Architecture

Create thread-safe frameworks for parallel test execution

Implement Grid and Cloud Solutions

Scale tests across multiple machines and cloud platforms

Optimize Resource Management

Efficiently manage WebDriver instances and system resources

Handle Parallel Test Challenges

Solve data isolation, synchronization, and reporting issues

⚡ Parallel Execution Architecture

✅ Thread-Safe WebDriver Manager

public class ThreadSafeWebDriverManager {
    private static final ThreadLocal<WebDriver> driverThreadLocal = new ThreadLocal<>();
    private static final ThreadLocal<String> sessionIdThreadLocal = new ThreadLocal<>();
    public static void setDriver(WebDriver driver) {
        driverThreadLocal.set(driver);
        if (driver instanceof RemoteWebDriver) {
            sessionIdThreadLocal.set(((RemoteWebDriver) driver).getSessionId().toString());
        }
    }
    public static WebDriver getDriver() {
        return driverThreadLocal.get();
    public static String getSessionId() {
        return sessionIdThreadLocal.get();
    public static void quitDriver() {
        WebDriver driver = driverThreadLocal.get();
        if (driver != null) {
            driver.quit();
            driverThreadLocal.remove();
            sessionIdThreadLocal.remove();
}
// Parallel test execution with TestNG
public class ParallelTestBase {
    @BeforeMethod
    public void setUp() {
        String browserType = System.getProperty("browser", "chrome");
        WebDriver driver = createDriver(browserType);
        ThreadSafeWebDriverManager.setDriver(driver);
    @AfterMethod
    public void tearDown() {
        ThreadSafeWebDriverManager.quitDriver();
    private WebDriver createDriver(String browserType) {
        WebDriverFactory factory = WebDriverFactory.getFactory(browserType);
        return factory.createDriver();
}

☁️ Cloud and Grid Integration

✅ Selenium Grid and Cloud Provider Integration

public class CloudWebDriverFactory extends WebDriverFactory {
    @Override
    public WebDriver createDriver() {
        String cloudProvider = System.getProperty("cloud.provider", "local");
        
        switch (cloudProvider.toLowerCase()) {
            case "browserstack":
                return createBrowserStackDriver();
            case "saucelabs":
                return createSauceLabsDriver();
            case "grid":
                return createGridDriver();
            default:
                return createLocalDriver();
    private WebDriver createBrowserStackDriver() {
        DesiredCapabilities caps = new DesiredCapabilities();
        caps.setCapability("browserName", System.getProperty("browser", "chrome"));
        caps.setCapability("browserVersion", System.getProperty("browser.version", "latest"));
        caps.setCapability("os", System.getProperty("os", "Windows"));
        caps.setCapability("osVersion", System.getProperty("os.version", "10"));
        caps.setCapability("buildName", System.getProperty("build.name", "Automation Test"));
        caps.setCapability("sessionName", getTestName());
        try {
            String username = System.getProperty("browserstack.username");
            String accessKey = System.getProperty("browserstack.accesskey");
            String url = String.format("https://%s:%s@hub-cloud.browserstack.com/wd/hub", username, accessKey);
            return new RemoteWebDriver(new URL(url), caps);
        } catch (MalformedURLException e) {
            throw new RuntimeException("Invalid BrowserStack URL", e);