乐于分享
好东西不私藏

基于AI的自动化测试工具的探索

基于AI的自动化测试工具的探索

声明:Tide安全团队原创文章,转载请声明出处!文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,任何人不得将其用于非法用途给予盈利等目的,否则后果自行承担!

一、为什么做这个工具?

软件测试是开发流程中不可或缺的一环,但现实中它往往是最痛苦的环节:

  • 手工测试:重复枯燥,依赖测试人员经验,容易遗漏边界场景
  • 传统自动化(Selenium/Playwright):需要编写大量测试脚本,页面一改脚本就废,维护成本极高
  • AI 辅助测试:市面上的方案大多停留在”AI 生成测试用例文本”,仍需人工执行

有没有一种方案,能让 AI 真正动手操作浏览器,像一个资深测试工程师一样,自主探索系统、发现问题、生成用例?

为此我们尝试做了TestFlow——一款自动化功能测试工具。更重要的是,这种方法并不局限于传统的软件功能测试,还可以自然扩展到更多安全与质量场景,比如渗透测试、配置核查、安全分析等,让 AI 直接参与系统交互,从“写用例”进化为“做测试”。

已关注

关注

重播 分享


二、TestFlow 是什么?

TestFlow 是一款 AI 驱动的全自动软件功能测试桌面工具。它的核心理念是:

让大模型充当测试工程师,自主完成”看页面 → 做判断 → 执行操作 → 记录结果”的完整闭环。

你只需要提供:

  1. 被测系统的 URL
  2. 登录账号密码(如需要)
  3. 选择一个 AI 模型

点击”开始测试”,TestFlow 就会自动启动浏览器,像真人一样逐页面、逐功能地进行测试,并实时生成标准化测试用例。

核心特性一览

  • 零脚本:不需要写一行测试代码
  • AI 自主决策:大模型自主规划测试路径、设计测试用例
  • 多模态感知:截图 + DOM 双通道理解页面
  • 实时可视化:浏览器画面实时同步到界面
  • 标准化输出:自动生成符合 GB/T 25000 标准的 Excel 测试报告
  • 多模型支持:OpenAI、Claude、DeepSeek、豆包、Ollama、vLLM 等 提供商
  • 单文件部署:编译为单个 EXE,开箱即用

三、系统架构

TestFlow 采用 Go + Wails v2 + Vue 3 的三层架构

3.1 为什么选择这套技术栈?

选型
理由
Go
编译为原生二进制,无运行时依赖;goroutine 天然适合并发处理 AI 流式响应 + 浏览器控制
Wails v2
Go 生态的 Electron 替代品,生成的 EXE 体积仅 ~15MB(Electron 动辄 150MB+)
Vue 3 + Element Plus
成熟的企业级 UI 方案,三栏布局开发效率高

3.2 前后端通信机制

Wails 的独特之处在于它不走 HTTP,而是通过 Go 方法绑定 直接暴露后端函数给前端 JavaScript 调用: 前端直接调用,就像调本地函数一样: 实时数据(截图、用例、AI 流式输出)则通过 Wails EventsEmit 从 Go 端推送到前端:


四、AI 自主测试循环引擎

TestFlow 最核心的创新点 —— Autonomous Test Loop

4.1 循环流程

整个测试过程是一个不断循环的闭环:

第一步:页面感知 — 通过 go-rod 截取浏览器截图,同时提取页面所有可交互元素(按钮、输入框、链接等)的结构化 DOM 信息。

第二步:AI 分析 — 将截图和 DOM 数据连同历史上下文一起发送给多模态大模型。AI 会分析当前页面状态,决定下一步操作。

第三步:JSON 解析 — AI 返回严格的 JSON 格式响应,包含要执行的操作、生成的测试用例、当前观察和下一步计划。

第四步:执行操作 — 在浏览器中执行 AI 指令的操作:点击按钮、填写表单、选择下拉框、页面滚动等。

第五步:用例生成 — 如果 AI 判断当前操作构成一个完整的测试场景,自动生成标准化测试用例。

