ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

AI自动化测试框架实测:自然语言驱动UI测试,能取代传统框架吗?

AI自动化测试框架实测:自然语言驱动UI测试,能取代传统框架吗?

这标题多少有点“震惊体”的味道。但作为一个天天跟UI自动化打交道的人,看到某大厂突然又丢出一个AI驱动的开源自动化框架,我的第一反应不是跟着喊“传统框架慌了”,而是想搞清楚一件事:这玩意儿到底是真能打,还是又一个披着AI外衣的Demo?

周末我把它拉下来,在模拟项目上跑了几个完整流程,又翻了开源社区的讨论帖。说实话,确实有点东西,但远没到“马上删掉Y框架脚本”的程度。下文不吹不黑,讲讲这个AI自动化框架的原理、实测过程、能力边界,以及我踩到的一堆坑。

1. 从脚本维护地狱说起:传统UI自动化为什么让人又爱又恨

1.1 你以为的自动化测试,实际是“天天修脚本”

很多团队上自动化测试的初衷,都是希望“写一次,跑一年”。结果是:自动化脚本第一周跑得飞起,第三周开始红得发紫。今天App改了个按钮文案,明天按钮ID变了,后天弹窗多了一层蒙层,脚本就全废了。我们曾经统计过,一个中等规模的App回归测试,日常维护成本能吞掉自动化收益的40%到60%。

这不是某个团队的执行力问题,而是传统UI自动化的底层逻辑决定的。

1.2 传统框架压不垮的三座大山

传统UI自动化框架(就是大家常说的老牌工具Y)之所以稳定,靠的是“精准定位”和“顺序执行”。问题也恰恰出在这两个词上:

第一座山叫元素定位。你用ID、XPath或者Accessibility标签定位一个按钮,但这玩意儿只要前端一重构,脚本里那个path就变成了废纸。更别提不同平台上同一个控件的属性命名还不统一。

第二座山叫时序配合。App加载有快有慢,动画有长有短,网络有抖有稳,传统的“等到元素出现再点击”策略,遇到网络慢的时候,动不动就给你报一个超时。

第三座山叫跨端适配。同样的用例,要在Android、iOS、Web上各写一遍。即使底层框架帮你抹平了部分差异,但业务逻辑上的分支处理,代码量依然是成倍增长。

这三座山,是所有从业者每天都在硬扛的日常。

1.3 新框架为什么选择“自然语言”作为入口

这次某大厂开源的AI自动化框架,最直观的切入点不是“继续优化定位”,而是直接换了一套交互逻辑:你用一句自然语言描述想干什么,它自己去理解、拆解、定位、执行。

比如你不再写“driver.find_element_by_xpath('//...').click()”,而是写“打开首页左下角的购物车,点击去结算”。剩下的活——找到购物车在哪、长什么样、怎么点、点了之后页面怎么变——全交给AI去推理和判断。

从“命令式编程”到“意图式描述”,这本质上是让测试人员从实现细节里解放出来。这也解释了为什么它会让大家觉得“传统框架慌了”:因为它动的是传统框架最稳固的基本盘——定位策略和执行逻辑。

2. 新框架凭什么敢“叫板”老牌工具:AI驱动的三层核心机制拆解

2.1 第一层:从描述到动作的意图理解

传统框架里,一条测试用例是一串有序的动作序列。而在这个新框架里,用例是一句或多句自然语言描述,内部通过一个大模型来执行意图理解。

我深入研究了下它的处理流程,大致可以拆成三个步骤:

  • 任务解析:把“打开首页左下角的购物车,点击去结算”这句话拆成两个子任务——定位购物车、触发结算操作。
  • 元素候选生成:模型根据页面结构,给“购物车”这个语义生成候选定位方案,比如根据文本内容、相邻控件、图标形状等。
  • 动作规划:结合前两步,生成一个可执行的动作序列,并在执行前先做一轮风险判断(比如当前页面是否已加载完成、是否有弹窗遮挡)。

这一层最大的进步,是不再依赖“精确匹配”,而是依赖“语义匹配”。哪怕按钮文案从“去结算”改成“提交订单”,模型也能通过上下文理解“现在需要执行的是结算行为”,而不是直接报元素找不到。

2.2 第二层:UI感知与自适应定位

光能理解意图还不够,你得真的“看到”屏幕。这层机制是框架X和传统工具在架构上的核心分水岭:它把UI视图树、截图语义、空间坐标三者融合起来,在每次执行时动态建一张“页面语义地图”。

具体拆解一下:

  • 视图树快照:类似传统框架拿到的控件层级,但框架不会直接依赖层级里的静态ID,而是把它当成一种“候选信息”,会结合截图语义来综合判断。
  • 截图语义嵌入:模型会把当前屏幕截图编码成语义特征。比如看到页面上有个橙色的圆形按钮,模型会结合视图树判断“这大概率是购物车图标”,而不是等一个残缺的resource-id。
  • 坐标与边界推理:一旦锁定控件,“点击”操作不再依赖绑定的元素对象,而是通过空间坐标和区域边界传入底层驱动执行。

这套机制带来的直接好处是:元素属性变了,只要视觉语义没变,脚本大概率还能跑。页面为了适配不同尺寸改了布局,AI也能通过视觉信息重新找对位置。

2.3 第三层:失败自愈与上下文记忆

这是最惊艳的部分,也是我实测的时候真正“哇”出来的地方。

传统框架执行失败,顶多给你截个图、打个日志,然后告诉你“这儿有个按钮没找到”。至于为什么没找到,它不管。而这个AI框架自带一层失败自愈机制:

  • 当某个动作执行失败,它会先分析失败原因,是“元素没出现”“元素被遮挡”还是“点击后页面没响应”。
  • 然后根据原因调整策略:如果是没出现,它会延长观察窗口,并且在后续动作里加入等待条件;如果是被遮挡,它会尝试滚动、收起键盘、关闭弹窗;如果点击后没响应,它会重新截图,判断页面是否真的跳转,而非直接报错。
  • 自愈过程全部记录在当前“会话记忆”里,后续步骤会带着这段上下文继续执行。

这意味着什么?意味着AI执行测试时,它在“不断试错并修正”,而不是一条道走到黑。这种自适应能力,确实是静态脚本做不到的。

2.4 与传统执行链路的关键差异对比

把两代框架的链路摆在一起看,差异会更清晰:

维度传统框架YAI框架X
用例表达代码/脚本自然语言
定位方式静态选择器语义+视觉+坐标融合
失败处理报错+截图原因分析+自动修正
跨端适配各端独立写脚本同一描述,同一套模型
维护精力高强度关注业务变更,弱化元素变更
可重复性非常高高但有概率波动
成本纯计算资源计算资源+模型调用开销

这张表基本讲清楚了:它不是在“自动化测试”这个小赛道上和传统框架赛跑,而是想把赛道本身拓宽。

3. 实测记录:让AI跑通一条“登录-搜索-下单”全流程用例

3.1 环境准备:装框架X、起一个模拟电商App

说再多原理都不如跑一遍。我的测试环境是一台普通的MacBook,一个模拟电商App(某模拟项目X),使用开放版SDK和配套的驱动服务,没有做特别的优化配置。

安装步骤很常规:拉取框架X的仓库,安装依赖,配置好项目路径,启动驱动服务。这里有一个建议:先用它跑官方自带的Demo,确认端到端链路是通的,再上自己的项目。一上来就拿着自己复杂的业务App去试,遇到问题时你很难区分是框架能力不够,还是环境配置问题。

整个安装过程大概20分钟,没有遇到特别反人类的坑。

3.2 把用例从“代码”换成“人话”

我挑了一条最典型的回归路径:登录、搜索商品、加购物车、下单。传统框架下,这条用例需要四段代码,涉及十多个定位符和多个等待策略。而在这个AI框架里,用例长这样:

1. 打开商城App,点击“我的”,进入登录页 2. 使用手机号133XXXX1234登录,密码输入正确密码 3. 登录成功后回到首页,在搜索框输入“蓝牙耳机” 4. 从搜索结果中打开第一个商品详情页 5. 点击“加入购物车”,并点击购物车入口进入购物车 6. 点击“去结算”,确认订单页出现

每一条都是一句自然语言。我故意没写任何“预期结果”,也没指定任何控件ID,打算看看它能靠语义做到什么程度。

3.3 执行过程:AI是怎么“思考”的

启动执行后,框架X会输出一段“推理流”,你可以看到它是怎么理解当前页面的。比如执行第三步时,日志大致是:

[意图] 在首页搜索框中输入“蓝牙耳机” [观察] 检测到当前页面为首页,包含搜索框,占位符文本为“搜索商品” [决策] 点击搜索框,输入文本“蓝牙耳机”,触发搜索 [验证] 页面跳转至搜索结果页,识别到商品列表

整个过程像有个测试工程师在旁边“看着”页面干活,而不是一架按轨道运行的机器。

最让我意外的是第五步“点击购物车入口进入购物车”。实际执行时页面右下角有个悬浮的购物车图标,图标下方没有文字标签,视图树里只有一个语义不明的容器。传统脚本在这里大概率要依赖坐标写死。而框架X通过截图语义识别出这是购物车入口,正确完成了点击。

“登录-搜索-下单”整条链路跑下来,一次通过,包括中间出现的两个小偏差:一个按钮文案和我预期不一致,一个弹窗遮挡被它自动关闭了。

3.4 踩坑记录:AI不是万能,以下问题确实存在

  • 脏环境会带偏AI。有一次我保留了上一次会话的登录态,用例里的“点击登录”这步就找不到登录按钮,因为用户已经登录了。AI没有“常识”——它不知道应该先退出登录。解决方案是在用例开头加一句“确保当前处于未登录状态”,再配合一个环境重置步骤。
  • 模糊的意图会随机执行。比如“随便看看首页”这种话,AI会真的到处点。建议用例描述里把动作和对象写清楚,避免模糊表达。
  • 自愈不是无限重试。当页面连续加载失败三次以上,AI会停止自愈并抛出一个综合报告。此时再去排查,多半是后端接口挂了,不是UI适配问题。

这部分经历让我确信:AI框架解决的是“定位和描述”的问题,解决不了“测试设计和数据准备”的问题。后者依然得靠人。

4. 别急着重构:新框架的能力边界与“传统框架Y”的看家本事

4.1 它真正擅长的三类场景

实测下来,AI框架X在以下场景的体验是碾压传统框架的:

第一类是探索式回归测试。不需要事无巨细地写步骤,给一句“检查个人中心所有入口能不能正常打开”,它能自己遍历页面里的每一个入口,并逐个验证跳转,异常时会给出报告。这个场景传统框架要写几十个用例,还不一定覆盖得全。

第二类是跨端主流程验证。同一套自然语言描述,直接让模型在Android端跑一遍,再切iOS端跑一遍,不需要为每个端各写一份脚本。我们团队平时最耗时间的就是双端用例维护,这个能力直接砍掉了一半工作量。

第三类是高强度变更场景。业务处于快速迭代阶段,UI一天一个样。传统框架脚本改起来叫苦连天,而AI框架对文案和布局变更的抗性高得多,因为它是靠语义认东西的。

4.2 它搞不定的硬骨头

但话说回来,有几个硬伤让我没法狠心“All in”。

  • 强断言场景很脆弱。比如“断言订单金额必须等于139.90元,且优惠券抵扣后为119.90元”,AI不是不能做,而是它的选择是“猜测接近答案”。一旦业务规则复杂了,它给出的断言依据往往是页面文本,而不是后端数据模型——这对金额校验来说是不够的。
  • 性能测试不是它的活。它本质上还是一个UI行为驱动框架,响应时间是毫秒级还是秒级,跟它无关。你要想知道接口压测到多少QPS,还得走专业的性能链路。
  • 复杂业务规则学习成本高。比如某些活动逻辑是“满300减50,但仅限新用户且每个账号限购1件”,你要是只给一句自然语言,AI是推理不过来的。它需要你把前置规则也写成可理解的描述,这本质上又回到了“写用例设计”的老路上。

4.3 一张决策表,帮你判断是否该引入

结合两周的折腾,我整理了一个简单的决策表:

团队现状建议
UI变动频繁、脚本维护成本占大头值得引入,性价比很高
测试人员写代码能力弱,但业务理解深值得引入,能释放生产力
有严格的资金校验、合同校验等强断言需求保留传统脚本,AI做辅助
已经有一套成熟的框架Y脚本库,跑得很稳不建议推倒重来,先做灰度试点
项目很少更新,UI很稳定没必要折腾,传统框架够用

4.4 两代框架共存的过渡策略

