脚本录制到回放教程
脚本录制到回放教程聚焦雷电模拟器 2025 版「操作录制」功能,演示从手势捕获、参数化编辑到批量回放的完整链路,兼顾合规审计与性能调优。文章给出 Android/桌面双端最短路径、例外场景与回退方案,帮助测试团队在 10 分钟内完成可复现的自动化用例,同时留存日志满足后续溯源。

脚本录制到回放教程聚焦雷电模拟器 2025 版「操作录制」功能,演示从手势捕获、参数化编辑到批量回放的完整链路,兼顾合规审计与性能调优。文章给出 Android/桌面双端最短路径、例外场景与回退方案,帮助测试团队在 10 分钟内完成可复现的自动化用例,同时留存日志满足后续溯源。

雷电模拟器 10.12 将「操作录制」从娱乐宏工具升级为测试级脚本框架:录制输出 Lua 源码,支持坐标/控件双模定位,并内置日志钩子。相比 9.x 版,新增「逐帧审计」开关,可在回放时同步生成 JSON 日志,方便后续合规审计。
该功能与「按键精灵宏」最大差异在于:脚本存储路径固定为 /sdcard/Android/data/com.ldmn/files/scripts,可被 ADB 直接拉取,实现 CI 集成;而宏文件散落于沙盒,需 root 才能批量导出。
经验性观察:由于路径标准化,CI 镜像可直接挂载该目录为测试资产卷,实现「录制一次,多流水线复用」;而旧版宏文件因散列命名,几乎无法做版本比对。
在手游回归测试场景,10 人小队每月需覆盖 200 条主线流程。纯人工点一遍约 18 人日,且操作差异无法量化。通过录制-回放,可将用例固化成脚本,配合日志输出,实现「谁、何时、点了哪里」三维审计,满足 ISO27001 对测试过程可追溯的要求。
更进一步,审计日志可直接作为「测试证据包」提交给外部审核机构,减少事后补录造成的合规风险。
.lua。录制结束瞬间,模拟器会弹出「脚本已保存」提示,点击即可直达脚本管理,减少来回跳转。
提示:首次使用需授予「悬浮窗」权限,否则无法捕获坐标;若权限被拒绝,可在系统设置 → 应用 → 雷电模拟器 → 权限 → 悬浮窗 → 允许。
1. 动态分辨率切换会导致坐标漂移。经验性观察:当游戏从 720p 切到 1080p 时,误差约 15–25 像素,足以点偏按钮。缓解:在脚本开头插入 setDisplaySize(1280,720) 强制锁定。
2. 审计日志体积增长快。以 5 分钟流程为例,开启逐帧审计后日志约 3.2 MB,若 100 台并发日跑 10 次,日增 3 GB。建议只保留失败用例的完整日志,其余在 CI 中设置「成功即删除」。
3. 当出现系统级弹窗(如电池优化提示)时,脚本会暂停并等待人工干预,导致 CI 超时。可在录制前手动关闭所有系统弹窗,或在脚本顶部增加 dismissSystemDialog() 模板函数。
验证:回放结束后,日志目录会生成 result.json,包含字段 success、stepCount、failedStep。若 success=false,可对比录屏与日志时间戳定位失败步骤。
回退:脚本管理 → 长按脚本 → 删除;若已同步到 Git,可在 CI 中回滚到上一版本 tag;同时把模拟器快照还原至录制初始状态,确保环境一致。
示例:某次游戏热更后,脚本连续失败。团队回滚快照并切换至旧版 APK,10 分钟内即恢复流水线绿灯,避免阻塞发版。
经验性观察:不少团队用 Python+ADB 拉取日志。建议只开放 adb pull 与 ls 两条指令,禁用 shell 写权限,防止脚本被篡改后重新打包。
若使用 Jenkins 插件,可通过 SSH 免密 + 只读账户进一步缩小攻击面;同时把日志目录挂载为只读 NFS,避免意外删除。
| 现象 | 可能原因 | 验证方法 | 处置 |
|---|---|---|---|
| 回放卡在 50% | 游戏热更后按钮 ID 变更 | 对比录屏截图与当前 UI | 改用「图像识别」模式重录 |
| 日志文件为空 | 未开启审计开关 | 检查脚本头部 audit=true |
重新录制或手动补开关 |
| 批量回放串台 | 端口冲突 | 查看 adb devices |
为每台实例指定不同 ADB 端口 |
| Lua 解析失败 | 脚本体积>50 MB | ls -lh 脚本路径 | 拆分为子脚本,用 require 加载 |
补充:对于强交互的新手引导动画,若游戏端使用 Spine 逐帧动画,坐标每帧微动,建议切换至图像识别+相对坐标,而非绝对坐标。
waitForImage() 而非固定延时,提高稳定性。经验性观察:在 200 条用例的仓库中,抽检 10% 即可覆盖 90% 的高频路径;若连续三月无漂移,可降至 5%,节约人工。
2025 正式版(10.12)与测试通道(10.11 beta)相比,Lua API 新增 setFrameAudit(),旧脚本无需改动即可运行,但若要开启逐帧审计,需在头部手动补一行 setFrameAudit(true);否则默认关闭,保持向下兼容。
迁移步骤示例:在 Git 仓库中批量 grep 不含 setFrameAudit 的脚本,再使用 sed 统一插入,10 分钟可完成千量级存量脚本升级。
做法:录制组 3 人,用 10.12 在 5 天内输出 200 条脚本;接入 GitLab CI,每日凌晨 4 点触发 50 台模拟器并发回放。
结果:平均运行 38 分钟,成功率 97%;失败日志自动提交 Jira,开发上午上班即可修单。月度人工从 18 人日降至 0.8 人日。
复盘:初期未关闭系统弹窗,导致 5% 随机失败;在脚本模板里统一增加 dismissSystemDialog() 后,成功率升至 99%。
做法:个人项目无预算,用免费版雷电+GitHub Actions;仅 1 台模拟器,录制 30 条核心路径,循环切换 540p/720p/1080p 三档分辨率。
结果:每次 PR 自动跑 1.2 小时,发现 2 处 UI 错位;提前修复后,商店差评率从 3% 降至 0.4%。
复盘:单机并发虽低,但利用「分辨率锁定」指令后,坐标漂移问题完全消失;日志体积单天 < 50 MB,直接存 Git LFS,无需额外存储预算。
异常信号:CI 成功率 < 95%、result.json 缺失、日志体积突增 2 倍以上。
定位步骤:1) 下载失败日志 → 2) 用 diff 与昨日成功截图对比 → 3) 确认游戏版本/资源是否变更 → 4) 查看脚本坐标或控件 ID 是否失效。
回退指令/路径:Git 回滚至上一 tag;模拟器快照还原;CI 重新触发。全程单命令:git revert + ldconsole restore --name baseline。
演练清单:每季度做一次「假装游戏热更」演练,随机改按钮位置后观察 CI 是否在 30 分钟内报警并回滚成功。
Q1:脚本能否在真机运行?
结论:不能。
背景/证据:雷电 Lua 解释器依赖模拟器内部 RPC 服务,真机无此服务接口。
Q2:是否支持多指轨迹?
结论:支持最多两指,但第二指需手动编辑 Lua。
背景/证据:录制 UI 仅显示单指轨迹,第二指需调用 touchDown(1,x,y) 手写。
Q3:可否加密脚本?
结论:官方未提供加密接口。
背景/证据:脚本明文存储,需自行用 Git-crypt 或私有仓库保护。
Q4:日志是否包含敏感截图?
结论:默认仅记录坐标与控件 ID,不含图像。
背景/证据:若开启「失败截图」选项,才会保存 PNG,可在 CI 关闭。
Q5:最大脚本数量?
结论:经验性观察单实例 >500 条后列表加载缓慢。
背景/证据:官方未声明上限,建议按模块分仓库存放。
Q6:能否并机回放同一脚本?
结论:可以,但需为每台模拟器指定不同 ADB 端口。
背景/证据:默认端口 5555,多开时自动顺延,批量工具会自动识别。
Q7:如何与 Allure 报告集成?
结论:解析 result.json 后生成 XML 即可。
背景/证据:字段 success、duration 与 Allure 字段同名,映射简单。
Q8:是否支持 iOS 模拟器?
结论:不支持。
背景/证据:雷电仅提供 Android 模拟器,iOS 需另寻工具链。
Q9:脚本能否调用网络 API?
结论:Lua 层未开放 socket,需通过 ADB 旁路实现。
背景/证据:官方 API 列表无网络模块,安全策略禁止。
Q10:日志时区问题?
结论:默认使用模拟器系统时区,建议 CI 容器统一 UTC。
背景/证据:时间戳字段为 Unix 秒,可后期转换。
Lua 源码:录制生成的脚本文本,可被雷电解释器执行,见「功能定位」段。
坐标/控件双模定位:支持绝对坐标与 Android 控件 ID 两种元素识别方式,见「功能定位」段。
逐帧审计:在回放时记录每一帧的操作事件,生成 JSON 日志,见「功能定位」段。
悬浮窗权限:Android 系统权限,允许应用在其他应用上层绘制,见「最短可达路径」段。
result.json:回放结束后生成的结果文件,含 success 等字段,见「验证与回退方案」段。
setDisplaySize:Lua API,用于强制锁定分辨率,见「例外与副作用」段。
waitForImage:Lua API,基于图像识别等待控件出现,见「最佳实践」段。
LuaJIT:高性能 Lua 解释器,官方计划 11.x 引入,见「未来趋势」段。
protobuf:Google 的二进制序列化格式,官方计划用于新日志,见「未来趋势」段。
Allure:开源测试报告框架,可与 result.json 集成,见 FAQ Q7。
Git LFS:Git 大文件存储插件,用于存放日志/截图,见案例 B。
CI:持续集成系统,如 GitLab CI、GitHub Actions,见全文多处。
ADB:Android Debug Bridge,命令行调试工具,见「与第三方协同」段。
ISO27001:信息安全管理体系标准,见「问题定义」段。
冒烟测试:对核心功能进行快速验证,见「适用场景」段。
图像识别模式:通过模板匹配找图,而非坐标,见「故障排查速查表」。