Skip to content

AI 生成脚本 ​

用自然语言描述测试意图,TestDog 让模型在真实浏览器里逐步执行并落成脚本,全程可视、可干预、可续跑。生成前模型会与你约定测试意图与验收目标:所有必验目标都有真实通过的断言证据,生成才算完成。

真实生成全过程:发送 → 预拆分计划确认 → 开始执行 → 逐步执行落库 → 生成完成

发起生成 ​

在用例详情点「AI 生成」进入生成页:

AI 生成页

生成页:上方为执行轨迹,底部输入测试需求与起始地址

  1. 填写起始地址(默认带出项目地址)。
  2. 在输入框用自然语言描述测试需求。
  3. 可选:
    • 附件:把截图 / 文件拖进输入框。文本类(xlsx / pdf / docx / csv / json)自动提取内容;图片压缩后以多模态直发主模型(需开启视觉能力)。
    • 登录配置:选择已录制的登录态,以已登录状态生成。
  4. 点「发送」。

填写测试需求

描述测试需求后点击发送

生成过程 ​

1. 步骤计划与测试意图确认 ​

发送后模型先预拆分出步骤计划与测试意图,在同一弹窗中展示供你确认:

预拆分计划

计划确认弹窗:测试意图与验收约定 + 步骤计划,点「开始执行」或「取消」

步骤计划:每步的动作、参数、断言均可增删改;断言行可下拉关联验收目标,选择后自动带入该目标的断言类型与预期。

测试意图与验收约定:

项目说明
场景类型正向 / 负向 / 混合
测试目标要验证的业务结果
前置条件执行前需要满足的条件(每行一项)
测试数据约束字段 + 值 + 策略:固定值(执行时不自动修改)或允许生成(可用 注入唯一数据)
验收目标期望业务结果、验证范围(具体记录 / 字段)、验收依据、是否必验、断言类型与预期
清理要求完成后的清理动作,无要求可留空

确认后开始执行。执行路线仍可据页面实际调整,但已确认的断言类型与预期,模型不能擅自更改或弱化。

2. 执行循环 ​

点「开始执行」后,在真实浏览器中以 tool-calling 循环逐步执行,执行轨迹实时滚动:

  • snapshot 抓取页面可交互元素快照
  • click / fill / select 等执行点击、输入、下拉选择
  • assert 执行强断言(类型见下文断言类型);验收目标的断言携带目标 ID,并定位到约定的验证范围
  • read_coverage 读取验收目标与覆盖状态(不调模型、不操作页面),轨迹同步展示覆盖变化
  • see 视觉观察(需开启「模型具备视觉能力」)
  • api 接口请求

负向测试中的非法输入、失败提交与拒绝断言会作为必要步骤保留(它们正是测试目标);固定值数据不会被替换。

3. 落库 ​

每个动作成功即解析为语义化定位器写入左侧「生成的步骤」表格(动作 / 选择策略 / 定位值 / 参数),随时可暂停或取消,已完成的步骤不丢失。

生成完成

生成完成:轨迹展示逐步工具调用与 token 消耗(含缓存命中),左侧步骤表格落库,可「保存脚本」

断言类型 ​

生成与回放共用同一套浏览器断言语义,在超时预算内自动重试:

类型含义
visible / hidden唯一目标可见 / 隐藏或不存在;多匹配报错,不视为隐藏成功
text / text_exact范围内可见文本包含 / 规范化空白后全文相等
value表单字段值精确相等(允许空字符串)
checked / unchecked控件选中 / 未选中
enabled / disabled控件启用 / 禁用
count匹配节点数量(含隐藏节点,支持 0)
url / url_exactURL 包含 / 精确相等

验收目标断言会校验类型与预期严格一致,且必须定位到约定的验证范围——不能以整页通用文案或成功提示代替对指定记录结果的验证。

完成门槛与证据 ​

  • 验收目标的 assert 必须携带目标 ID,类型、预期与范围严格沿用已确认的约定。
  • 只有真实执行成功且步骤落库的断言才登记通过证据;模型的总结或自行声明不算验证。
  • 修改定位、数据、步骤顺序或删除相关步骤都会使已有证据失效,需要重新断言。
  • 调用 finish 完成时,所有必验目标必须都有有效证据,且脚本末步为断言;全局脚本审查之后还会再次校验,防止审查删掉关键断言后放行。
  • 跳过必验项后可继续生成其余部分,但不能报告完整完成。

断言失败不自愈

断言失败不会触发 AI 重定位自愈——避免把真实缺陷「治愈」成通过。普通动作步骤保留原有定位自愈;upload、scroll 不走通用 AI 自愈。

求助处理 ​

定位卡住时生成会挂起等待,四种处理方式:

方式说明
AI 修复让 AI 重新定位该元素(消耗模型调用)
改述你用另一句话描述操作意图,重新尝试
手动接管你直接在浏览器里完成该步操作
跳过跳过当前步骤继续;若涉及必验目标,该目标保持未验证

暂停与续跑 ​

生成过程中可暂停;之后点击「继续生成」从断点恢复,无需重跑。已通过的验收证据随暂停检查点保存,续跑后继续计入覆盖。

约定的保存与查看 ​

