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

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

一、为什么做这个工具?
软件测试是开发流程中不可或缺的一环,但现实中它往往是最痛苦的环节:
-
手工测试:重复枯燥,依赖测试人员经验,容易遗漏边界场景 -
传统自动化(Selenium/Playwright):需要编写大量测试脚本,页面一改脚本就废,维护成本极高 -
AI 辅助测试:市面上的方案大多停留在”AI 生成测试用例文本”,仍需人工执行
有没有一种方案,能让 AI 真正动手操作浏览器,像一个资深测试工程师一样,自主探索系统、发现问题、生成用例?
为此我们尝试做了TestFlow——一款自动化功能测试工具。更重要的是,这种方法并不局限于传统的软件功能测试,还可以自然扩展到更多安全与质量场景,比如渗透测试、配置核查、安全分析等,让 AI 直接参与系统交互,从“写用例”进化为“做测试”。
二、TestFlow 是什么?
TestFlow 是一款 AI 驱动的全自动软件功能测试桌面工具。它的核心理念是:
让大模型充当测试工程师,自主完成”看页面 → 做判断 → 执行操作 → 记录结果”的完整闭环。
你只需要提供:
-
被测系统的 URL -
登录账号密码(如需要) -
选择一个 AI 模型
点击”开始测试”,TestFlow 就会自动启动浏览器,像真人一样逐页面、逐功能地进行测试,并实时生成标准化测试用例。
核心特性一览
-
零脚本:不需要写一行测试代码 -
AI 自主决策:大模型自主规划测试路径、设计测试用例 -
多模态感知:截图 + DOM 双通道理解页面 -
实时可视化:浏览器画面实时同步到界面 -
标准化输出:自动生成符合 GB/T 25000 标准的 Excel 测试报告 -
多模型支持:OpenAI、Claude、DeepSeek、豆包、Ollama、vLLM 等 提供商 -
单文件部署:编译为单个 EXE,开箱即用

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

3.1 为什么选择这套技术栈?
|
|
|
|---|---|
| Go |
|
| Wails v2 |
|
| Vue 3 + Element Plus |
|

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 代码,提取页面所有可交互元素的关键属性:
每个元素提取 tag、id、class、text、type、placeholder 等属性,最终组成一个结构化 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 会自动运用:
-
等价类划分 — 有效/无效输入分类测试 -
边界值分析 — 最小值、最大值、超长输入 -
场景法 — 完整业务流程走通 -
错误推测法 — SQL 注入、特殊字符 -
判定表 — 多条件组合
7.2 “先异常后正常”的铁律
这是提示词设计中的一个关键策略:
任何含表单的页面,必须先穷举异常场景,最后才执行正向流程。
为什么?因为一旦正向操作成功(比如登录成功跳转),当前页面的异常测试机会就永久丢失了。以登录页面为例,AI 会严格按这个顺序执行:
|
|
|
|
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
' OR 1=1-- |
|
|
|
|
|
| 8 | 正确账号密码登录 | 场景法-正向 |
7.3 AI 智能生成定制化提示词
除了内置默认提示词,TestFlow 还支持 用 AI 生成针对特定系统的定制提示词:
输入系统名称和 URL,AI 会推测系统类型(电商?OA?CMS?),自动调整测试策略和功能模块描述。

八、浏览器操作引擎
TestFlow 支持 7 种浏览器操作类型:
|
|
|
|
|---|---|---|
click |
|
|
input |
|
|
select |
|
|
navigate |
|
|
scroll |
|
|
hover |
|
|
wait |
|
|
8.1 智能元素定位
一个有趣的技术细节:AI 有时会生成 jQuery 风格的 :contains('文字') 选择器,但原生 querySelector 不支持。TestFlow 实现了透明兼容:
当检测到 :contains 时,自动转换为 JavaScript 查询,遍历候选元素找到包含指定文字的那个。
8.2 高速表单输入
传统的浏览器自动化通常逐字模拟键盘输入,速度很慢。TestFlow 使用 JavaScript 直接设置 value,再触发框架事件:
这确保了 React、Vue 等框架都能正确响应值变化,同时速度提升数十倍。
九、测试用例自动生成
测试完成后,一键导出专业的 Excel 测试报告:
-
测试汇总页:总用例数、通过/失败/阻塞统计、各模块汇总表 -
按模块分Sheet:每个功能模块独立一个工作表 -
完整字段:编号、模块、名称、前置条件、步骤、预期/实际结果、状态、优先级、测试方法 -
状态着色:通过为绿色、失败为红色,一目了然:

最终测试用例示例

十、使用指南
10.1 快速开始
-
下载:获取 TestFlow.exe(单文件,无需安装) -
启动:双击运行,主界面自动打开 -
配置 AI:在设置页选择 AI 提供商,填入 API Key(使用 Ollama 本地部署则无需 API Key) -
填写信息:在主界面左侧填入被测系统的 URL、用户名、密码 -
开始测试:点击”开始测试”,坐等结果
10.2 界面布局说明
主界面采用三栏布局,可拖拽调整宽度:
|
|
|
|---|---|
| 左栏 |
|
| 中栏 |
|
| 右栏 |
|
10.3 提示词定制
在提示词管理页面,你可以:
-
查看和编辑默认提示词 -
创建针对特定系统的自定义提示词 -
使用”AI 生成”功能,让 AI 根据系统信息自动生成定制提示词
写在最后
在软件工程的历史中,每一次生产力的跃迁,都会重新定义“人”的角色。从手工编码到自动化框架,从脚本驱动到模型驱动,我们正在经历又一次范式转变。
AI 不再只是辅助工具,它正在逐步成为真正的“执行者”。像 TestFlow 或者我们之前的 【自动化渗透测试工具】 这样的探索,本质上是在回答一个问题:当机器可以理解界面、做出判断并完成操作时,人还应该做什么?
答案或许已经逐渐清晰—— 未来,重复性的执行工作会越来越多地交给 AI,而人的核心价值,将从“亲自做事”转变为“设计规则、驾驭工具、放大效率”。
工程师不会消失,只是不再需要重复的去写测试用例、逐项测试、逐项配置核查、逐个测试结果分析,但会进化为测试策略的设计者、AI 行为的引导者、质量体系的守护者。
AI 时代已经到来,它不会取代所有人,但一定会取代那些只停留在重复劳动中的工作方式。 真正重要的,不是与 AI 竞争,而是学会如何利用 AI,让自己站在更高的效率杠杆之上。

夜雨聆风