第六步:循环判断 — 检查是否满足终止条件(AI 声明完成 / 达到用例上限 / 用户手动停止),否则回到第一步继续。

4.2 AI 响应的结构化协议

TestFlow 设计了一套精确的 JSON 协议来约束 AI 的输出:

这套协议的巧妙之处在于:

  • 操作与用例解耦:不是每次操作都生成用例,导航等操作设置 generate: false
  • 批量操作支持:通过 actions 数组支持表单填写等多步连续操作,减少 AI 交互轮次
  • 自终止机制:AI 通过 is_finished: true 自主声明测试完成

4.3 智能对话历史管理

在长时间测试中,对话历史会不断增长,可能超出模型的上下文窗口。TestFlow 实现了两个关键优化:

上下文裁剪:当消息历史超过 42 条时,自动保留最近 40 条,确保不超出 Token 限制:

已测功能摘要注入:每轮交互会将已测过的模块和用例名称注入到提示中,告诉 AI “这些已经测过了,不要重复”:

【已测试功能摘要(勿重复)】- 登录认证: 空用户名空密码, 错误密码, SQL注入, 正确登录- 用户管理: 新增用户, 编辑用户, 删除用户

再配合内存中的 testedKeys 去重 Map,实现双重防重复机制。


五、多模态页面感知系统

TestFlow 如何”看懂”一个网页?这是另一个核心技术点。

5.1 DOM 结构化提取

TestFlow 通过注入 JavaScript 代码,提取页面所有可交互元素的关键属性:

每个元素提取 tagidclasstexttypeplaceholder 等属性,最终组成一个结构化 JSON 数组,让 AI 精确知道页面上有哪些可操作的元素。

5.2 智能模式(Smart Mode)

默认推荐的智能模式会根据页面复杂度自动切换:

  • DOM 可交互元素 ≥ 10 个:仅用 DOM 数据,速度快、省 Token
  • DOM 元素稀少(**< 10 个**)或 连续 DOM 模式已达 5 轮:自动加入截图,借助视觉能力补充理解

这在实际使用中非常实用:管理后台的表单页面元素密集,DOM 模式完全够用;而某些可视化大屏、图表页面需要截图才能理解。

5.3 视觉能力自动降级

不是所有模型都支持图片输入。TestFlow 内置了视觉能力检测:

当检测到模型不支持视觉时,自动剥离消息中的图片内容,降级为纯文本 DOM 模式。这使得纯文本模型(如 DeepSeek-Chat)也能正常使用。


六、AI 提供商覆盖

TestFlow 采用 OpenAI Chat Completions 协议 作为统一通信标准。由于主流 AI 提供商(包括国产的 DeepSeek、豆包)都兼容这套协议,一个 HTTP 客户端即可适配所有提供商。

关键的差异化处理包括:

认证头自动适配

消息格式智能序列化:当消息只包含文本时,content 字段序列化为字符串(兼容性最广);包含图片时,自动切换为数组格式:

支持 本地私有化部署(Ollama、vLLM)也是一个重要考量 —— 在数据安全敏感的场景下,所有数据都可以在内网流转,不出企业边界。


七、提示词工程:AI 测试的”灵魂”

提示词是控制 AI 测试行为的核心。TestFlow 内置了一套精心设计的系统提示词,赋予 AI “资深测试工程师”的角色。

7.1 五大测试方法自动应用

提示词中内嵌了标准软件测试方法论,AI 会自动运用:

  1. 等价类划分 — 有效/无效输入分类测试
  2. 边界值分析 — 最小值、最大值、超长输入
  3. 场景法 — 完整业务流程走通
  4. 错误推测法 — SQL 注入、特殊字符
  5. 判定表 — 多条件组合

7.2 “先异常后正常”的铁律

这是提示词设计中的一个关键策略:

任何含表单的页面,必须先穷举异常场景,最后才执行正向流程。

为什么?因为一旦正向操作成功(比如登录成功跳转),当前页面的异常测试机会就永久丢失了。以登录页面为例,AI 会严格按这个顺序执行:

