1. 概述

测试用例生成是AI辅助测试中最具落地价值的场景之一。借助大语言模型(LLM)强大的语义理解和生成能力,测试人员可以从需求文档、代码、API定义等多种输入源自动生成结构化的测试用例,显著提升测试设计的效率与覆盖面。

💡 核心价值 AI生成测试用例不是替代测试人员,而是放大测试人员的能力——让有经验的人更快,让经验少的人更准,让团队整体覆盖更全。

1.1 AI生成 vs 传统用例设计

对比维度传统手工设计AI辅助生成
效率依赖人工逐条编写,复杂需求耗时数小时分钟级批量生成,大幅缩短设计周期
覆盖率受限于设计者经验和思维定式更容易发现边界条件和异常场景
一致性不同人员风格各异,标准难以统一遵循统一模板,格式规范一致
可追溯性需求到用例的追溯依赖人工维护可自动建立需求-用例映射关系
创新性容易陷入思维惯性,遗漏新场景组合式生成,可能发现新的测试视角
准确性理解深度高,但偶有疏漏需要人工审核,可能存在过拟合或幻觉
维护成本需求变更时手工同步,成本高变更时重新生成,需配合版本管理

1.2 适用场景

2. LLM用例生成的核心方法

2.1 基于需求的用例生成

这是最常见的用例生成方式。将需求文档、用户故事或功能规格说明输入LLM,模型从自然语言需求中提取测试场景,并输出结构化的测试用例。该方法的核心优势在于能够理解业务上下文,生成更贴近用户视角的测试用例。

典型流程:

  1. 整理需求输入:User Story / PRD / 功能规格文档
  2. 构造Prompt:设定角色、输入需求、输出格式
  3. LLM生成:输出包含前置条件、步骤、预期结果的用例
  4. 人工审核:检查逻辑正确性、补充遗漏场景
  5. 迭代优化:将反馈注入Prompt,重新生成或调整
✅ 最佳实践 输入需求时,尽量提供完整的上下文信息,包括:业务背景、角色权限、依赖关系、非功能需求等。上下文越丰富,生成的用例质量越高。

2.2 基于代码的用例生成

直接将源代码或函数签名输入LLM,让模型分析代码逻辑并生成对应的单元测试用例。此方法特别适合结合AI Coding工具(如GitHub Copilot、Cursor等)使用,在开发阶段同步生成测试代码。

适用场景:

⚠️ 注意 基于代码生成的用例容易过拟合到代码实现而非需求规格。如果代码本身有Bug,生成的测试可能会"验证"错误的实现。务必结合需求进行交叉验证。

2.3 基于接口的用例生成

从API的定义文件(OpenAPI 3.0、Swagger 2.0、Postman Collection等)中提取接口信息,自动生成接口测试用例。LLM能够理解接口语义,自动推断业务场景,并生成包含参数组合、状态码验证、响应断言等内容的测试用例。

典型生成内容:

用例类型生成方式示例场景
正向用例从Schema定义推断合法参数组合正常余额查询、正常转账交易
参数校验根据字段约束生成边界与非法值金额超限、必填字段缺失、格式错误
鉴权用例从Security定义生成授权/未授权场景缺Token、过期Token、权限不足
状态码覆盖根据响应Schema生成各类状态码验证200/400/401/403/500全覆盖
业务组合LLM理解接口语义后生成跨接口场景开户→存款→转账→查询流水

2.4 边界与异常场景生成

LLM在发现边界条件和异常场景方面具有独特优势。人类测试人员在设计用例时容易遗漏"冷门"的边界值,而LLM通过对大量测试案例的学习,能够系统性地枚举各种边界条件和异常分支。

LLM擅长发现的边界类型:

3. 提示词设计策略

Prompt的质量直接决定了生成用例的质量。以下总结经过实践验证的提示词设计策略和模板。

3.1 核心Prompt模板

一个高质量的用例生成Prompt应包含以下要素:角色设定 + 任务描述 + 输入内容 + 输出格式 + 约束条件。以下是一个通用模板:

你是一位资深软件测试专家,拥有10年以上金融系统测试经验。请根据以下需求生成测试用例。

## 需求描述
[此处粘贴需求文档/用户故事/接口定义]

