把 LLM 接进测试流程,哪些环节值得做

把 LLM 接入测试流程,最容易做成“每个页面加一个生成按钮”。短期看功能很多,长期却不一定改变交付结果。

我更愿意从信息流看这件事:哪些环节需要阅读大量非结构化材料、整理候选项和关联历史证据,LLM 往往有帮助;哪些环节要求精确、可重复和可审计,仍应优先使用程序、规则和明确流程。

需求评审:先找不清楚的地方

让模型直接生成用例之前,可以先做需求检查:

  • 角色、前置条件和权限是否完整;
  • 状态转换和异常分支是否定义;
  • 时间、金额、数量等边界是否明确;
  • 幂等、重试和回滚语义是否说明;
  • 非功能要求是否可验证;
  • 与历史规则是否冲突。

模型输出应当是“待确认问题清单”,而不是替产品补写事实。一个合理的交付物会保留引用位置和不确定项,让评审人能回到原文确认。

测试设计:生成候选,不自动入库

可以给模型提供当前需求、接口契约、相关历史故障和少量相似用例,让它输出:

  • 候选场景;
  • 触发条件;
  • 预期风险;
  • 这条场景为什么值得测;
  • 与已有用例可能重复的部分。

人工 review 后再进入正式用例库。被删除或修改的候选也有价值,应记录原因:重复、不可达、需求不存在、优先级低,还是预期结果错误。

这样积累下来的不是“提示词技巧”,而是团队对业务边界的真实反馈。

测试实现:结构化输出优先

如果模型要生成测试数据、步骤或接口请求,不要只要求返回一段 Markdown。更稳妥的方式是定义 schema:

{
  "title": "重复提交同一订单",
  "preconditions": ["订单处于待支付状态"],
  "steps": ["并发发送两个相同幂等键的支付请求"],
  "expected": ["只产生一笔有效支付"]
}

应用先做 JSON Schema、类型和枚举校验,再把通过校验的结果交给后续系统。结构正确不代表业务正确,但至少能把格式随机性挡在边界外。

模型生成的代码和 SQL 必须经过静态检查、单测和人工 review,不能因为“看起来能运行”就直接执行在共享环境。

测试执行:确定性断言仍然是主力

状态码、数据库值、事件数量、权限、金额、幂等和资源状态,都应该使用明确断言。模型裁判适合补充:

  • 摘要是否遗漏关键信息;
  • 翻译是否保留原意;
  • 客服回复是否符合语气与政策;
  • 生成内容是否被提供的证据支持。

二者不冲突。先用确定性检查兜住硬边界,再用经过校准的语义评测覆盖开放问题。

谨慎对待“自愈”

定位器变化后自动选择另一个相似元素,可能让脚本继续运行,也可能把“提交订单”悄悄换成“保存草稿”。

自愈结果至少应:

  • 保留旧、新定位器和匹配理由;
  • 标记发生过自愈,不作为普通通过;
  • 对高风险操作进入人工确认;
  • 统计频繁自愈的页面,推动产品提供稳定测试属性。

自愈适合降低诊断成本,不适合掩盖页面契约变化。

缺陷归因:输出候选原因和证据缺口

失败后可以自动整理:

  • 用例、环境和变更信息;
  • 关键日志、trace 与错误栈;
  • 最近代码或配置变更;
  • 历史相似缺陷及最终结论;
  • 相关依赖的健康状态。

模型可以基于证据包给出候选根因、置信说明和下一步检查项。不要让它只输出一个“最可能负责人”,因为缺失日志时,流畅的解释很容易被误当成事实。

一个更有用的输出是:

候选原因 A:证据……
反证或缺口:……
建议验证:……

候选原因 B:证据……
反证或缺口:……
建议验证:……

确认后的真实根因应回写到缺陷库,用于评估归因质量,而不是只收集模型自己的答案。

发布门禁:比较版本,不迷信单分数

每次模型、提示词、检索、工具或业务代码变化后,运行同一版本的评测集和 grader,并输出逐样例差异:

  • 新增通过;
  • 保持通过;
  • 新增失败;
  • 结果不稳定;
  • 成本或延迟显著变化。

安全、权限、资金和写操作等关键样例可以设为硬门禁。开放式语义质量则更适合结合阈值、置信区间和人工 review。

上线后采用灰度或影子流量,观察真实任务完成率和失败分布。离线评测通过,只能说明已知问题没有明显退化,不代表未知风险已经消失。

闭环成立需要统一标识

需求、用例、执行、trace、缺陷、修复和评测样例之间,应有可以追踪的 ID:

需求
  → 测试场景
    → 执行与 trace
      → 缺陷
        → 修复提交
          → 回归样例

没有这层关联,LLM 只能在一堆文档里做模糊搜索;有了它,团队才能回答某条线上失败是否已经进入回归、由哪个修复解决、之后是否再次出现。

我会优先落地的顺序

  1. 失败日志与 trace 摘要,减少人工搬运;
  2. 需求疑点和候选测试场景;
  3. 结构化测试数据生成;
  4. 语义类结果评测;
  5. 经充分审计的自愈、测试选择或 Agent 执行。

顺序越靠后,对数据、权限、评测和回滚的要求越高。先把低风险辅助环节做稳,再决定是否给模型更多决策权。

LLM 接入测试流程的价值,不是让流程看起来更自动,而是让非结构化信息更快变成可核验的证据。只要最终判断仍然可追溯、可复现、有人负责,这种辅助才真正有用。

参考资料

// command palette

搜索文章

输入关键词搜索,使用 ↑ ↓ 选择,Enter 打开。

King Without a Crown xueyuan
0:00 2:55
智能缓存 · 跨页续播