顺序
场景
方法
1
全空直接提交
等价类-无效
2
空用户名+任意密码
等价类-无效
3
任意用户名+空密码
等价类-无效
4
不存在账号+任意密码
等价类-无效
5
正确用户名+错误密码
等价类-无效
6
SQL注入 ' OR 1=1--
错误推测
7
超长用户名(>100字符)
边界值
8 正确账号密码登录 场景法-正向

7.3 AI 智能生成定制化提示词

除了内置默认提示词,TestFlow 还支持 用 AI 生成针对特定系统的定制提示词

输入系统名称和 URL,AI 会推测系统类型(电商?OA?CMS?),自动调整测试策略和功能模块描述。


八、浏览器操作引擎

TestFlow 支持 7 种浏览器操作类型:

操作类型
说明
典型场景
click
点击元素
按钮、链接、菜单项
input
输入文本
表单填写
select
选择下拉项
下拉框选择
navigate
页面跳转
URL 导航
scroll
滚动页面
懒加载内容
hover
鼠标悬停
展开下拉菜单
wait
等待
页面加载

8.1 智能元素定位

一个有趣的技术细节:AI 有时会生成 jQuery 风格的 :contains('文字') 选择器,但原生 querySelector 不支持。TestFlow 实现了透明兼容:

当检测到 :contains 时,自动转换为 JavaScript 查询,遍历候选元素找到包含指定文字的那个。

8.2 高速表单输入

传统的浏览器自动化通常逐字模拟键盘输入,速度很慢。TestFlow 使用 JavaScript 直接设置 value,再触发框架事件:

这确保了 React、Vue 等框架都能正确响应值变化,同时速度提升数十倍。


九、测试用例自动生成

测试完成后,一键导出专业的 Excel 测试报告:

  • 测试汇总页:总用例数、通过/失败/阻塞统计、各模块汇总表
  • 按模块分Sheet:每个功能模块独立一个工作表
  • 完整字段:编号、模块、名称、前置条件、步骤、预期/实际结果、状态、优先级、测试方法
  • 状态着色:通过为绿色、失败为红色,一目了然:

最终测试用例示例


十、使用指南

10.1 快速开始

  1. 下载:获取 TestFlow.exe(单文件,无需安装)
  2. 启动:双击运行,主界面自动打开
  3. 配置 AI:在设置页选择 AI 提供商,填入 API Key(使用 Ollama 本地部署则无需 API Key)
  4. 填写信息:在主界面左侧填入被测系统的 URL、用户名、密码
  5. 开始测试:点击”开始测试”,坐等结果

10.2 界面布局说明

主界面采用三栏布局,可拖拽调整宽度:

区域
内容
左栏
系统信息表单 + AI 实时响应流(JSON 格式化展示)
中栏
浏览器实时截图 + 操作日志
右栏
测试进度日志 + 按模块分组的用例列表

10.3 提示词定制

在提示词管理页面,你可以:

  • 查看和编辑默认提示词
  • 创建针对特定系统的自定义提示词
  • 使用”AI 生成”功能,让 AI 根据系统信息自动生成定制提示词

写在最后

在软件工程的历史中,每一次生产力的跃迁,都会重新定义“人”的角色。从手工编码到自动化框架,从脚本驱动到模型驱动,我们正在经历又一次范式转变。

AI 不再只是辅助工具,它正在逐步成为真正的“执行者”。像 TestFlow 或者我们之前的 【自动化渗透测试工具】 这样的探索,本质上是在回答一个问题:当机器可以理解界面、做出判断并完成操作时,人还应该做什么?

答案或许已经逐渐清晰—— 未来,重复性的执行工作会越来越多地交给 AI,而人的核心价值,将从“亲自做事”转变为“设计规则、驾驭工具、放大效率”

工程师不会消失,只是不再需要重复的去写测试用例、逐项测试、逐项配置核查、逐个测试结果分析,但会进化为测试策略的设计者、AI 行为的引导者、质量体系的守护者

AI 时代已经到来,它不会取代所有人,但一定会取代那些只停留在重复劳动中的工作方式。 真正重要的,不是与 AI 竞争,而是学会如何利用 AI,让自己站在更高的效率杠杆之上。