## 输出要求
请以JSON格式输出,每个用例包含以下字段:
- id: 用例编号
- title: 用例标题
- preconditions: 前置条件
- steps: 测试步骤(数组)
- expected: 预期结果
- priority: 优先级(P0/P1/P2/P3)
- type: 用例类型(功能/边界/异常/性能/安全)

## 约束条件
1. 必须覆盖正向、边界、异常三类场景
2. 用例步骤应具体可执行,避免模糊描述
3. 预期结果应可验证,有明确判定标准
4. 优先级P0的用例不超过总数的20%

3.2 角色设定策略

不同的角色设定会显著影响LLM生成的用例风格和侧重点。角色描述越具体,生成效果越好。

角色设定适用场景生成特点
"资深测试工程师"通用功能测试用例设计严谨,覆盖全面
"银行核心系统测试专家"金融系统测试注重资金安全、事务一致性
"安全测试专家"安全测试关注注入攻击、权限绕过、数据泄露
"最终用户"验收测试/体验测试关注操作流畅度、错误提示友好性
"合规审计员"监管合规测试关注数据留痕、权限分离、流程合规

3.3 少样本示例(Few-shot)技巧

在Prompt中提供1-3个高质量示例用例(输入需求→期望输出),可大幅提升生成的一致性和质量。示例应覆盖不同类型的测试场景,展示理想的格式和粒度水平。

## 示例

输入需求:"用户登录功能:输入用户名和密码,验证通过后跳转到首页,连续3次失败锁定账户"

输出用例:
{
  "id": "TC-LOGIN-001",
  "title": "正确的用户名和密码登录成功",
  "preconditions": "用户已注册,账户状态正常",
  "steps": ["打开登录页", "输入正确用户名", "输入正确密码", "点击登录按钮"],
  "expected": "登录成功,跳转到首页,显示用户昵称",
  "priority": "P0",
  "type": "功能"
}

请参照以上格式生成以下需求的用例...
📌 Few-shot 关键点 示例不要与当前需求完全相同(避免过拟合);示例数量2-3个为宜(过多会增加Token消耗但不一定有质量提升);示例应展示格式规范而非覆盖全部逻辑。

4. 生成质量评估

AI生成的用例并非"开箱即用",需要从多个维度进行质量评估,确保其真正满足测试需求。

4.1 覆盖率评估

评估生成的测试用例对需求或代码的覆盖程度,主要包括:

4.2 有效性评估

评估每个用例本身是否"可用",核心指标包括:

4.3 冗余度控制

LLM生成的用例中常出现以下冗余问题,需要识别并清理:

⚡ 冗余的代价 用例冗余不仅浪费维护成本,还会稀释测试执行的注意力。建议在生成后先用自动化脚本去重,再人工精炼。

4.4 评估案例

以下展示一个真实的评估案例,说明如何判断和提升AI生成用例的质量:

用例(AI生成)评估结果改进建议
"输入正确金额,点击转账,系统应正常处理" ❌ 无效 缺少具体金额、账号、前置条件;预期结果模糊
"转账金额为100.00元,余额充足,预期扣款成功" ✅ 有效 具体金额、明确预期,可直接执行
"测试所有可能的金额输入" ⚠️ 需优化 范围太宽泛,应拆分为边界值等价类

5. 银行业应用场景

5.1 银行系统接口测试用例生成

银行系统的接口测试有其特殊要求:高安全性、事务一致性、幂等性保障、精确的金额计算等。结合OpenAPI定义和银行业务规则,LLM可以生成高质量的接口测试用例。

银行接口测试关注要点:

5.2 结合监管要求的用例覆盖

银行业受到严格监管(银保监会、人民银行等),测试用例必须覆盖监管合规要求。LLM可以将监管条文作为输入,自动生成合规验证用例。

5.3 某银行AI建设工程的测试用例需求

某银行AI建设工程(中国农业发展银行智能化系统)对测试用例生成提出了更高的要求,结合AI能力可重点解决以下需求:

🏦 行业共识 目前头部银行已普遍将AI用例生成纳入测试左移实践,在需求和设计阶段同步产出测试用例。某银行AI建设工程可参考同业经验,从接口测试和合规测试两个方向先行试点。

6. 实践建议与坑点

6.1 AI生成用例必须人工审核

