You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于Selenium Standalone实现并行测试执行?

多Selenium Standalone实例并行测试实现方案

核心逻辑

独立的Selenium Standalone实例没有Grid的自动任务路由能力,需手动维护节点地址池,结合测试框架的并行执行机制,将测试任务分配到不同端口的实例上。

1. 启动多端口Selenium Standalone实例

确保两个实例正常运行:

# 实例1:端口4444
java -jar selenium-server-standalone-x.x.x.jar -port 4444
# 实例2:端口4445
java -jar selenium-server-standalone-x.x.x.jar -port 4445

2. 封装节点地址池工具类

实现轮询分配逻辑,确保测试任务均匀分发到不同实例:

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;

public class SeleniumNodePool {
    private static final List<String> NODE_LIST = new ArrayList<>();
    private static final AtomicInteger ROUND_ROBIN_COUNTER = new AtomicInteger(0);

    static {
        NODE_LIST.add("http://localhost:4444/wd/hub");
        NODE_LIST.add("http://localhost:4445/wd/hub");
    }

    // 轮询获取下一个节点地址
    public static String getNextNode() {
        int index = ROUND_ROBIN_COUNTER.getAndIncrement() % NODE_LIST.size();
        return NODE_LIST.get(index);
    }
}

3. 结合TestNG实现并行执行

3.1 配置TestNG并行规则

创建testng.xml文件,开启方法级并行,线程数匹配实例数量:

<!DOCTYPE suite SYSTEM "testng-1.0.dtd">
<suite name="ParallelTestSuite" parallel="methods" thread-count="2">
    <test name="AutomationTests">
        <classes>
            <class name="com.yourpackage.ParallelTestClass"/>
        </classes>
    </test>
</suite>

3.2 编写测试类

在测试初始化时从地址池获取节点,初始化RemoteWebDriver:

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import java.net.URL;

public class ParallelTestClass {
    private WebDriver driver;

    @BeforeMethod
    public void initDriver() throws Exception {
        String nodeUrl = SeleniumNodePool.getNextNode();
        DesiredCapabilities caps = DesiredCapabilities.chrome(); // 根据需要替换为Firefox等
        driver = new RemoteWebDriver(new URL(nodeUrl), caps);
    }

    @Test
    public void testLoginFlow() {
        driver.get("https://your-test-site.com/login");
        // 测试逻辑:输入账号、密码、点击登录等
    }

    @Test
    public void testProductSearch() {
        driver.get("https://your-test-site.com");
        // 测试逻辑:搜索商品、验证结果等
    }

    @AfterMethod
    public void quitDriver() {
        if (driver != null) {
            driver.quit();
        }
    }
}

4. 验证效果

运行TestNG套件后,查看两个Selenium Standalone实例的控制台日志,会看到不同测试任务分别连接到4444和4445端口,实现并行执行。

可选优化

  • 增加节点健康检查:在SeleniumNodePool中添加方法检测节点是否可用,避免分配无效实例
  • 动态节点管理:提供添加/删除节点的方法,适配实例数量变化
  • JUnit 5替代方案:使用@ParameterizedTest注入多节点地址,配合@Execution(ExecutionMode.CONCURRENT)实现并行

内容的提问来源于stack exchange,提问作者Hakan GÜL

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 23:44:54