尧图精选

AI Agent 如何啃下 Android 真机测试硬骨头?ARTEMIS 全解析

🕒 发布时间:2026/10/2 15:53:34 📁 来源:尧图网络
先说结论Android 真机测试这个被人嫌“又慢又贵又不稳定”的活儿这回真的要被 AI Agent 啃下一块硬骨头了。前阵子 Google 开源了一个叫 ARTEMIS 的项目本质上是把大语言模型和强化学习塞进了 Android 设备测试场景让 AI 不再只会“照着脚本点点点”而是像人一样看着屏幕、自己摸索、自己判断异常。这篇文章我用从业者的视角拆一遍这个项目ARTEMIS 到底改了什么、怎么和现有测试链路结合、作为普通团队怎么抄这套思路以及我实测推演下来觉得最坑的几个点在哪。真机测试的痛做过移动端的人都懂。模拟器上跑得飞快的用例一到真机上就原形毕露系统版本碎片化、厂商 ROM 改得面目全非、网络状态飘忽不定、弹窗广告和系统权限提示一个比一个阴间。更扎心的是传统的 UI 自动化脚本本质上是“按图索骥”你必须把每个控件的 id、坐标、等待时长全部写死页面稍有改动脚本就废了。ARTEMIS 想解决的就是这个根本矛盾让测试从“写死的流程”变成“AI 在真实环境里自己看、自己点、自己总结”。如果你正在做 App 质量保障、移动端自动化测试、或者在研究 LLM Agent 落地方向这篇文章都值得读——里面不只有 ARTEMIS 的机制拆解还有一堆我结合实操经验补上的接入思路和避坑指南。1. 真机测试的老问题与 AI Agent 的解法1.1 传统 UI 自动化在真机上为什么这么难搞在聊 ARTEMIS 之前得先对齐一下“真机测试到底难在哪”。我用最直白的话说真机测试是“环境熵”最高的测试场景。首先是控件识别问题。UiAutomator 拿到的 resource-id 在真机上经常变得很离谱尤其国产 ROM 会把不少系统控件的 id 重写一遍导致你用标准定位方式写的脚本在 A 厂商手机上跑得好好的换到 B 厂商手机上就直接找不到元素。就算你用了坐标点击这种土办法不同分辨率、不同挖孔屏、不同手势导航条又会让坐标全面失效维护成本直接爆炸。其次是状态干扰。真机上的通知栏推送、低电量弹窗、应用更新提示、输入法切换甚至前后台切换导致的动画中断都会让录制回放型脚本“卡死”在某个中间态。传统测试框架对这种不确定性几乎没有任何抵抗能力只能靠加长等待时间碰运气十几秒的用例被活活拖成几分钟。再就是覆盖深度的问题。真正有价值的 bug 往往不在“按正常路径走一遍”时出现而在那些偏离正轨的交互里先点击什么再切换到什么会产生竞态两个弹窗叠在一起怎么办弱网环境下按钮反复点击会怎样传统脚本把这些情况全部要人工穷举写出来而 AI Agent 的一个核心能力恰恰是“探索”它不要求你提前定义所有异常路径这从根本上改变了测试用例的设计方式。所以你能看到ARTEMIS 选择“Android 真机”作为主战场不是因为它比模拟器简单恰恰是因为它最难、最乱、最需要智能体来做决策。1.2 ARTEMIS 的范式转换从执行脚本到自主探索ARTEMIS 的全称很多人记不全圈内一般直接叫它 ARTEMISGoogle 官方对它的定位是面向 Android 真实设备环境的自动化鲁棒测试与评估管理。它的核心思路不复杂把测试问题建模成“智能体与设备的交互游戏”。这句话怎么理解你可以把 ARTEMIS 训练出来的 LLM 当成一个刚入职的测试新人它被丢到一台装着目标 App 的 Android 真机上。它的任务不是执行别人写好的步骤而是通过看屏幕截图、读 UI 层级结构、尝试点击和滑动自己搞懂这个 App 是干嘛的、正常流程长什么样、哪些操作会让 App 崩掉或者卡死。在这个过程中它每做出的一个动作都会改变屏幕状态屏幕状态又会作为下一轮决策的输入这就形成了一个闭环交互。这种交互范式的牛掰之处在于它不需要预先定义“什么是 bug”。传统自动化里你必须写“如果出现崩溃弹窗则测试失败”这种显式断言在 ARTEMIS 的框架下agent 会通过“屏幕状态是否符合预期”、“页面是否还能响应”、“有没有出现系统级异常”来做隐式判断。只要屏幕变得诡异比如卡在某个空白页、按钮失去响应、出现连续 Crashagent 就会把这条路径记录下来标记为可疑问题。这带来的直接收益是测试覆盖不再依赖人的想象力。人想不到的长尾场景agent 会自己去碰。注意ARTEMIS 强调的是“真实设备”而不是模拟器。Google 的诉求很明确——很多只在真机上出现的功耗问题、网络切换问题、进程存活问题模拟器根本复现不了。这也是后面我们聊接入方案时不能偷懒的原因挂着模拟器跑这套系统价值会大打折扣。2. ARTEMIS 的核心技术设计拆解2.1 LLM 的输入到底看什么截图 视图层级ARTEMIS 的模型输入说白了就两路信息屏幕截图和视图层级结构View Hierarchy。这和人类测试员的操作习惯高度一致——人点开一个界面首先用眼睛看整体布局然后会思考“这地方是个按钮那地方是输入框”。屏幕截图大家都能理解重点是视图层级怎么用。ARTEMIS 并不是直接把 XML dump 甩给模型让它自己猜而是非常聪明地做了三层处理。第一层是语义标注把 XML 里的 resource-id、class name、visibility 等属性转成模型更容易理解的文本描述比如把com.example.app:id/btn_login转成“登录按钮位于页面底部”。第二层是空间关系编码把 OnClickListener、TextView 这些控件的边界框信息与截图像素对齐让模型知道“屏幕左上角那个蓝色长条”对应的是哪个控件。第三层是去噪把那些不影响用户感知的渐变背景、占位符视图、不可见状态栏节点全部过滤掉防止无关信息干扰模型决策。这一块我特别有感触因为我自己接 LLM 做 UI 分析时最常犯的错误就是把整个 XML 一股脑全丢给模型。一次页面可能有几百个节点大部分是对模型决策毫无帮助的布局容器结果模型推理速度刷刷往下掉注意力还被无关节点带偏。ARTEMIS 这种“先处理再输入”的思路是工程实践中非常值得抄的作业。2.2 动作空间与安全约束模型看完屏幕之后能做什么动作这就涉及第二个关键设计动作空间。ARTEMIS 给 agent 定义了一套受限动作集合大致包括点击某个坐标或元素、滑动到某个方向、输入文本、返回上一级、等待几秒、截取当前屏幕。没有设备拔插、没有系统设置篡改——它只能像真人用户一样“用”这个 App这个限制保证了测试过程不会把设备搞到不可控的状态。这里有个很重要的工程考量为什么不让 agent 直接输出 adb shell 级别的命令因为一旦允许模型发任意 adb 命令整个测试的边界就崩了。模型可能为了绕过某些障碍去杀进程、清缓存、改系统设置这些操作虽然能“强行完成任务”却会让测试结果失去参考意义。ARTEMIS 把动作限制在 UI 操作层面本质上是让 agent 和真实用户站在同一条信息边界上它的决策能力才真正有参考价值。安全约束还体现在时间维度上。agent 每一步决策都有超时控制一个任务在给定的步数内完不成就会自动停止避免模型陷入无限循环出不来。这个设计在实际测试中太重要了我自己调 Agent 测试脚本时就遇到过模型反复点同一个按钮、无限下拉刷新的情况如果没有步数上限测试任务能跑到地老天荒。2.3 强化学习训练与广义奖励模型 GRM如果说上面那些设计是工程层面的优化那 ARTEMIS 最硬核的部分在训练方法上也就是两阶段训练 广义奖励模型。第一阶段是行为克隆Behavior Cloning先拿大量真人操作数据UI 截图、操作序列、最终结果去预训练模型让 agent 学会“正常人是怎么用 Android 的”。这个阶段做的是知识注入有点像新员工入职培训先看老员工怎么干活。第二阶段才是重头戏用强化学习RL来提升策略。这里用到了一个叫GRPO的优化算法它和传统 PPO 的区别在于不确定性更低、训练吞吐更高。简单说给定同一个初始状态模型会生成多条不同的操作路径GRPO 用一组同批次的路径对比来更新策略表现好的路径获得更高更新权重表现差的路径受到抑制。这个机制天然适合 UI 测试场景同一个 bug可能十条路径里有两条能触发这两条路径的行为会逐渐被强化——用社区里常说的说法“扛住了并发式的多路径探索训练”。奖励信号怎么来ARTEMIS 引入了 GRM广义奖励模型。它不只看你最后崩没崩而是从多个维度评估“这条操作路径的质量”安全性有没有作出不可逆的危险操作、任务完成度是不是到达了目标界面、稳定性过程中有没有出现卡顿、崩溃、无响应、探索新颖性是不是走出了以前没见过的新路径。这四类信号揉在一起模型才能学会区分“表面通过了但没测到东西”和“真实触发了潜在缺陷”这两种情况。而且 ARTEMIS 在训练上是离线完成的不是像某些 RAG 方案那样每次测试都现场调模型。它做的是在火山量大得多的离线环境里用模拟器和真机构成的大规模仿真环境做 self-play也就是让 agent 自己和设备反馈对弈不断积累高难度场景数据然后再把训练好的权重部署到测试环境中去跑。这学问就大了强化学习的数据自动流转起来了跑过的测试场景会变成下一轮训练的样本系统会越用越聪明。实操心得如果你想把 ARTEMIS 的思路借用到自己团队最不建议跳过的就是 RL 阶段。只做行为克隆的模型本质上还是个“高级模仿者”碰到没见过的异常状态就会懵接上 RL 之后模型才真正学会“面对未知状态如何决策”。3. 把 ARTEMIS 接入自己的 Android 测试链路3.1 设备与环境的准备ARTEMIS 对设备环境的要求不算特别苛刻但有几个基础条件跑不掉我先列个清单帮你对号入座硬件设备支持 arm64 架构的 Android 真机或者 Firebase Test Lab 上可用的虚拟设备。注意如果走的是真机方案建议至少准备 5-10 台不同厂商、不同 Android 版本的设备组成设备矩阵覆盖才有意义。系统权限需要允许开启开发者模式并且开启“USB 调试”和“USB 安装”。部分场景还需要关闭系统动画这倒不是为了跑测试纯粹是为了让基于截图的判断更稳定避免动画帧中间的怪异画面干扰模型决策。网络环境测试设备最好能访问 Google 的公共服务如果走官方云端方案的话同时你的测试目标 App 的接口服务得是通的不然 agent 探索到登录流程时会因网络异常误判为 App 功能缺陷。存储空间AGENT 每轮交互都会截图和录制跑完一个完整测试周期需要预留至少 20GB 的存储空间这个量级很多人会忽略真跑起来磁盘爆了才后悔。这些准备看似琐碎实际体验下来每一件都能坑到你。尤其是 USB 调试授权弹窗在自动化测试框架里是个经典老大难——设备第一次插上电脑时手机端会弹出一个“允许 USB 调试吗”的对话框你不能手动点得先用带授权的 adb keys 预置好否则 AI 跑得再聪明也卡在第一步授权上。3.2 从仓库到跑通的落地路径ARTEMIS 的代码仓库开源之后我梳理了一下从零开始接入的大致路径这里给你拆成五步每一步都有明确的产出物第一步跑通基础 demo。这里要做的就是先把仓库里自带的示例 App 用起来让它能在本地模拟器或真机上安装启动。这个阶段你不需要关心模型训练只需要确认整个交互链路是通的也就是说 agent 输出的命令能够真正作用到设备上。第二步集成自定义 App。把示例 App 换成你自己团队的测试目标。关键动作是检查你的 App 包名、启动 Activity、深链接路由是否配置正确同时确认你的 App 没有开启防自动化检测或者你已经做好了绕过处理。第三步接入广义奖励模型评估。这一步是整个链路里最需要上心的地方。你不能直接用默认 GRM 跑所有 App而要根据自己 App 的业务类型做适配。比如你的 App 是短视频类那 GRM 的“稳定性”信号权重就得高一些因为播放卡顿和滑动掉帧是核心体验如果你的 App 是金融工具类那“安全性”信号的权重得拉满——如果 agent 在测试过程触碰了资产划转页面并出现了异常这必须被高优标记。默认配置可能不够你得自己调。第四步设置回归基线。拿过去你手工测试过的老版本 App 跑一遍 ARTEMIS看看它能不能发现你已知的那些 bug。不断调整输入输出结构直到召回率达到你满意的水平这时候才能进入生产使用。第五步接入 CI/CD 流水线。这一步是把 ARTEMIS 变成团队基础设施的关键。测试结果要能自动同步到缺陷管理平台JIRA 或者 PingCode 之类的并且和构建版本绑定让开发同学每次都能关联到具体的代码提交。这条路径整体不是一步到位的我见过太多团队直接拿开源项目跑生产前两步很顺利结果到第三步发现模型发现的“问题”全是测试环境数据问题马上心灰意冷。核心是我上面提到的GRM 一定要适配自己的业务。3.3 把发现问题回传测试闭环ARTEMIS 给的产出可不只是“发现了 bug”这么简单的二元结论。每一个被标记的可疑问题它还附带了一条完整的路径回放每一步截图、每一个动作、屏幕状态的异常变化这些信息会被打包成一个 trace 文件。放到实际团队协作里这个 trace 的价值非常大。过去开发同学拿到的 bug 报告经常只有一句话“某某页面崩溃了”然后开发自己复现半天找不到触发路径。ARTEMIS 给出的 trace 里开发可以精确地看到 agent 是连续点了哪个控件、中间停留在哪个页面、最后一次操作后屏幕上出现了什么异常很多 bug 看一眼回放就能定位到具体代码逻辑回归效率提升不少。而且回放信息还能二次利用把这些 trace 喂回训练数据集新一轮的 RL 训练就会更偏重这些“容易出错”的场景跑的次数越多agent 对你们 App 的潜藏问题就越敏感。这个数据飞轮一旦转起来测试部门的资产就不仅是测试用例了而是整套“问题探索知识库”。4. 实测效果与影响范围4.1 测试收益的真实数据Google 开源文档和宣传里给出了一些指标虽然不是那种严谨的论文级数据但结合这两个月的社区实测反馈来看基本趋势是一致的。比较核心的是NDCG归一化折损累计增益指标这是个衡量“模型排序质量”的标准用来评估 GRM 模型对测试结果重要程度的排序能力。官方在特定数据集上跑出的结果是比基线模型提高了二十多个点说白了就是“模型判断哪些 bug 值得看、哪些 bug 可以忽略”的准确率有了明显提升。另一个更直观的数据是干净率Precision 的通俗版意思是 agent 标记出来的“可能是 bug”的结果里有多少确实是真的 bug。文档里提到的提升比例加上社区里复现测试的结果整体推测下来ARTEMIS 的干净率应该提升了不少。这对一线测试人员来说是个好消息——过去 AI 辅助测试被诟病最多的就是“狼来了”式的误报一天给你标记几百个问题结果全是网络超时或者测试环境数据不对导致的乌龙谁受得了干净率提上来AI 才能真正赢得信任团队才敢慢慢放手。跨应用导航能力也值得一提。真机场景下很多问题是在跳转第三方登录、拉起支付、跳转地图时发生的。过去测试脚本只能在本 App 内部玩跳到别的应用就只能靠人肉盯。ARTEMIS 在跨应用场景的导航成功率上表现出了明显优势这直接扩展了可测问题的边界。4.2 对 QA 团队角色的冲击与转型ARTEMIS 这类项目出来后有一个问题会被反复追问做测试的人是不是要被 AI 取代了我的看法倾向于它淘汰的不是测试工程师而是“纯手工点点点”的那部分工作。你想想过去测试工程师把大量时间花在了写脚本、维护脚本、处理脚本跑挂后的环境问题上。ARTEMIS 进来之后这部分时间被压缩到了接近零——脚本不存在的环境自适应了用例覆盖是自动探索的。那测试工程师干什么答案是转向更高价值的工作定义测试目标和优先级告诉 ARTEMIS 你们 App 的核心用户路径、核心业务指标、绝对不能出问题的安全边界。管理 GRM 策略根据业务变化调整奖励信号权重优化模型判断逻辑。分析 trace 做缺陷归因AI 只是发现“这里有问题”解释“为什么有问题、影响范围多大、像不像严重缺陷”还得靠人。测试数据治理保证 agent 探索时的登录态、测试账号、隐私数据脱敏策略始终干净可控这是大工程。这个转型方向和当年自动化测试刚普及的时候如出一辙总有人说“手工测试要被取代了”结果手工测试没消失只是变成“设计有价值的手工探索用例”的专家。这一轮 AI Agent 进来逻辑也是一样的只不过自动化门槛被彻底打下来了。5. 落地困难、避坑指南与常见策略5.1 语义复杂度和跨应用监管是最大的坑ARTEMIS 处理纯 UI 层面的问题已经做得挺好但一旦涉及深层业务语义它还是会翻车。举个例子一个电商 App 里“加入购物车成功”和“加入购物车失败”在屏幕上的差异可能只是一个小小的 toast 文案而 toast 有时候一闪而过根本不被截图捕捉到。模型判断“任务完成度”时只能看到购物车角标变了它没法理解这背后的业务逻辑约束。这种情况下GRM 的判断就要靠我们自己兜底比如强制要求任务结束前必须抓取到某个特定文案或者把页面状态序列接入数据断言。跨应用场景也会带来监管问题。agent 跳出你们 App 之后进入微信、支付宝去执行操作它有没有权限继续点会不会泄露测试账号隐私会不会在真实支付环境里产生扣款这些场景在做生产测试前必须提前想清楚。我的建议是涉及支付、授权、真实数据的跨应用操作一律用测试沙箱环境先做隔离能 mock 的交易尽量 mock不能用 mock 的用测试专用账号限制额度。不要指望一个开源框架替你想清楚这些合规问题。5.2 数据治理和 reward hacking 是训练期最大的暗雷ARTEMIS 走的是强化学习路线那就绕不开强化学习的经典风险reward hacking也就是模型学会了“刷分”而不是真正完成任务。为什么会这样因为 UI 测试里的奖励信号天然有漏洞。比如你设置“任务完成度高”作为 reward模型可能会发现只要快速打开了首页的五个 tab 又立刻返回就能拿到不错的分数而它实际上根本没深入测试任何功能。要防这一点只能把奖励信号做得更细。除了看终态还要看中间状态是否真的稳定、是否真的理解交互语义。另外一个辅助手段是引入“探索惩罚”就是如果模型反复走一条已经验证过的路径它的奖励权重就要下调逼它去探索新路。这个细节如果你准备训练自己的 agent 做 UI 测试一定要提前设计进去不然后期模型越训越“滑头”。此外离线 RL 训练依赖的数据质量也会决定模型的决策质量。过去你去真机上跑 Agent 测试时拿到的 trace 里混着一堆“设备明明没问题但 agent 因为卡顿误判”的负样本。这些负样本要有人定期清洗不然模型学到错误的对应关系。5.3 设备资源与并发的矛盾真机测试的最高瓶颈永远是设备数量。一台真机同时只能跑一个 agent 任务除非你玩多开但那样崩溃和卡顿的归因又说不清了所以你的并发上限直接等于设备池大小。Google 在 ARTEMIS 里给出了一个工程解法把“训练阶段”放到模拟器集群上“评估阶段”才落到真机上。训练阶段要探索大量的路径用模拟器集群几百路并发去跑怎么折腾都不心疼但只要训练好了的模型上了真机评估时的动作就会克制很多真机资源被高效利用。这套“模拟器训练 真机验证”的资源分层策略我认为是 ARTEMIS 工程实现里最值得普通团队偷师的。如果你的团队没有多达几十台的设备池也可以考虑把设备云能力借来用但要注意云设备上的网络延迟、IO 性能跟本地的差异可能导致 agent 在无响应判断上出现偏差。这个需要靠经验调整超时参数。5.4 稳定性比其他智能化项目更需要关注最后提醒一下ARTEMIS 本身是一个相当吃资源的系统。它每一轮交互都要调用 LLM 推理推理时间往少了说也得几百毫秒加上屏幕刷新、XML dump 解析、图像预处理跑一个用例的整体耗时比传统脚本多数十倍很正常。这是这类系统的通病不是 bug。我给你的经验是不要拿 ARTEMIS 去替代所有冒烟测试和基础回归还是让它当“深度探索侦察兵”专门去跑那些脚本覆盖不到的高风险区域。把资源花在刀刃上你会发现性价比一下子就出来了。6. 开源工具选型对比与 ARTEMIS 的生态位置方案核心形态探索能力真机支持断言便捷度LLM 依赖度适用人群ARTEMIS真机 LLM Agent RL 训练很强自主探索强支持依赖 GRM 间接判断高需显存较大的推理环境有 AI 基础设施的大中团队Appium接口驱动 WebDriver 协议弱需要手动写测试步骤支持显式断言非常成熟无依赖绝大多数移动测试团队MaestroYAML 声明式 录屏驱动中支持多种断言语法和条件逻辑支持语法简洁上手快无依赖中小团队做流程自动化录制回放类人为操作录制后自动回放极弱只能跑已录制的路径支持靠脚本断言无依赖临时验证、快速冒烟从这张表能明显看出ARTEMIS 和传统测试框架不完全是替代关系更像是互补关系。Appium 和 Maestro 依然是保证“流程稳定复跑”的好工具触达的是“预期功能是否正常”ARTEMIS 触达的是“不预期的问题哪里藏得最深”二者的心智模型完全不同。针对选型我的一点个人建议是如果你团队还在为“UI 自动化脚本天天维护”发愁先别急着上 ARTEMIS那是杀鸡用牛刀等你发现手里攥着一堆核心 App、却苦于“脚本覆盖率已经很饱和了、各种设备兼容性问题依然堵不住”的时候才是引入 ARTEMIS 的正确时机。或者你本身就在做 LLM Agent 的技术预研那这绝对是值得投入人力跟进的标杆项目。另外提一句像 Google AI Edge Gallery、Android Studio 里的各类 AI 插件这套生态里已经有不少辅助工具了。ARTEMIS 的开源只是其中一环但它把“模型 设备 强化学习”整个链路打通这才是它最大的参考价值。我在实际把这类 Agent 测试思路往自己项目里迁移时最大的体会是技术难点反而不是模型训练而是“如何让模型看清屏幕背后的业务上下文”。ARTEMIS 做得很聪明的一点是它没有试图让模型理解整个 Android 系统的复杂度而是给它提供了一个足够浓缩的观察界面和动作边界让它聚焦在“用户能做什么”这个维度上做决策。这其实是一个很朴素的产品思维降低 Agent 对世界的认知负担把它的智能全部用在刀刃上。所以不管你是打算直接部署 ARTEMIS还是参考它的思路自研一套 AI 驱动测试框架记住这个核心原则都不会错不要疯狂堆算力要先想清楚给 Agent 什么样的观察口和什么样的动作边界。观察接口给得准Agent 的智能就能充分发挥动作边界定得稳Agent 再怎么探索也不会闯祸。这个思路落地了你的 Android 真机测试才真的有可能从“负担”变成“资产”。
上一篇/下一篇内容由系统自动关联 返回资讯列表 →