这是最重要的原则,没有之一。LLM可能会产生"看起来合理但实际错误"的内容(幻觉),也可能遗漏业务特有的隐含规则。人工审核应重点关注:

6.2 避免过拟合到训练数据的常见模式

LLM的训练数据中包含了大量互联网上的测试用例模板,可能产生以下问题:

对策:在Prompt中提供领域上下文和约束;使用Few-shot示例引导输出风格;对生成结果进行领域知识交叉验证。

6.3 提示词工程的重要性

提示词工程不是一次性的工作,而是持续迭代优化的过程。建议:

6.4 持续优化:通过反馈迭代

用例生成的质量提升是一个闭环过程:

  1. 生成:使用Prompt + 输入 → 输出用例初稿
  2. 审核:人工审查,标记问题用例,记录问题类型
  3. 反馈:将问题用例和改进后版本作为新的Few-shot示例
  4. 优化:根据问题模式调整Prompt中的约束条件和格式要求
  5. 度量:统计用例通过率、修改率等指标,量化迭代效果
🔧 工具建议 建议结合测试管理平台(如禅道、Jira + Xray)建立"AI生成-人工审核-入库执行"的工作流,将用例生成无缝融入现有的测试流程。

6.5 常见坑点总结

坑点现象应对策略
幻觉生成 编造不存在的接口、参数或业务规则 严格基于输入文档,对照检查生成内容是否"无中生有"
格式不一致 同一批生成结果中字段名、层级结构不统一 在Prompt中明确输出Schema,使用JSON强制结构化
优先级失真 大量次要用例被标记为P0,核心用例反而P3 在Prompt中给出优先级定义和比例约束
上下文遗忘 长文档中后部分的内容被忽略,只用前半段需求生成用例 分段输入长文档,或使用支持长上下文的模型
过度自信 团队过度依赖AI生成,跳过必要的评审环节 建立"AI生成→人工评审→归档"的强制流程

7. 🎯 实战演练

以下三个实战任务帮助你从"知道"到"做到",建议按顺序完成,预计总耗时约 90-120 分钟

🛠️ 任务一:为银行转账功能生成测试用例

场景:你是一名银行核心系统的测试工程师,接到一个转账功能的测试需求。

📋 功能描述(作为LLM输入)

转账功能允许用户从本人的一个账户转出资金到任意行内/跨行账户。主要约束:
① 单笔转账金额不超过50万元,单日累计不超过200万元;
② 转出账户余额需≥转账金额+手续费(同行为0元,跨行为2元);
③ 收款方账户必须为有效账户,否则24小时内自动退回;
④ 转账成功后发送短信/App推送通知给双方;
⑤ 系统需记录完整的交易流水,支持打印电子回单。

背景:理解如何使用LLM从功能描述中生成结构化测试用例,并评估生成结果的可用性。

步骤:

  1. 打开任一LLM工具(如 ChatGPT / Claude / 文心一言 / 通义千问)
  2. 使用第3节中的「核心Prompt模板」,将上述功能描述填入需求部分
  3. 要求以JSON格式输出至少10条测试用例,覆盖正向、边界、异常三类场景
  4. 将生成的用例复制到本地文档,逐条阅读
  5. 从以下维度评估:需求覆盖率(是否遗漏场景?)、可执行性(步骤是否具体?)、幻觉检查(有无编造的功能?)

评估标准:

  • ✅ 覆盖了同行转账、跨行转账、金额超限、余额不足、无效账户至少5个核心场景
  • ✅ 用例步骤具体可执行,预期结果可验证(非模糊描述)
  • ✅ 无明显幻觉(未编造不存在的接口或业务规则)
  • ✅ 至少标注出 2 条你认为需要修改的用例,并写出修改后版本

⏱ 预计耗时:30-40 分钟

🔬 任务二:对比不同提示词策略的用例生成质量

场景:你已经掌握了基础的Prompt方法,现在需要找到最优的提示词策略。

背景:不同的提示词策略(直接Prompt / Few-shot / Chain-of-Thought)对生成质量影响显著。本任务通过A/B/C对照实验,让你直观感受策略差异。

