Skip to content

基于 AI 的前端自动化测试框架工程化实践

来源:腾讯新闻 - 如何让AI帮你做前端自动化测试?我们这样落地了

概述

本文介绍一个基于 AI 大模型的 UI 自动化测试框架在专有云质量保障中的工程化落地实践。该框架解决了前端测试耗费人力的痛点,通过 AI 能力实现自然语言驱动的自动化测试。

痛点背景

  1. 前端用例自动化率低:每个版本依赖手工执行,多版本快速迭代背景下导致覆盖不足
  2. 自动化门槛高、维护成本大:页面更新换代快,一个版本实现的自动化用例在下个版本可能因元素变动无法执行

核心原理

技术栈

技术作用
browser-use核心 AI 浏览器控制库
Playwright前端操作、元素判断
pytest用例管理和调度
Allure测试报告生成
大模型(Qwen-max)理解自然语言指令

架构分层

后端服务层(web server、CICD)

框架管理层(用例管理、调度)

测试用例层(各自动化模块)

实现机制

1. 自然语言驱动的测试用例

测试用例采用 YAML 格式,将测试步骤以自然语言方式编写为用例:

yaml
testType: ascm
testName: create_vpc_unique
testId: "74****98"
testDescription: 使用默认参数创建VPC
preSteps:
  - common/product/ascm/login.yaml  # 前置步骤,公共登录操作
testSteps:
  - task: 打开"{{ ASCM_URL }}/vpc/console/vpcPage?{{ DEFAULT_ORG_ID }}"
  - task: 点击"创建专有网络"按钮
  - task: 在"专有网络名称"输入框输入"{{ VPC_NAME_UNIQUE }}"
  - task: 点击"提交"按钮

关键设计

  • preSteps:引用公共文件,框架递归解析并重放
  • testSteps:大模型直接看到的提示词,是提示词工程(PE)的核心
  • :Jinja2 格式变量,框架根据执行环境替换实际值

2. 动态元素定位

传统方式依赖 XPath/CSS Selector,维护成本高。本框架采用 browser-use 的动态定位方案:

  1. 抓取页面元素:browser-use 将当前页面元素以文本方式组织,供大模型理解
  2. 视觉能力辅助:若大模型具备视觉能力,也会将截图一并提供
  3. 自适应回放:元素信息(xpath、attributes、parent 层级)被保存,回放时若页面变化,会遍历搜索并更新 index

3. 执行回放与自适应更新

两个核心问题

  • Token 消耗:大量用例自动化后,Token 消耗巨大
  • 速度问题:大模型决策速度慢,网络交互影响执行速度

解决方案:回放机制

  • 大模型决策生成的 action 和参数保存为 JSON 文件
  • 测试执行时优先回放 JSON 文件(不调用大模型)
  • 若回放失败,再调用大模型执行,并更新 JSON 文件

4. 断言机制

browser-use 以目标为导向,缺少测试所需的关键一环——断言。框架补充了三种断言:

方式一:Playwright 原生断言

yaml
- task: 点击"提交"按钮
  expected:
    - type: playwright
      locator: get_by_text("操作成功", exact=True)
      method: to_be_visible()

方式二:用例自定义断言

yaml
type: validator
# 由测试用例自己实现 validator 函数

方式三:大模型断言(实现中)

yaml
type: ai
# 调用大模型能力,对自然语言解析,结合页面元素和截图判断

实施挑战与解决方案

挑战一:大模型幻觉问题

对 action 产生幻觉

大模型规划出的 action 与步骤目的不匹配,特别是在页面异常时。

解决

  • task 拆分:每个 task 完成的任务要简单明确,复杂操作拆分到多个 task
  • 最大步骤限制:一个 task 限制在 3 个 action 以内

对 task 目标产生幻觉

task 已完成后,大模型继续产生非预期的 action 调用。

解决:在 task 提示词末尾加上 "... and done",引导大模型在完成目标后主动结束。

挑战二:browser-use 与测试场景适配

browser-use 是通用工具,不专为测试设计:

  • 缺陷修复:框架层面直接派生 browser-use 核心对象进行定制化修改,避免修改源码
  • 能力补充:在框架层面补充断言能力、测试调度、报告生成等功能

挑战三:页面元素识别问题

将人眼看到的页面元素转换成 prompt 让大模型理解,存在 gap。

解决

  1. 提示词优化:日志中记录大模型真实看到的页面元素布局
  2. 元素提取范围扩展:通过 include_attributes 配置添加特殊属性
  3. 换个思路:用简单确定的方法组合达成目标
  4. 兜底方案:支持指定 xpath/css selector 作为最后手段

挑战四:测试稳定性

测试用例编写规范

从项目开始就创建测试用例编写规范文档,包括:

  • 用例通用规则
  • 变量替换使用场景
  • 常用 task 提示词和 action 对应关系
  • 常见问题及修改方案

模型稳定性

  • 模型选型(qwen 系列)
  • 参数调整(top_p/temperature/seed)
  • 后续计划使用模型训练和微调

环境健康检查

测试执行前检查环境的健康状态及具备的 feature,决定调度的用例是否能执行。

使用大模型但不依赖大模型

对于前置步骤、依赖等没有必要靠大模型逐步操作完成,可以直接使用更快速稳定的后端 API。

总结

该框架通过将自然语言转换为提示词工程(PE),结合 browser-use + Playwright + pytest + Allure 的技术栈,以及增量回放和自适应更新机制,实现了低门槛、高稳定性的 AI UI 自动化测试。

为前端工程师打造 · 基于 VitePress 构建