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

如何用Selenium在同一浏览器不同实例中同时运行多个TestNG.XML文件

TestNG多套件并行执行问题解决

我在TestNG测试套件中有大量测试类,现有两个测试套件文件:

Testng.xml1

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite1.xml">
    <test name="Test Cases1">
        <classes>
            <class name="com.test1" />
        </classes>
    </test>
    <test name="Test Cases2">
        <classes>
            <class name="com.test2" />
        </classes>
    </test>
</suite>

Testng.xml2

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite2.xml">
    <test name="Test Cases1">
        <classes>
            <class name="com.test1" />
        </classes>
    </test>
    <test name="Test Cases2">
        <classes>
            <class name="com.test2" />
        </classes>
    </test>
</suite>

我希望同时运行Suite1.xml和Suite2.xml,让每个套件的首个测试用例在同一浏览器的不同实例中同时执行。尝试了通过父套件并行运行子套件,但未成功,配置的Testng.xml3如下:

Testng.xml3

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="RegressionSuite.xml" thread-count="10" verbose="2" parallel="test">
    <suite-files>
        <suite-file 
            path="Suite1.xml">
        </suite-file>
        <suite-file 
            path="Suite2.xml">
        </suite-file>
   </suite-files>
</suite> 

问题分析与解决步骤

当前父套件配置的parallel="test"仅会让单个子套件内部的节点并行,无法实现跨子套件的节点并行调度。要达成需求,需按以下步骤调整:

  1. 修正父套件并行配置
    将父套件的parallel属性设为"tests"(与"test"等效),同时调整thread-count为实际需要的并行数(比如2,刚好匹配两个套件的首个测试用例并行)。子套件不要设置任何parallel或thread-count属性,确保继承父套件的并行策略。修改后的父套件配置如下:

    <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
    <suite name="RegressionSuite.xml" thread-count="2" verbose="2" parallel="tests">
        <suite-files>
            <suite-file path="Suite1.xml"/>
            <suite-file path="Suite2.xml"/>
        </suite-files>
    </suite>
    
  2. 实现浏览器实例线程隔离
    必须用ThreadLocal存储WebDriver实例,避免不同线程的浏览器实例互相干扰。基础测试类示例:

    public class BaseTest {
        private static final ThreadLocal<WebDriver> driverHolder = new ThreadLocal<>();
    
        @BeforeMethod
        public void initDriver() {
            ChromeOptions options = new ChromeOptions();
            // 可添加浏览器启动参数,如无头模式等
            driverHolder.set(new ChromeDriver(options));
        }
    
        protected WebDriver getDriver() {
            return driverHolder.get();
        }
    
        @AfterMethod
        public void quitDriver() {
            WebDriver driver = driverHolder.get();
            if (driver != null) {
                driver.quit();
                driverHolder.remove();
            }
        }
    }
    

    所有测试类继承该BaseTest,通过getDriver()获取当前线程的浏览器实例。

  3. 验证执行逻辑
    运行修改后的父套件,TestNG会将所有子套件中的节点统一纳入并行调度池,此时Suite1的Test Cases1和Suite2的Test Cases1会在不同线程中启动独立的浏览器实例,实现同时执行。


内容的提问来源于stack exchange,提问作者Ruppal Vachaswa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 22:02:17