步骤:

  1. 策略A(直接Prompt):仅给功能描述 + 输出格式要求,生成用例,记录结果
  2. 策略B(Few-shot):在Prompt中追加2个高质量示例用例(见3.3节模板),再次生成,记录结果
  3. 策略C(Chain-of-Thought):在Prompt末尾追加"在生成用例前,请先分析该功能的关键测试点、风险点和边界条件",然后生成,记录结果
  4. 将三次生成的结果填入下表,逐项对比评分(每项1-5分)
评估维度策略A(直接)策略B(Few-shot)策略C(CoT)
用例格式规范性_/5_/5_/5
场景覆盖广度_/5_/5_/5
异常/边界场景数量_/5_/5_/5
可执行性(步骤具体程度)_/5_/5_/5
输出一致性(多次生成差异)_/5_/5_/5
总分__/25__/25__/25

评估标准:

  • ✅ 完成三种策略的实验,表格填写完整
  • ✅ 写出不少于100字的对比总结,回答:哪种策略最适合银行转账这种业务场景?为什么?
  • ✅ 至少指出一项你在实验中的意外发现(如"CoT策略下异常场景大幅增加但生成时间更长")

⏱ 预计耗时:35-45 分钟

🔍 任务三:AI生成用例的人工审核练习

场景:你收到了同事用AI生成的5条转账测试用例,需要在入库前完成审核。

背景:AI生成用例的准确性是关键瓶颈。本任务训练你识别常见问题(幻觉、模糊、冗余),并掌握修改技巧。

📦 待审核的5条AI生成用例
#用例标题核心步骤摘要预期结果
1同行转账成功(正常金额)输入转出账号、金额100元、同行收款账号扣款100元,收款方到账100元,收到通知
2转账金额超过单笔限额输入转账金额60万元系统提示"单笔限额50万"并拒绝
3跨行转账手续费校验跨行转账1000元,余额=1002元扣款1002元,到账1000元,不收手续费
4大额转账风控拦截转账49.9万元给新添加的陌生账户系统自动触发风控,需人工审批后放行
5收款账户为冻结账户转账给一个已冻结的账户转账成功,资金正常到达对方账户

步骤:

  1. 逐条阅读上述5条用例,从以下角度判断有效性:
    • 业务逻辑是否正确?(对照功能描述中的约束条件)
    • 是否有幻觉?(编造了功能描述中未提及的功能)
    • 预期结果是否可验证?(有明确数值或状态作为判定依据)
  2. 对每条用例标注结论:✅ 有效 / ⚠️ 需优化 / ❌ 无效
  3. 对标记为 ⚠️ 或 ❌ 的用例,写出问题描述和修改后的版本

评估标准:

  • ✅ 正确识别出至少3条有问题的用例(提示:用例3逻辑矛盾,用例4有幻觉嫌疑,用例5业务逻辑错误)
  • ✅ 问题描述具体明确,非笼统的"写得不好"
  • ✅ 修改后的用例可直接用于测试执行

⏱ 预计耗时:25-35 分钟

📝 参考答案(完成后展开对照)
#判定问题修改建议
1 ✅ 有效 无明显问题 补充前置条件"余额≥100元"和具体账号信息即可
2 ✅ 有效 无明显问题 建议补充超出限额后的具体错误码或提示文案
3 ❌ 无效 逻辑矛盾:跨行手续费为2元,用户余额102元+手续费2元=应扣104元,但余额仅102元(不足)。且预期结果说"不收手续费"与功能描述矛盾 修改余额为1002+2=1004元,预期结果改为"扣款1002元(含手续费2元),到账1000元"
4 ⚠️ 需优化 功能描述中未提及"风控拦截"和"人工审批"功能,存在幻觉嫌疑。但也可能是合理的安全补充 如果系统确有风控模块则保留并补充风控规则说明;否则删除,改为基于功能描述的用例
5 ❌ 无效 业务逻辑错误:向已冻结账户转账不应成功,且功能描述中"收款方必须为有效账户"隐含冻结账户可能被视为无效 预期结果改为"转账失败,系统提示'收款账户状态异常,无法完成转账'"
🎓 实战练习建议 完成以上三个任务后,建议将你的产出(生成的用例、对比表格、审核结果)整理为一份文档,在团队内进行分享和讨论。AI用例生成的落地不是一个人的事情,团队共同建立的Prompt和审核标准才是长期可复用的资产。