验收约定随脚本版本保存:保存脚本后可在用例详情点「测试意图与验收约定」查看,并随另存版本、导出与导入保留;旧脚本没有约定时继续兼容,不受影响。

生成记录 ​

每次生成在「生成记录」菜单留档:步骤级日志(工具调用、视觉观察、求助决策)与 token usage 记账全程可回溯,按保留天数自动清理。详见生成记录。

上传文件动作 ​

在生成页面点击附件按钮旁的上传图标(tooltip「添加测试文件」),将要上传到被测网站的原始文件保存到当前项目,再描述操作,例如「上传客户.csv,确认导入结果出现张三」。测试文件与用于理解需求的参考附件分开保存,不压缩图片、不提取后替换原文件,也不按参考附件的一小时有效期清理。

添加后的文件以标签显示在输入区上方,多个文件自动换行;标签右侧「×」从项目可选文件列表移除该文件,已有脚本仍保留回放和导出资源。按钮 tooltip 显示用途、文件数量与名称,无文件时不占标签行。

生成器通过 list_files 查询文件 ID、名称、类型和大小,再用 upload 选择文件。上传支持隐藏的 input[type=file] 和按钮触发的文件选择器,单次最多 5 个文件,单文件最多 20MB;多文件要求目标控件支持。选择文件后仍需断言页面的业务结果。

保存的上传步骤引用项目测试文件 ID,回放会校验项目归属和文件完整性。步骤表中可切换「上传按钮 / 文件 input」模式,也可选择其他测试文件;同名文件按大小及 ID 区分,每次添加保留独立版本。

单个导出和批量导出的 .testcase 都自动附带脚本引用的原始文件,包括已从文件列表移除但仍供回放使用的文件。重复引用只打包一次,未被脚本引用的项目文件不包含在内。导入其他项目或机器时,系统校验文件大小和 SHA-256,保存文件并自动更新步骤的文件 ID,无需手动复制文件目录。

含文件的用例采用版本 2 JSON,files 字段保存文件元数据和 Base64 内容;无文件的旧版本继续支持。单文件上限 20MB,单个用例的原始文件合计上限 100MB,Base64 编码后体积约增加三分之一。文件缺失或损坏会阻止导入/导出并提示错误;旧版导出的上传用例若只有文件 ID,需要在原项目重新导出。

本动作不操作系统文件窗口,不支持目录上传或没有文件 input/文件选择事件的纯拖放控件。结果不确定时先检查页面和接口,避免重复上传。

测试文件自动清理 ​

服务启动后扫描 test-files,之后每小时复查。文件从列表移除且没有引用、所属项目已删除且没有引用,或只剩不完整的写入文件时,会先标记为孤立;持续满足清理条件满 24 小时后,才删除原文件及对应元数据和标记。期间恢复引用会取消标记并重置宽限期。

项目文件列表中保留的完整文件、任意脚本版本引用的文件,以及保留的生成记录和内存检查点引用的文件均不会被清理。因此删除脚本后,若生成记录仍引用该文件,还需等该记录按保留策略清除或手动删除。刚上传的文件不会因尚未生成脚本而被删除。

上传、导入导出、脚本保存、生成和回放进行中会推迟扫描;服务关闭时停止定时器。数据库查询失败时不执行删除,损坏元数据和符号链接会跳过。清理数量、释放字节数和异常记录在服务端日志中。

滚动动作 ​

生成器支持 scroll,步骤编辑器也可选择「滚动」动作:

  • 页面:无需定位器,支持相对滚动、到起点、到末端。
  • 滚动容器:指定实际滚动区域的定位器,支持水平或垂直滚动;快照的 scrollable=x/y/xy 可用于查找容器。
  • 目标元素:将已经挂载的元素滚入视口,必要时同时滚动祖先容器。

相对距离单位为 px,范围 -10000 到 10000 且不能为 0,正数向下/右、负数向上/左。动作结果包含实际位置、是否移动及当前边界;到末端只滚到当前内容边界,不会无限等待或自动遍历全部数据。虚拟列表中未挂载的目标需要逐段滚动、查新快照,再验证业务结果。普通点击已经自动滚入视口,不需要额外滚动步骤。

滚动参数与稳定定位器随脚本保存,生成和回放使用同一实现。这里执行实际 DOM 滚动,不模拟 wheel 输入,也不跨 iframe 查找目标。滚动后位置不变会参与空转检测;已执行但后续状态不可读的动作仍保留记录,避免盲目重做。

编辑定位作用域 ​

在步骤表「定位值 / 角色」列点击「添加作用域」图标,为目标添加父容器范围。展开后可编辑策略和值;role 策略可编辑 role 与无障碍名称,也可用瞄准图标单独拾取容器。收起时显示范围摘要,删除图标只删除作用域、保留目标定位器。

例如同页有多个「确定」按钮,可先限定名为「导入客户」的 dialog,再定位其中的 button「确定」。父范围应唯一,目标必须在其实际 DOM 子树中;portal 下拉可能挂载到 body,不能仅因视觉上位于弹窗里就使用弹窗范围。

scope 支持 testid、role、label、placeholder、text、alt、title、css,不递归嵌套,不支持 xpath/response/websocket。页面滚动无元素定位器;上传和容器滚动可使用作用域。详见用例文件与字段。

TestDog 测试用例管理工具