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

testng.xml中Parallel Execution功能失效 仅执行最后一条测试

TestNG并行执行仅运行最后一条测试解决方案
  • 核心问题根因:driver实例全局共享导致并发覆盖
    你当前代码中使用的driver是全局公共变量,多线程并行执行测试用例时,后续线程初始化的driver实例会直接覆盖前序线程的driver值,最终只会保留最后一个线程的driver正常执行,其他线程的测试任务会因为丢失driver实例中断。
  • 解决方法:使用ThreadLocal封装driver实现线程隔离
    1. 调整driver声明方式
    // 替换原有的全局WebDriver driver声明
    private static ThreadLocal<WebDriver> driver = new ThreadLocal<>();
    
    1. 改造setupApp初始化方法
    @Parameters("browserName")
    @BeforeMethod   
    public void setupApp(String browserName) {
        WebDriver threadDriver = BrowsersFactory.startApplication(driver.get(), browserName, config.getQaUrl());
        driver.set(threadDriver);
    }
    
    1. 所有用到driver的位置统一调用driver.get()获取当前线程的独立实例
    2. 新增每个测试方法执行后的资源清理逻辑
    @AfterMethod
    public void tearDown() {
        if (driver.get() != null) {
            driver.get().quit();
            driver.remove();
        }
    }
    
  • 额外检查项
    确认testng.xml的并行配置正确,示例配置如下:
    <!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd">
    <suite name="TestSuite" parallel="methods" thread-count="3">
      <test name="MultiBrowserTest">
        <parameter name="browserName" value="chrome"/>
        <parameter name="browserName" value="firefox"/>
        <classes>
          <class name="你的测试类全路径"/>
        </classes>
      </test>
    </suite>
    
    需保证parallel属性配置符合你的并行维度要求(可选值:methods/tests/classes/instances),且thread-count配置值大于1。同时检查BrowsersFactory类的startApplication方法无静态变量复用driver的逻辑,每次调用返回独立的WebDriver实例。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 13:27:03