讲师中心 微信公众号
AI工具推荐 视频效率加速

如何在单台设备上顺序执行多个 TestNG 测试类(非并行模式)

雨敏君_3446

雨敏君_3446

发布时间:2026-07-16 23:03:39

|

367人浏览过

|

来源于php中文网

原创

如何在单台设备上顺序执行多个 TestNG 测试类(非并行模式)

本文解决 Appium 升级后(尤其是 v2.x 配合 Device Farm 插件)TestNG 默认并行启动多设备的问题,通过配置 parallel="false" 确保所有测试类严格按顺序复用同一台物理设备执行。

本文解决 appium 升级后(尤其是 v2.x 配合 device farm 插件)testng 默认并行启动多设备的问题,通过配置 `parallel="false"` 确保所有测试类严格按顺序复用同一台物理设备执行。

在 Appium 2.x 版本中,配合 Device Farm 插件或某些新版 WebDriverAgent/UiAutomator2 驱动行为,TestNG 的 <test> 标签默认可能触发“类级并行”(class-level parallelism),即每个 <class> 被视为独立执行单元,导致 Appium 尝试为每个测试类启动一个新会话——进而尝试连接多个设备(即使你只连接了一台)。这与你的预期(单设备、串行、复用同一个 AndroidDriver 实例)相悖。

根本解决方案:显式禁用并行执行

只需在 testng.xml 的 <test> 标签中添加 parallel="false" 属性:

<?xml version="1.0" encoding="UTF-8"?>
<suite name="Test Suite Name">
  <listeners>
    <listener class-name="Helpers.AnnotationTransformer"/>
    <listener class-name="Helpers.Listener"/>
  </listeners>
  <test name="some name" parallel="false"> <!-- ✅ 关键修改 -->
    <classes>
      <class name="testClass1"/>
      <class name="testClass2"/>
    </classes>
  </test>
</suite>

⚠️ 注意:parallel="false" 必须作用于 <test> 级别(而非 <suite>),因为 <suite parallel="false"> 仅控制测试组间并行,而 <test parallel="false"> 才真正约束该测试块内所有 <class> 的执行模式为串行。

补充建议:确保 Driver 实例复用(避免重复初始化)

你的 Base 构造函数每次实例化都会新建 AndroidDriver,若 testClass1 和 testClass2 分属不同测试实例(如未使用 @BeforeSuite 或静态驱动管理),仍可能导致多次启动会话。推荐优化为单例驱动 + 生命周期管理:

public class Base {
    protected static AndroidDriver<AndroidElement> driver;

    @BeforeSuite
    public void setUpDriver() throws MalformedURLException {
        if (driver == null) {
            DesiredCapabilities capabilities = new DesiredCapabilities();
            capabilities.setCapability("appium:automationName", "UiAutomator2");
            capabilities.setCapability("appium:deviceName", conf.read("deviceName"));
            capabilities.setCapability("appium:udid", conf.read("udid"));
            capabilities.setCapability("appium:appPackage", conf.read("appPackage"));
            capabilities.setCapability("appium:appActivity", conf.read("appActivity"));
            capabilities.setCapability("appium:autoGrantPermissions", true);
            driver = new AndroidDriver<>(new URL("http://localhost:4723/wd/hub"), capabilities);
        }
    }

    @AfterSuite
    public void tearDownDriver() {
        if (driver != null) {
            driver.quit();
            driver = null;
        }
    }
}

这样,两个测试类将共享同一个 driver 实例,完全符合“单设备、顺序执行、会话复用”的要求。

验证是否生效:
运行后观察 Appium 日志——应仅出现 1 次 /session 创建请求,且后续所有测试操作均复用该 session ID;同时设备端不会出现重复安装/重启应用的行为。

总结:parallel="false" 是治标关键配置,结合驱动单例管理是治本之策。两者协同,即可彻底规避 Appium v2.x 在单设备场景下的误判式并行行为。

热门AI工具

更多
WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

AionClaw
AionClaw Hot

AionClaw是一款面向办公、创作和编程任务的AI桌面智能体。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

Lovart
Lovart Hot

一款面向视觉设计创作的AI设计平台,可通过智能体和画布工作流辅助制作海报、Logo、网页、PPT及其他视觉内容。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

相关专题

更多
软件测试常用工具
软件测试常用工具

软件测试常用工具有Selenium、JUnit、Appium、JMeter、LoadRunner、Postman、TestNG、LoadUI、SoapUI、Cucumber和Robot Framework等等。测试人员可以根据具体的测试需求和技术栈选择适合的工具,提高测试效率和准确性 。

4390

2023.10.13

java测试工具有哪些
java测试工具有哪些

java测试工具有JUnit、TestNG、Mockito、Selenium、Apache JMeter和Cucumber。php还给大家带来了java有关的教程,欢迎大家前来学习阅读,希望对大家能有所帮助。

2781

2023.10.23

Java 单元测试
Java 单元测试

本专题聚焦 Java 在软件测试与持续集成流程中的实战应用,系统讲解 JUnit 单元测试框架、Mock 数据、集成测试、代码覆盖率分析、Maven 测试配置、CI/CD 流水线搭建(Jenkins、GitHub Actions)等关键内容。通过实战案例(如企业级项目自动化测试、持续交付流程搭建),帮助学习者掌握 Java 项目质量保障与自动化交付的完整体系。

1046

2025.10.24

FrankenPHP集成Laravel详细教程
FrankenPHP集成Laravel详细教程

本专题提供FrankenPHP集成Laravel的详细配置指南,全面解析运行原理、开发环境搭建、Caddyfile配置、Octane工作模式、数据库连接、队列任务、定时任务和生产环境优化,解决部署过程中常见的报错与兼容性问题。

40

2026.10.08

LLVM自定义Pass怎么写
LLVM自定义Pass怎么写

本专题聚焦LLVM自定义Pass开发,整理Pass类结构、run()方法、PreservedAnalyses、CMake构建、插件注册、-load-pass-plugin加载和测试用例编写流程。

140

2026.09.30

LLVM RISC-V参数配置教程
LLVM RISC-V参数配置教程

本专题介绍LLVM对RISC-V基础ISA和扩展的支持方式,涵盖RV32、RV64、标准扩展、实验性扩展、厂商扩展、-menable-experimental-extensions和版本差异。

140

2026.09.30

LLVM IR中间表示入门指南
LLVM IR中间表示入门指南

本专题整理LLVM IR的核心概念,包括中间表示作用、模块结构、函数、基本块、SSA形式、类型系统和常见语法,帮助新手理解LLVM编译流程中的关键层。

100

2026.09.30

PDF转图片方法
PDF转图片方法

需要把 PDF 页面用于上传、预览、分享或图片归档时,PDF 转图片方法专题整理 JPG/PNG 格式选择、逐页导出、清晰度设置、批量下载和结果检查等流程,帮助用户稳定完成 PDF 图片化处理。

100

2026.09.30

PixTV AI视频生成与无限画布创作
PixTV AI视频生成与无限画布创作

PixTV专题整理AI视频与视觉内容创作相关功能使用教程,涵盖AI生图、视频生成、无限画布、多模型创作、素材管理、声音音乐及视频剪辑等功能,帮助用户快速掌握PixTV从创意到成片的完整制作方法。

120

2026.09.29

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn