可能是较好的AI+app智能自动化方案

大家好,我是持续讲干货的sean文哥。

如何做好app的自动化测试,从2010移动互联网的兴起开始,就成为了众多公司和测试工程师追求的目标,甚至有可能说它是一个不可能实现的目标,大家都在这个方向上不停探索、优化,随着AI大模型在各个领域的探索和应用,又把这个目标的达成可能性推进了一步

++01++

好的自动化

质量、成本、效率、效果

先说说什么是好的app自动化测试?个人理解四个维度:质量、成本、效率、效果

  1. 质量,运行稳定性(成功率)

    自动化测试的质量,可以理解为自动化框架和用例自身的质量,运行的成功率高(排除产品bug),没有人为和技术导致的失败误报

    反之,质量不高就会带来额外的排错成本和骚扰(假如你的报告发给了领导)

  2. 成本,编写和后续维护的资源投入

    投入成本,可以理解为人工编写自动化用例所需要的工时和后续因为产品迭代变更后的人工维护用例的工时,投入的工时越少成本越低

    反之,ROI不高,难以落地

  3. 效率,运行速度、维护速度

    两个维度,

    一是自动化用例运行的速度,GUI层面的自动化用例运行一次所需要的时间越短越好,反馈越及时

    二是自动化用例维护的速度,当产品发生页面元素和交互的变化,对应的用例需要更新维护所需要的时间越短越好,越能及时应用到新功能的回归中

    反之,等待反馈时间长,自主发现晚于用户反馈;新功能自动化测试得不到及时的质量保障

  4. 效果,兜底、发现缺陷

    也可以说是价值,两个维度,

    一是运行了自动化后,让人放心,证明通过自动化的方式替代手工测试过了,跑了哪些场景心里有底

    二是假如有bug,自动化测试可以拦截,在上线前或先于用户提前发现

++02++

传统GUI自动化痛点

稳定性、维护成本、执行效率

传统app自动化的痛点

传统自动化框架,appium、airtest、XCTtest、Espresso、UIAutomator,不是说这些框架不好,使用过的人深有感触:

  1. 质量,运行稳定性(成功率)

    1. 元素识别成功率不能100%

    2. 外部干扰(如系统弹窗、网络波动、来电)导致测试失败

    3. 某些原生功能(如摄像头、传感器)难以模拟

    4. 复杂交互操作时需控制好每一步有效性,导致失败率较高

  2. 成本,编写和后续维护的资源投入

    1. 元素定位器(如XPath、ID)易因UI变更失效,需频繁调整脚本

    2. 动态内容(如广告、实时数据)导致断言逻辑复杂化

    3. iOS 和 Android 的 UI 结构差异大,需维护两套测试逻辑,维护成本高

  3. 效率,运行速度、维护速度

    1. 依赖中间层通信(如Appium通过JSON Wire Protocol与设备交互),导致延迟

    2. 启动慢、UI定位慢、等待策略复杂,影响测试速度

    3. 因为页面变化导致脚本维护不及时,不能尽早发挥作用

++03++

较优的解法

智能定位、生成脚本、智能等待

解决思路,

开篇也说了,有了AI大模型,结合新一代智能自动化框架,可以优化或解决以上痛点

|------------------|--------------------------------------------------------------------------------|
| 传统痛点 | 优化思路 |
| 质量: 运行稳定性(成功率) | 1. 智能识别,自动切换定位方式 2. 容错机制,重试、页面查找元素 3. 平台兼容,React Native、Flutter、WebView 及纯原生应用 |
| 成本: 编写和后续维护的资源投入 | 1. AI自动生成,迭代中同步维护 2. 低代码自动化 3. 跨平台的框架(支持android和ios一套用例代码) |
| 效率: 运行速度、维护速度 | 1. 减少中间通讯层、转发 2. AI自愈 3. 智能等待 |

++04++

调研结果

LLM、智能框架、组合方案

经过调研

|-------------|-----------------------------------------------|-------------------------------------------------------|--------------------------------------|
| 评估维度 | LLM+Maestro | LLM+Appium/Airtest | LLM+Client+MCP |
| 执行速度 | 极快 接近原生脚本执行 单步响应 <200ms | 中低速 依赖元素加载与渲染 单步响应 500-800ms | 低速 每操作需多次LLM请求 单用例延迟 2-5秒 |
| 脚本生成准确率 | 90%+ 关键字驱动 内置指令集语法简单 | 60%左右 依赖XPath/CSS定位稳定性 动态元素易导致失败 内置语法繁琐,需要多层级代码生成 | 波动大 依赖模型推理能力 不同模型差异达40% 无需脚本直接执行 |
| 资源消耗 | 极低 仅生成测试脚本有算力要求,算力要求低 | 中高 生成测试脚本需要大量算力,需要解析本地项目全部代码逻辑分析,再根据prompt要求维护 | 极高 多轮LLM请求累积消耗 每一步执行都需要多次请求算力 |
| 脚本开发维护 | 极低 (YAML声明式) 仅根据自然语言即可生成准确的测试用例脚本,如需调试,简单调试即可 | 高 (需编码维护) 根据自然语言可自动进行编码维护,对于元素定位方式需要手动维护。 | 极低 自然语言用例即可 |
| 技术栈要求 | (无需编程) | (需编程+框架) | 中高 (需理解MCP) |
| 跨平台支持 | (iOS/Android/Web) | 极强 (6+平台) | 局限 (依赖工具链) |
| 部署成本 | (轻量二进制) | 极高 | (容器化+MCP) |

Maestro优势

引用官网一段原话,

Here are some of the reasons why we believe Maestro is the future of mobile UI testing:

  • Built-in tolerance to flakiness. UI elements will not always be where you expect them, screen tap will not always go through, etc. Maestro embraces the instability of mobile applications and devices, and counters it under the hood.

  • Built-in tolerance to delays. No need to pepper your tests with sleep() calls. Maestro knows that it might take time to load the content (i.e. over the network) and automatically waits for it (but no longer than required).

  • Blazingly fast iteration. Tests are interpreted, so no need to compile anything. Maestro is able to continuously monitor your test files and rerun them as they change.

  • Declarative yet powerful syntax. Define your tests in a simple yaml file.

  • Simple setup. Maestro is a single binary that works anywhere.

  • Cross-platform. Maestro runs on iOS and Android and supports ReactNative, Flutter, WebViews, and pure Native applications.

翻译一下:

  1. 内置的Flakiness容忍机制

    UI元素可能因动态布局或异步加载偏离预期位置,屏幕点击可能因渲染延迟失效。Maestro通过底层算法主动适应移动端应用与设备的天然不稳定性,并自动进行容错处理。

  2. 智能延迟容忍能力

    无需手动插入sleep()硬编码等待。Maestro通过动态感知机制(如网络请求完成、资源加载状态)实现自动隐式等待,且等待时长精确控制在必要范围内。

  3. 毫秒级热更新迭代

    测试脚本采用解释执行模式,无需编译构建。Maestro通过文件系统监控(File Watcher)实现测试用例的实时热加载与自动重跑,显著缩短反馈周期。

  4. 声明式DSL语法设计

    通过YAML格式定义测试逻辑,提供高可读性与结构化表达能力,支持参数化、条件分支等高级特性,兼顾简洁性与扩展性。

  5. 零依赖部署架构

    以单一静态二进制文件(Single Static Binary)形式交付,无语言栈/环境依赖,支持跨操作系统(macOS/Linux/Windows)即插即用。

  6. 全平台兼容性

    统一支持iOS/Android双端测试,覆盖ReactNative、Flutter、WebViews及原生开发框架(Native),屏蔽跨框架差异性。

AI+Maestro组合方案

Maestro相关链接:

官网:https://docs.maestro.dev/

源码:https://github.com/mobile-dev-inc/maestro

写在最后,

目前团队正在试点当中,随着试点收集建议和关注实际使用效果,再进一步调优。

你觉得呢?有任何想法欢迎在评论区交流或留言。

关于我,二十年QA、测试、敏捷研发、研发质量效能相关经历;历任百度、易宝、艺龙、直客通、蔚来等QA负责人、测试总监及研发质量效能负责人

也可以联系我拉你进AI赋能测试高质量社群,分享和探讨最新探索实践

关注我(图片右下角水印),在"资料获取"菜单,获取AI赋能测试相关资料