回归跑完 200 条用例,失败 12 条,其中 9 条是脚本自己的问题。
真机批量回归卡人的地方不在跑不动,在跑完以后分不清哪些失败是缺陷、哪些是脚本没写好。
手机自动化指的是用程序替代人工在手机上完成重复操作;规模上去之后配群控做多设备的集中管理。这篇只讲执行侧:用例怎么写、等待怎么配、失败那刻采什么、挂了怎么倒查。
一条用例从写下到跑通,要过哪几关
先把整条通道看清:
测试用例编写(ID/文本定位为主)
↓
设备接入(USB/WiFi 进设备池)
↓
脚本批量下发(群控并行执行)
↓
执行中:截图 / 录屏 / 日志采集
↓
结果回收(通过率 / 失败用例 / 崩溃堆栈)
↓
失败重跑 + 报告生成
然后是一条用例的四关。
第一关,定位。
优先用控件 ID,再就是文本内容,再次层级关系,坐标垫底。
| 定位方式 | 稳定性 | 使用场景 |
|---|---|---|
| 控件 ID | 高 | 有 ID 的页面元素优先用 |
| 文本内容 | 中高 | 按钮、标题、提示文案 |
| 层级关系 | 中 | 复杂页面用父级 + 子级定位 |
| 坐标点击 | 低 | 仅兜底,尽量不用 |
写死坐标的脚本换机型就全挂,这是最常见的一次性脚本。
定位信息宁可写长一点,也别贪快写死坐标。
定位之后是执行。中控上下发脚本,几十台同时跑,画面在同一屏里看:
第二关,断言。
一个用例一个验证点;一条用例里塞两个以上断言,失败时定位不到底是哪一步。
断言要落在业务结果上:页面出现了、数据对了。只看进程没崩,算不上通过。
前置条件显式声明,别让用例之间产生隐式依赖。
命名写清「场景 + 预期」,失败报告一眼能懂。
第三关,分层。
脚本拆三层:操作层管点、滑、输入;页面层管页面元素与动作封装;用例层管业务场景组合。
页面改版只改页面层,用例层不动。
第四关,复现。
失败能稳定复现才进缺陷池;偶发的先标记 flaky 再归因。
等待怎么写:固定 sleep 是头号坑
固定 sleep 是脚本不稳定的头号原因。写短了,元素还没出来就往下走;写长了,整批都在空等。
改成智能等待:轮询检查目标元素出现或消失,再走下一步。
元素出现 → 点击 → 断言结果,三步都配超时与重试。
重试要有次数上限,别写成死循环。
示意代码,实际以脚这篇文档为准:
// 轮询等元素出现,超时 10 秒
if (waitForElement('id/btn_submit', 10000)) {
clickElement('id/btn_submit');
} else {
log('btn_submit 未出现,跳过');
}
一台机器上挂着三十台设备,网络抖动是常态。
等待策略写死,抖一次就误报一次,误报多了就没人看报告了。
失败那一刻,要留下什么
没有现场采集的脚本,debug 只能靠猜。失败时自动采四样:截图、录屏、日志、网络状态。配上用例步骤,就能定位到具体操作。
给每台设备建行为档案:机型、系统版本、历史失败记录。反复出问题,先看设备本身,比如内存不足、存储满、过热。先换台设备试,能省下两天排障时间。
有一次在客户那边,二十台机器里三台固定失败,当时改了两天脚本,最后查出来是那三台存储满了。
执行前还要做环境准备:设备池统一时区、语言、输入法,关掉不必要的推送与系统弹窗,测试账号与数据批量自动造,执行窗口避开系统升级和网络维护时段。
五种失效症状,怎么倒查
| 症状 | 常见原因 | 处理 |
|---|---|---|
| 偶发超时 | 等待策略太短、固定 sleep | 改智能等待 |
| 换机型全挂 | 坐标定位 | 改元素定位 |
| 文案断言失败 | 机型字体、换行差异 | 断言子串,不比全文 |
| 点击无反应 | 元素被遮挡、未加载 | 加可点性等待 |
| 权限弹窗干扰 | 系统弹窗未处理 | 统一弹窗处理脚本 |
倒查顺序固定:先看设备,再看定位,最后看断言。
设备层排除硬件和健康度问题;定位层确认控件还在不在;断言层确认比对方式对不对。
跳过任何一层,时间都会花在错的地方。
重跑机制这么设计:失败自动重跑一次,区分偶发失败与真实缺陷。
偶发失败标记 flaky 并归因,网络、时序、弹窗三种最常见。
真实缺陷直接进缺陷池。
重跑带固定重试次数上限,别死循环。
再往下看两处:安卓自动化测试 讲的是同一套流程在安卓侧的差异,苹果自动化脚本入门 讲的是 iOS 侧从签名到跑通的完整路径。iOS 15 及以上可以用脱机主程序 v7.2.0 及以上当 USB 自动化服务,官方下载页有预签 IPA。自己签名用个人开发者账号,688 元一年,可绑 100 台,支持 iOS 12 及以上,费用只算签名。巨魔 TrollStore 支持 iOS 15 到 16.6.1,重启会掉签。脱机版只支持 iOS 15 及以上。7.0.0 起单 App 只装主程序,双 App 还要签代理 IPA。EC iOS USB 10.7.0(2026-09-08)起可以用 USB HID,不装板,建议 iOS 17 及以上,和「启动自动化」互斥。
iEasyClick:手机自动化 AI 智能体平台,覆盖安卓免 root、iOS 免越狱(代理/蓝牙 HID/OTG HID)、鸿蒙 Next 三大生态,提供脚本开发、苹果群控、本地中控投屏与云控系统。→ 了解全部产品
想要真实跑起来?
本文介绍的方案均可基于 EasyClick 能力在 iEasyClick 落地。官网提供完整文档、开发工具与自动化产品,免费体验。