资讯动态

AI生成测试用例的提示词工程:四要素框架与实战模板

发布时间:2026/10/22 12:47:12 来源:尧图企业网站定制
测试工程师这两年最容易听到的一个说法就是AI要替代写用例的人了但我自己的真实感受是AI能不能写出你想要的测试用例九成取决于你喂给它的那句提示词。很多团队用AI写用例翻车问题不在模型不够聪明而在提示词太糙——要么就一句帮我测一下这个函数要么贴一堆代码没有上下文AI也只能给你生成一批看上去像样、实际跑不起来的废纸。这篇文章我就从原理到实操把我自己在单元测试、接口测试、业务场景测试里反复打磨出来的提示词方法论完整拆一遍包括每个关键步骤的设计意图、可复制的模板以及我在实战中踩过的坑。适合正在尝试用AI辅助测试但结果不够稳定的测试工程师、开发工程师以及想推动团队提效的测试负责人。1. 先搞懂底层逻辑AI写测试用例本质上是一次结构映射1.1 LLM写测试不是凭空生成而是把已知结构翻译成另一种已知结构我见过很多同行把AI写测试用例想得太玄乎以为模型像人一样理解需求然后创造用例。实际上当前主流大语言模型做这件事的底层逻辑更像一个超级翻译器它把代码、需求文本、接口定义这些输入映射到它脑子里见过的海量测试代码模式上去。举例说你给它一段计算订单金额的函数它看到的不是一段逻辑而是这是一个接收参数并返回数值的函数常见测试模式包括边界值、非法输入、正常路径。模型通过概率预测把你提供的信息与训练语料中最接近的测试用例模式匹配起来再结合一定的约束推理生成结果。这个原理决定了两个重要事实输入信息的完整性直接决定了输出质量。AI没有读心术它只能基于提示词里的信息展开。你给的信息越接近一个测试工程师手里应有的资料它输出的东西就越接近一份可用的测试用例。对业务规则的理解是概率性的不是逻辑性的。模型觉得某个边界值重要但它并不知道你的业务里这个字段到底允不允许为空。所以AI生成的用例天然需要人去校对和补充业务断言。理解这一点对后面的提示词设计至关重要——你不是在命令AI而是在尽可能完整地交代背景降低它的猜测难度。1.2 提示词的三种信息层级我在实践总结中把一份好的测试用例提示词拆成了三层信息层级内容作用缺失后果指令层角色、任务目标、输出格式让模型明确要干什么答非所问泛泛而谈上下文层被测代码、接口定义、需求描述、业务规则让模型有据可依编造逻辑断言错误约束层测试框架、边界值要求、禁用的输入、覆盖率要求让输出贴合实际工程环境生成的用例无法执行这个分层和你在公司里给新同事交代任务时说的话是同一个逻辑。你不会只说写个测试然后走开你会告诉他被测对象是什么、用什么框架、重点测哪些逻辑、哪些边界不能漏。提示词就是你对AI说的工作交代。1.3 适合与不适合交给AI的测试类型不是所有测试都适合让AI写。我自己的分界线是这样的高度结构化、规则清晰的任务单元测试、API接口测试、数据校验测试AI生成效果非常好因为输入输出结构明确。业务场景复杂、隐性规则多的任务端到端业务流测试、涉及复杂状态机的场景AI只能帮你列测试点和场景矩阵很难直接生成可运行的脚本。需要大量真实业务数据的测试AI生成的数据往往是合理的假数据无法覆盖生产环境特有的脏数据场景。认清这个边界你才不会拿AI硬写复杂业务用例然后抱怨它不靠谱。2. 四要素法所有优质测试用例提示词的通用骨架2.1 身份与目标让AI进入资深测试工程师的思维模式第一条指令设置身份设定和任务目标效果远好于直接甩函数代码。同一段代码给你就是负责这个模块的测试工程师请输出一套可落地的单元测试用例和给请分析这段代码的可测试性模型产出的侧重点完全不同。我常用的身份设定格式是你是一名有五年以上经验的测试开发工程师负责维护一个高质量的后端测试套件。你习惯用数据驱动的方式设计测试用例重视边界条件和异常路径并且你写的用例必须可以直接在项目中运行。这段身份提示直接约束了后续输出的风格和质量取向。后面紧接着写出具体任务例如基于下面的代码设计 pytest 风格的单元测试用例要求覆盖正常路径、边界值、异常输入三个维度。身份在前、任务在后模型输出时会自动带上有经验工程师的判断标准而不是实习生在写作业的敷衍感。2.2 输入信息给到够用而非过量的上下文上下文太少不行太多同样不行。把整个项目代码粘进去不是好的做法模型处理超长上下文时会稀释注意力高价值信息反而被淹没。我在实践中总结了一个上下文最小集——给到这些信息就够模型生成合格的测试用例被测函数/方法的完整代码必须依赖的输入数据结构例如入参对象定义、DTO涉及的业务规则描述尤其是边界规则必须来自需求文档或注释错误处理约定返回错误码还是抛异常测试框架和项目约定可选但能显著提高可用性贴代码时我用代码块包裹并加一段引导说明例如这是被测实现代码{代码块}。这样做的好处是让模型明确知道哪些是代码、哪些是规则描述避免混淆。有一点算经验分享对于复杂函数我建议先手动调用一次把真实运行结果记录在提示词里作为标准答案给模型参照。模型生成用例时会主动对齐这个输出断言值就不会猜错。2.3 约束与规则质量红线必须显式声明AI默认会生成它认为合理的用例但合理不等于符合你的工程质量要求。约束条件是最常被忽略却最关键的一层。我一般会在提示词末尾追加一个硬性约束清单例如硬性要求 1. 使用 pytest 框架不使用 unittest 2. 测试函数命名前缀为 test_ 3. 对浮点数断言使用 pytest.approx禁止 直接比较 4. 每个测试函数必须包含 Arrange-Act-Assert 三段结构注释 5. 禁止 mock 被测函数内部调用的私有方法改为构造真实依赖 6. 边界测试数据从以下列表中选择空字符串、超长字符串255字符、null、负数、0。给模型明确的选择范围比让它自由发挥更稳。比如你只写覆盖边界值它可能给你选一个 999999 当边界值而你实际关心的边界是 100000 的整数溢出点。显式告诉它数据范围结果执行率会直线上升。2.4 输出格式与验收标准让结果拿到就能用很多团队把AI生成的用例手动复制改格式这其实浪费了提示词的能力。要求模型直接输出可导入工程的文件会让效率高得多。我在提示词中指定输出格式 1. 直接用 Python 代码块输出完整 pytest 文件内容不要额外解释代码逻辑 2. 文件开头注明被测函数名与用例清单 3. 每条用例前用 # TC-编号: 用例描述 形式注释 4. 代码块外不要出现任何与代码无关的说明除非暗示存在无法覆盖的异常场景。这个格式约束还附带一个好处——生成的用例结构完全一致后续接自动化解析、统计覆盖率都方便。3. 从易到难三套可直接复制的提示词模板3.1 单元测试场景单函数全覆盖模板单元测试是AI生成效果最好、也最适合推广到整个团队的场景。原因是单个函数的输入输出边界清晰模型不需要理解复杂的系统交互。这是我经过几轮迭代沉淀出来的单元测试提示词模板角色你是负责当前模块质量保障的测试开发工程师。 任务为下面给出的 Python 函数编写一套完整的 pytest 单元测试用例。 被测代码 [粘贴函数代码] 函数说明 [粘贴函数注释/需求描述例如金额必须大于0且小于100000超过范围抛出异常] 工程约定 - 测试框架pytest pytest-cov - 测试文件存放目录tests/test_order_service.py - 断言精度浮点比较使用 pytest.approx - mock 规则被测函数内部使用的日期时间统一用 freezegun 控制不做真实等待。 边界要求 - 必测边界0, 1, 99999, 100000, 100001, 负数, None, 空字符串如适用 - 每组边界单独写一个测试用例严禁用参数化合并掩盖边界语义 输出要求直接输出完整的 pytest 文件包含文件头注释、导入依赖、测试用例清单及用例代码。这套模板的核心理念是把边界数据当作显式输入交给模型而不是让它猜。我试过不指定边界值让它自由发挥生成结果里十个用例有八个测的是正常数据边界覆盖稀烂。加上边界列表后测试覆盖报告上的数字非常好看。3.2 接口测试场景从OpenAPI定义生成接口用例接口测试比单元测试多了一层依赖——请求和响应结构。如果提示词只给接口路径模型生成的用例只能算看起来完整。我的做法是把OpenAPI定义中的关键片段直接贴进提示词模型就能准确提取出参数类型、必填项、枚举值、响应码生成的测试脚本才能真实可用角色你是负责接口自动化的测试开发工程师。 任务根据下面提供的 OpenAPI 片段为 /api/v1/orders 接口生成 Python requests 测试脚本。 接口定义 [粘贴 OpenAPI 片段至少包含 path、parameters、requestBody schema、responses] 测试环境 - Base URL: https://staging.example-api.com - 认证方式请求头携带 Authorization: Bearer tokentoken 从环境变量 TEST_TOKEN 读取 - 测试数据统一使用 faker 库生成随机数据 必须覆盖的测试点 1. 正常创建订单状态码 201响应体校验字段 2. 缺少必填字段状态码 400 3. 字段类型错误例如 amount 传字符串状态码 422 4. 金额超过业务上限 100000状态码 400 5. 未携带认证 token状态码 401 断言要求 - 所有响应必须先校验状态码再校验响应体关键字段 - 对创建成功的订单落地一条数据库断言查询 orders 表中对应记录的状态为 PENDING 输出要求 - 使用 pytest 组织测试用例支持 pytest -m orders 筛选 - 每个用例独立可运行不依赖执行顺序这段提示词已经把被测系统的期望行为全部显式转述给模型它生成的东西已经不是泛泛的接口调用而是能通过CI运行的接口测试套件。这里的关键技巧是数据库断言。多数模型默认只做响应断言把数据库状态校验加进去作为硬性要求后测试的有效性直接提升一个档次。3.3 复杂业务场景从需求描述到用例矩阵复杂业务场景是AI最容易露怯的地方但也不是完全不能用。我的处理思路是不让AI直接生成脚本而是让它先生成测试场景矩阵由人来补充和确认后再让它基于矩阵生成具体用例。对于业务规则的提示词设计我会用规则列举场景推导的组合角色你是资深业务测试专家擅长通过分析业务规则设计测试场景矩阵。 任务下面是一个订单系统的退款业务规则请生成测试用例矩阵。 业务规则 1. 订单已发货且收货超过15天不允许退款 2. 未发货订单可全额退款退款金额等于实付金额 3. 已发货7天内可退货退款但需要扣除来回运费每单固定15元 4. 使用优惠券支付的订单退款时优惠券不返还退款金额按实付比例计算 5. 秒杀活动商品一律不支持退款 6. 支付方式为余额支付的订单退款原路退回余额实时到账。 输出要求 1. 先用表格输出测试场景矩阵列包括场景编号、前置条件、操作步骤、预期结果、备注 2. 表格中必须包含正常场景、边界场景和异常场景 3. 重点关注优惠券部分发货秒杀活动这类组合条件下规则冲突时的优先级判断 4. 对于拿不准的规则冲突场景标注待需求方确认不要自行假设 5. 在表格生成后再为每个场景输出对应的接口级测试步骤。这套提示词的核心是要求模型区分已知与未知。处理复杂业务时模型会有两种坏事发生一是自行假设缺失规则二是在规则冲突时掩盖矛盾。我在提示词里显式要求标注待确认项等于给模型装了一道闸门它生成的内容会诚实很多。4. 生成之后的质量保卫战审查、修正与迭代4.1 AI生成测试用例的五个通病用了这段时间AI辅助测试我总结出模型生成测试用例最常见的五类问题你可以拿着这份清单去审查自己的AI输出通病表现根因断言缺失只调用了被测函数没有断言行对任务目标理解不到位断言软化直接return后断言等于原值或者断言一个必然成立的空值训练数据中烂用例污染边界遗漏只测正常值和明显错误值中间边界全跳过缺少业务边界输入假用例测试对象不存在、mock了未使用的依赖上下文未给全模型编造不满足工程规范用错断言API、命名风格乱、依赖未声明未在提示词中声明约束单独拎出断言软化这个坑详细说说。模型生成一个测试函数有时候会出现这样的代码def test_calculate_total(): result calculate_total([1, 2, 3]) assert result is not None这个断言能通过review但实际没有测任何逻辑。原因是训练语料里存在大量低质量测试代码被模型当成了范式。在提示词里明确要求每个测试必须至少包含一个针对返回值具体值的断言禁止只断非空能在很大程度上解决这个问题。4.2 对话式迭代把模糊反馈换成精准指令AI第一次生成的测试用例不满意时很多人的做法是重新生成一遍或者回复你再想想。这些模糊反馈几乎没用因为模型不理解你具体不满意什么。正确的做法是把你的审核意见翻译成机器可执行的结构化指令。举例原反馈边界值测试不够。 有效反馈请补充 amount 字段等于 100000 和 100001 的两个测试用例分别断言返回 200 和 400 状态码。同时移除用例 test_amount_upper_bound_ok 中对响应体非必填字段的断言。这个例子体现了精准反馈的效果。我自己的习惯是对AI生成结果做一轮人工review把问题列成编号清单然后一次性把所有修订意见发给模型。逐条小改效率太低了而且中途对话过深模型容易忘记上下文。4.3 数据与断言强化从看着对到真能跑最后一道质量关卡是让AI生成的用例真正跑起来。我建议在提示词模板里加上一个固定尾巴自检清单生成前逐条自查 1. 所有功能命名都在被测代码中实际存在 2. 每条断言都与被测逻辑的真实预期对齐 3. 测试数据覆盖所有显式声明的边界值 4. 没有使用不存在的测试依赖 5. 如果对某个断言无把握请在该用例注释中标注【需人工确认】不要自行删除。这个自检清单利用了模型对指令的跟随能力能在生成阶段就拦截掉相当比例的低级错误。实测下来加上自检清单后我需要对生成结果做返工的次数大概减少了四成。5. 把提示词沉淀成团队资产5.1 模板化与参数化从个人用法到团队规范个人用得好和团队都用得好之间差的是一套规范的模板管理。我自己实践下来最有效的是三层模板库的做法通用层适用所有测试类型的基础模板包含身份设定、输出格式、自检清单。专用层按测试类型拆分——单元测试、接口测试、业务场景矩阵各有固定模板。定制层按项目和团队约定填充——框架版本、断言风格、mock策略、边界规则。团队的提示词模板不是写出来就完事建议像代码一样管起来。放在共享目录用Git做版本管理任何人调整模板都要走merge request。模板更新频率其实挺高尤其是团队切换测试框架或者补充新的工程规范时。建议创作初期收集每个人实际用过的有效提示词而不是大家凭空造模板这样模板的可执行性更高。5.2 适配常见技术栈的几个调整思路不同技术栈在提示词里的差异点其实不多主要集中在这几个调整维度断言库pytest用pytest.approxJUnit用assertEquals的delta参数Jest用toBeCloseToGo测试用assert.InEpsilon测试数据Java项目提示用javafakerPython项目提示用fakerNode项目提示用faker-jsmock策略明确了被测代码依赖的类型数据库、外部HTTP、消息队列每种依赖的mock库不同一次性在模板里限定。覆盖率要求如果团队要求行覆盖率和分支覆盖率把这个硬性目标放进提示词。例如请确保分支覆盖率达到90%未覆盖分支需用注释说明原因。一个容易踩的坑是一个模板走天下。团队里变量、Python、Java三个技术栈并存时如果不做适配模型生成的代码要么不是对应语言要么断言风格错乱。把技术栈作为参数传入模板生成结果会稳定很多。5.3 我的几点复盘心得最后分享几个我踩过坑之后沉淀下来的心得供参考第一AI写测试用例这件事收益最大的不是在写这一步而是在审查这一步。有价值的做法是用AI高速生成第一版把人的精力集中到规则审核和业务补充上。人的稀缺判断力不应该花在写重复结构上。第二提示词的质量评价不能只看看起来是否专业。真正有效的评价指标是生成的用例能不能一次通过CI、真实覆盖率是否达标、发现的缺陷数量是否增加。建议团队引入这三个指标来度量AI辅助测试的效果而不是凭印象说好用或不好用。第三别急着要求AI一步到位的状态。生成结果不满意时通过结构化反馈迭代两三轮的体验通常好过重新写一段提示词。我给团队定了个三轮原则同一段需求经过三轮精准反馈后仍然不能达到可用状态才允许人工手写。实际执行下来九成以上的场景在三轮内就能收敛。第四也是我最近感触最深的一点优质提示词是聊出来的不是写出来的。最有效的提示词往往来自你和AI一轮轮对话之后把好用的句子沉淀成一个模板。这个过程就像做测试用例本身的迭代没有一蹴而就的完美版本。如果你现在正被AI生成测试用例的质量不稳定困扰建议你先把今天这套四要素框架拿去对比现有的提示词看看身份、上下文、约束、输出格式哪一层偏弱大概率就是那里出了问题。修好那一层测试用例的质量会肉眼可见地涨上来。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