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