我个人的倾向是“双轨并行”:传统框架Y继续稳住关键路径的高频回归,AI框架X先拿来做探索式测试和跨端冒烟。等到AI框架的稳定性在团队内部被验证够了,再逐步把一部分脚本迁移过去。步子迈太大,容易扯到“断言准确性”这条最敏感的神经。

5. 团队落地的五个易踩坑点:权限、CI、成本、用例质量与灰度

5.1 给AI的权限范围:只读优先

AI执行器是“会自己动”的,它不只是点点点,它还会在失败自愈时尝试滚动、返回、关闭弹窗。如果它跑的是一套还在开发中的功能,有可能在探索过程中触发提交操作或后台脏数据。

我们的处理方式是:第一轮试跑全部接在测试环境、测试账号上,流量和权限都做隔离。有些操作即使AI判断应该做,只要涉及资金、短信、外呼,就要靠预设的护栏来拦截。别一上来就给AI一个生产环境账号,那是给自己埋雷。

5.2 CI里跑AI测试:超时和费用控制是头号问题

传统脚本跑崩了顶多多占点CI时长,AI框架跑崩了还会多花模型调用的费用。越复杂的用例,调用次数越多,每次执行都涉及视觉模型和语言模型的推理成本。

我建议在CI流水线里单独开一条“AI测试专用任务”:

  • 设置单条用例的超时上限(比如10分钟)
  • 设置整轮执行的最大失败次数
  • 对模型调用设置每日预算,超出自动停跑
  • 保留历史执行记录,用于分析“哪些用例在无限烧预算”

有时候一条写得过于模糊的用例,会触发AI反复尝试,像人钻牛角尖一样。没有预算控制,月底账单会很难看。

5.3 可观测性:AI执行日志的审计价值

传统框架跑挂了,你还能从代码堆里找到在哪一步挂的。AI框架的“黑盒感”更强,所以它的执行日志设计得很关键。我们在落地的过程中,要求它每执行一步,必须输出三个字段:“观察结果”“决策理由”“执行动作”。

三个字段合在一起,就是AI的“解题步骤”——排查问题的时候特别有用。要是哪一次测试未通过,你不用靠猜,直接把这个步骤串起来,就能看出AI在哪个环节理解错了页面。

5.4 用例质量:AI框架更怕“垃圾用例”

有一句实话我必须说:低质量的用例,在传统框架里只是浪费运行时间,在AI框架里是浪费模型推理预算。因为AI会对每条用例做完整语义理解,逻辑混乱的用例会让它反复横跳。

我们在试用期整理了一套用例质量标准:

  • 一条用例只验证一个核心业务目标
  • 描述必须包含“动作+操作对象+预期结果”
  • 不要在用例里出现“如果”“可能”“随便”这类模糊词
  • 环境状态(登录/未登录、新用户/老用户)必须在用例开头明确声明

这四条规范看着简单,但有效减少了大约70%的无效调用。

5.5 灰度引入:让“最笨的团队”先跑通

不是技术最强的团队先上,而是选一条业务逻辑最简单、UI最稳定的流程做试点。理由很现实:第一个试点要是失败了,你至少能定位到是“AI能力不够”还是“自己没用好”。

我们选的是“个人信息修改”这条流程——步骤少、分支少、无金额校验。跑通之后再去挑战“下单支付”这种复杂链路。有些团队上来就想用AI跑全链路回归,结果模型调用费用翻了天,回归结果还三天两头抖动,最后被老板一票否决。循序渐进,比赌一把更稳妥。

写在最后

我在实际使用中发现一个很有意思的现象:团队里写代码最强的同学,对AI框架的接受度反而最低,因为他们早就习惯了精确控制每一个步骤;而测试设计经验丰富、但代码能力一般的同学,用框架X玩得飞起,因为他们本来就在用“人话”描述测试点。

如果你也是那种被脚本维护耗费了大量精力的测试开发,我建议下一个项目试点时可以认真试试这类AI驱动的新框架。别管标题怎么喊“谁慌了”,先在一条最不重要的用例上跑通一次,你自然会知道该怎么用它。

至于那些传统的脚本怎么办?先留着,不用急着删。自动化测试这个行当从来不是非此即彼,能让你晚上安心睡觉的,才是当前最适合你的那套方案。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进