把 LLM 接入测试流程,最容易做成“每个页面加一个生成按钮”。短期看功能很多,长期却不一定改变交付结果。
我更愿意从信息流看这件事:哪些环节需要阅读大量非结构化材料、整理候选项和关联历史证据,LLM 往往有帮助;哪些环节要求精确、可重复和可审计,仍应优先使用程序、规则和明确流程。
需求评审:先找不清楚的地方
让模型直接生成用例之前,可以先做需求检查:
- 角色、前置条件和权限是否完整;
- 状态转换和异常分支是否定义;
- 时间、金额、数量等边界是否明确;
- 幂等、重试和回滚语义是否说明;
- 非功能要求是否可验证;
- 与历史规则是否冲突。
模型输出应当是“待确认问题清单”,而不是替产品补写事实。一个合理的交付物会保留引用位置和不确定项,让评审人能回到原文确认。
测试设计:生成候选,不自动入库
可以给模型提供当前需求、接口契约、相关历史故障和少量相似用例,让它输出:
- 候选场景;
- 触发条件;
- 预期风险;
- 这条场景为什么值得测;
- 与已有用例可能重复的部分。
人工 review 后再进入正式用例库。被删除或修改的候选也有价值,应记录原因:重复、不可达、需求不存在、优先级低,还是预期结果错误。
这样积累下来的不是“提示词技巧”,而是团队对业务边界的真实反馈。
测试实现:结构化输出优先
如果模型要生成测试数据、步骤或接口请求,不要只要求返回一段 Markdown。更稳妥的方式是定义 schema:
{
"title": "重复提交同一订单",
"preconditions": ["订单处于待支付状态"],
"steps": ["并发发送两个相同幂等键的支付请求"],
"expected": ["只产生一笔有效支付"]
}应用先做 JSON Schema、类型和枚举校验,再把通过校验的结果交给后续系统。结构正确不代表业务正确,但至少能把格式随机性挡在边界外。
模型生成的代码和 SQL 必须经过静态检查、单测和人工 review,不能因为“看起来能运行”就直接执行在共享环境。
测试执行:确定性断言仍然是主力
状态码、数据库值、事件数量、权限、金额、幂等和资源状态,都应该使用明确断言。模型裁判适合补充:
- 摘要是否遗漏关键信息;
- 翻译是否保留原意;
- 客服回复是否符合语气与政策;
- 生成内容是否被提供的证据支持。
二者不冲突。先用确定性检查兜住硬边界,再用经过校准的语义评测覆盖开放问题。
谨慎对待“自愈”
定位器变化后自动选择另一个相似元素,可能让脚本继续运行,也可能把“提交订单”悄悄换成“保存草稿”。
自愈结果至少应:
- 保留旧、新定位器和匹配理由;
- 标记发生过自愈,不作为普通通过;
- 对高风险操作进入人工确认;
- 统计频繁自愈的页面,推动产品提供稳定测试属性。
自愈适合降低诊断成本,不适合掩盖页面契约变化。
缺陷归因:输出候选原因和证据缺口
失败后可以自动整理:
- 用例、环境和变更信息;
- 关键日志、trace 与错误栈;
- 最近代码或配置变更;
- 历史相似缺陷及最终结论;
- 相关依赖的健康状态。
模型可以基于证据包给出候选根因、置信说明和下一步检查项。不要让它只输出一个“最可能负责人”,因为缺失日志时,流畅的解释很容易被误当成事实。
一个更有用的输出是:
候选原因 A:证据……
反证或缺口:……
建议验证:……
候选原因 B:证据……
反证或缺口:……
建议验证:……确认后的真实根因应回写到缺陷库,用于评估归因质量,而不是只收集模型自己的答案。
发布门禁:比较版本,不迷信单分数
每次模型、提示词、检索、工具或业务代码变化后,运行同一版本的评测集和 grader,并输出逐样例差异:
- 新增通过;
- 保持通过;
- 新增失败;
- 结果不稳定;
- 成本或延迟显著变化。
安全、权限、资金和写操作等关键样例可以设为硬门禁。开放式语义质量则更适合结合阈值、置信区间和人工 review。
上线后采用灰度或影子流量,观察真实任务完成率和失败分布。离线评测通过,只能说明已知问题没有明显退化,不代表未知风险已经消失。
闭环成立需要统一标识
需求、用例、执行、trace、缺陷、修复和评测样例之间,应有可以追踪的 ID:
需求
→ 测试场景
→ 执行与 trace
→ 缺陷
→ 修复提交
→ 回归样例没有这层关联,LLM 只能在一堆文档里做模糊搜索;有了它,团队才能回答某条线上失败是否已经进入回归、由哪个修复解决、之后是否再次出现。
我会优先落地的顺序
- 失败日志与 trace 摘要,减少人工搬运;
- 需求疑点和候选测试场景;
- 结构化测试数据生成;
- 语义类结果评测;
- 经充分审计的自愈、测试选择或 Agent 执行。
顺序越靠后,对数据、权限、评测和回滚的要求越高。先把低风险辅助环节做稳,再决定是否给模型更多决策权。
LLM 接入测试流程的价值,不是让流程看起来更自动,而是让非结构化信息更快变成可核验的证据。只要最终判断仍然可追溯、可复现、有人负责,这种辅助才真正有用。