AI提效这条路,其实真没那么多玄学。去年我开始在各种项目里手搓测试Prompt,模板换了四五版,踩过的坑比写过的用例还多。最开始我以为只要把需求扔给AI,它就能乖乖吐出全量测试用例,结果前几次生成的用例,写得那叫一个一本正经地胡说八道——场景倒是看着齐全,拿回业务上一对,关键边界一个都没抓到,反而一堆根本不存在的操作路径。后来我才回过味来,问题不在AI,在我给的提示词本身。
这一年多下来我最大的感受就是:AI能不能成为测试团队的得力干将,核心不在于模型多聪明,而在于你给它的Prompt有没有把三件事说清楚——角色是什么、任务边界在哪、输出长什么样。今天就把我打磨出来的这套思路和模板完整拆开,从框架原理到可直接复制的模板,再到我实际踩坑后的迭代过程,一次说透。
1. 核心Prompt框架:五层结构是稳定输出的关键
1.1 为什么直接描述需求,效果会时好时坏
我见过太多测试同学用AI的方式是打开对话框,直接来一句“帮我写测试用例”或者“给我设计一下登录模块的测试数据”。这么问不是不行,但输出质量全凭运气。为什么?因为大模型是靠概率生成文本的,你给的信息越笼统,它可选的下一个词就越多,生成结果就越分散。
打个比方,你让一个新来的实习生“整理一下测试计划”,他大概率会交一份概述性的文档,但如果你告诉他“按照系统测试计划模板,把功能测试、接口测试、兼容性测试的时间安排做成分周排期表,用表格输出”,他交上来的东西就完全不一样了。Prompt就是这个作用——它是你和AI之间的一等公民接口,信息结构越清晰,AI的发挥就越稳定。
我用的这套框架总共分五层:角色层、任务层、上下文层、约束层、输出层。每一层解决一个问题,缺一层,结果就会失真。
1.2 五层结构逐层拆解
第一层:角色定位。别小看这一句“你是一名资深测试工程师”,它决定了AI后续所有回答的措辞基调和专业深度。角色设定不是玄学,它本质上是为AI调用特定领域的知识分布做了预热。你让它扮演“不懂技术的业务用户”和“做过五年Web端测试的资深测试”,同一份需求描述,后者给出的用例在深度上会明显更专业。
第二层:任务定义。这一层要说清楚你要AI做的具体动作。是“生成测试用例”,还是“评审别人写的用例”,还是“根据需求变化给出回归范围”?动作不同,思考路径完全不同。任务定义最好一句话能说完,说得太多反而模糊。
第三层:上下文加载。这是最容易被忽略但实际上最决定质量的一层。AI不像你,它不知道你的系统是B/S还是C/S,不知道你用PostgreSQL还是MySQL,不知道你们项目里有什么历史包袱。你必须在Prompt里把这些背景信息塞给它。我一般会贴入PRD关键段落、接口定义表、字段枚举值、历史缺陷记录摘要。上下文越充分,AI生成的东西越贴合实际。
第四层:约束条件。比如“不要写UI自动化脚本”“只考虑接口层验证”“年龄字段只考虑正整数”“不考虑并发场景”。约束的作用是把AI想象力的缰绳勒住,不然它动不动就给你扩展到性能测试、安全渗透、兼容性矩阵,看着热闹,落地全是负担。
第五层:输出格式。测试场景里最好用的输出格式是Markdown表格和JSON。表格适合给人看的用例集,JSON适合给代码或后续工具链处理。如果你不指定格式,AI默认输出的往往是一大段带标题编号的文本,想提炼字段还得二次加工。指定了格式,后续处理效率能翻一倍。
这套框架我用了快一年,凡是严格按五层写的Prompt,生成质量的方差非常小;凡是偷工减料只写了“帮我干个XX”的,结果基本都需要大改。如果你只能记住一个技巧,就从把每层信息写完整开始。
提示:角色定位不是越夸张越好,关键看匹配度。“资深测试工程师”够用了,没必要写“拥有十年经验的全球顶尖测试架构师”,这种夸张描述反而可能让AI生成风格变得空洞、说教味重。
2. 覆盖测试工作流的五类Prompt模板
有了框架,就要套到具体场景里。我平时用得最多的是五类模板,基本覆盖了功能测试中80%的日常任务。下面的模板可以直接复制去改,变量部分用方括号标出了。
2.1 测试计划生成模板
测试计划这活儿,很多团队写出来就是走过场,列个时间表、写几句范围描述就交了。AI能帮的是把计划里的测试策略部分做厚,让计划真正成为执行指引。
我用的Template长这样:
角色:你是一名有5年Web端测试经验的测试组长,擅长做测试策略设计和排期预估。 任务:帮我草拟一份[项目名]的功能测试计划。 上下文: - 项目背景:[用两三句话说明业务目标] - 迭代周期:[说明本轮迭代几个Sprint,每个Sprint几天] - 主要模块:[列出本轮涉及的功能模块,比如登录、订单列表、结算支付] - 团队规模:[测试人员数量以及是否有自动化支撑] - 已知风险点:[比如第三方支付回调不稳定、涉及老系统数据兼容、UI改版影响回归量大] 约束: - 不讨论性能测试和安全测试,只聚焦功能测试; - 排期预估要按人天颗粒度; - 测试范围只覆盖本轮新开发加受影响的历史模块。 输出格式: 用Markdown输出,分五部分:测试目标、测试范围、测试策略、排期与人天估算、风险与应对。这个模板我实际验证过,生成的计划里排期估算会有一个特别有用的点——它会主动区分“新增功能验证”和“回归验证"两类工作量,而且会对风险点做"影响模块清单”拆解,比如你提了“UI改版影响回归量大”,它会顺藤摸瓜列出“入口页面、导航菜单、页面组件兼容”等优先回归清单。这些细节一般新人写计划时根本考虑不到。
2.2 测试用例生成模板
测试用例模板是我用得最频繁的。这里有个小诀窍:一定要在Prompt里附上“历史缺陷样例”。AI会从样例中归纳出你们项目容易出错的方向,生成用例时会自动向这些方向倾斜。没有这一步,生成的用例总是偏“教科书风格”,覆盖的都是一眼能看穿的正常路径。
角色:你是一名资深功能测试工程师。 任务:为下面的功能模块生成完整的功能测试用例,重点是边界值和异常流。 上下文: - 模块说明:[粘贴PRD中该模块的功能描述,或自己写清输入规则] - 涉及的接口定义:[可选,贴出接口文档中的入参出参说明] - 数据规则:[比如“手机号必须是11位数字且以1开头”“优惠券仅限新用户使用”] - 历史缺陷:[列出过去这个模块出现过的bug,比如“负数值优惠券导致订单金额变负数”] 约束: - 用例只涉及后端逻辑验证,不做UI层验证; - 每一条用例必须有明确的预期结果; - 不要生成重复度高的边界值用例,每条要对应独立场景。 输出格式: 用Markdown表格输出,表头为“用例编号、优先级、前置条件、测试步骤、输入数据、预期结果、实际结果留空”。用这个模板生成的用例,和直接问AI生成的差别在哪?差别就在后半句“重点是边界值和异常流”。AI在默认状态下倾向于生成“正确路径”用例,你一旦在任务层点明要边界值和异常流,它生成的用例里至少有一半会集中在空值、超长、非法格式、数据边界、状态冲突这些真正容易出bug的地方。
2.3 测试数据构造模板
造数这件事,看似简单,其实烦得很。项目前期数据要合规,后期要覆盖边界,手工一条条录要命。AI造数强在速度快、批量灵活,但前提是你要给它明确的数据分布要求。
角色:你是一名测试数据管理专家,非常了解数据库批量造数的注意事项。 任务:为[模块名]造一批测试数据,覆盖正常、边界、异常三类场景。 上下文: - 表结构关键字段:[列出字段名、类型、约束条件。比如“user_id bigint主键;age int非空;email varchar 唯一”] - 业务规则:[比如“订单金额必须大于0,优惠后金额可为0”] - 需要的记录数:[比如“正常数据100条、边界数据20条、异常数据10条”] 约束: - 数据要尽量真实,不能都用test001这种批量重复模式; - 异常数据要能对应到具体异常场景; - 如果字段之间存在关联约束,造数时要保持一致性。 输出格式: 生成INSERT语句,用代码块输出,每条语句前加注释说明该记录覆盖的场景。我实际用下来,AI生成的INSERT语句大部分能直接执行,但有几个坑要盯紧——字符串字段的引号转义、日期格式是否符合MySQL的语法、自增主键冲突。执行前最好自己在本地库先跑一遍批量插入,确认没语法错误再拿到测试库。还有一件事:在Prompt里把表的CHECK约束、外键关系贴进去,AI生成的造数代码就会自觉避开违规数据,不会给你造出一堆脏数据来。
2.4 自动化脚本生成模板
这个场景最适合让AI打辅助,但要注意——AI生成的自动化脚本,只能当作初稿,不能当作成品。我通常让AI生成Pytest或Selenium脚本骨架,再自己补充断言和处理动态逻辑。
角色:你是一名熟悉Pytest+Requests的接口自动化测试工程师。 任务:为下面的接口编写自动化测试用例代码,可以独立运行。 上下文: - 接口文档:[粘贴接口路径、请求方法、请求头、请求体、响应结构] - 依赖条件:登录接口需要先调用auth接口获取token,token有效期2小时; - 已有的公共模块:[如果项目有现成的封装,比如读取配置的工具函数、公共断言函数,贴进来] 约束: - 只编写关键接口的正常流程和主要异常场景脚本; - 断言必须覆盖状态码、业务码、关键返回字段; - 数据不与具体环境硬绑定,通过环境变量读取。 输出格式: 用Python代码块输出,包含必要的import和被@pytest.mark.parametrize标记的参数化用例。这里有个我踩过的坑:让AI写自动化脚本时,如果不提供“公共模块代码”,它就会自己发明一堆封装函数,比如自己写一个request请求类、自己定义断言工具。等这些代码混合进你的项目工程里,根本跑不通。正确做法是把你们项目已有的requests封装、配置读取方式、日志模块都贴在上下文里,AI生成的代码会顺着你的项目风格写,省去大量改造时间。
2.5 缺陷报告与根因分析模板
写缺陷单这事,好多新人写不明白,描述模糊、复现步骤缺失、定位不到根因。AI虽然不能替你复现bug,但能帮你把已知信息整理成一份高质量的缺陷描述并辅助定位。
角色:你是一名精通多语言后端系统的缺陷分析工程师。 任务:根据我提供的现象描述,帮我完善缺陷报告,并分析可能的原因。 上下文: - 当前模块:[模块名和功能描述] - 已知现象:[粘贴你观察到的报错、页面表现、用户反馈] - 技术栈:[后端语言与框架、数据库、部署方式] - 最近是否有代码变更:[可选,这个信息对根因分析特别关键] 约束: - 根因分析要列出至少3种可能性,并按概率排序,标注排查路径; - 不要直接下结论说“某个原因导致”,要说明验证方法。 输出格式: 分四部分输出:缺陷描述、复现步骤、影响范围分析、可能的根因及验证方式。这个模板的价值不在“生成缺陷描述”这一步,而在“可能的原因分析”。AI对常见后端bug的模式有很强的归纳能力,比如空指针、字段缓存不一致、异步任务重试导致重复入账、数据倾斜导致的慢查询,它给的排查方向通常比新人自己瞎猜要全面。但注意,它只能给方向,最终结论必须以你的实际排查为准,别让AI的推测带偏了调试方向。
3. 分页功能实测:一个Prompt从初稿到可用的三轮迭代
光给模板不给真实过程,跟看了菜谱还是不会做菜差不多。我拿一个最常见的分页查询功能,完整走一遍Prompt迭代过程,看看生成的测试用例到底是怎么一步步变靠谱的。
3.1 第一轮:不加约束的初版结果
初始Prompt如果只写一句话——帮我生成“订单列表分页查询”的测试用例——AI生成的用例大概率是:第一页加载正确、点击第二页正确、翻到最后一页正确、输入页码跳转正确、共10条数据显示5条等。这些内容对吗?对。有用吗?勉强。
问题很明显:没有一个用例涉及pageNum和pageSize的具体边界值,没有考虑参数非法输入时的提示信息,没有覆盖排序字段异常的情况。总结就是,中了通用模板的招,全是通过用例,异常流为零。
3.2 第二轮:补充业务规则和边界约束
发现问题后,我在Prompt里加入关键上下文:接口入参是pageNum和pageSize;业务规则是单页最多100条、超过则拦截;排序字段只允许createtime和amount,传入其他字段要报错;历史缺陷是曾经出现过pageSize传入0时接口死循环的问题。
加了这些之后,AI生成的用例明显“带刺”了,包含:pageSize=0时返回参数校验异常、pageSize=101时被拦截并提示最大限制、pageNum为负数时返回第一页还是报错、sortField传入非法值时返回错误码、空数据表时列表接口返回空数组而非报错。这些用例已经能真正指导开发自测,也能放进回归用例集。
这一轮的差异说明了什么?说明AI不是不聪明,而是它和你之间的信息传递是严重依赖上下文的。你不告诉它“这里曾经出过pageSize=0死循环的bug”,它根本无从预测这个边界。人的经验需要通过上下文注入到Prompt里,AI才能站在你的肩膀上输出。
3.3 第三轮:输出层结构化改造
第二轮生成的用例可用,但格式是格式是“序号+标题+步骤+预期”的段落式,我想直接导入禅道或JIRA,得逐条粘贴,还是很别扭。所以第三轮我在输出层加了一个要求:用Markdown表格输出,表头固定为“用例编号、前置条件、测试步骤、输入数据、预期结果”;再加一句“每条用例要独立,不要合并场景”。
改了这一句之后,输出直接变成了一张干净的表,复制到Excel再导入测试管理工具,连格式都不用调。这一步虽然改动最小,但节省的工时是最多的。以前整理一条用例要两分钟,现在省到几乎没有。
三轮迭代得到的结论是:Prompt工程不是一次成型的事,而是一个基于输出的反馈循环。先跑一版看看AI理解得怎么样,再逐步把业务经验、边界约束、格式要求填进去,迭代两三轮之后,结果就能达到可交付的水平。这也是Prompt Engineering和普通输入的本质区别——它不是写一句静态的话,而是建立一套持续优化的协作方式。
4. AI辅助测试必须避开的四类坑
AI看着好用,实际落地时坑也不少。很多团队兴致勃勃引入AI,结果上线没多久就弃用,多半是踩了下面几类坑没爬出来。
4.1 坑一:AI幻觉导致的无效用例
AI会一本正经地生成系统里根本不存在的功能路径。比如你让它测“订单导出”,它生成了一条用例:点击导出后,异步任务生成文件,并通过短信发送下载链接。但实际你们的系统根本没有短信链路,导出是同步弹窗下载。这种用例拿给开发,开发直接一头问号。
应对方法:在上下文层,把系统真实的操作路径写清楚;在约束层,加一句“所有用例的操作步骤必须在上述功能描述明确提到的范围内,不要推断不存在的前端交互或通知方式”。这句话能有效压制AI的脑补冲动。
4.2 坑二:断言过浅导致自动化测试形同虚设
让AI写自动化脚本时,它默认生成的断言一般就是assert response.status_code == 200和assert response.json()["code"] == 0。这种断言只能证明“接口没挂”,根本证明不了“业务对了”。一个接口的逻辑就算完全坏了,只要它返回了JSON,断言就能通过。
我现在的Prompt里必有一句:“断言必须覆盖关键业务字段,判断数值变化是否符合预期”。具体到用例里,像创建一个订单后断言返回的orderId存在、再查一次订单状态确认是“待支付”、库存扣减后调用库存查询接口比对数量。这种深断言才是自动化测试的真正防线。
4.3 坑三:生成长文掩盖信息缺失
AI写的测试计划经常是洋洋洒洒上千字,看着详尽,实际上缺少关键前提。比如它会写“集成测试阶段预计3人天”,但到底测什么接口、准备什么数据、哪个环境测,全没写。这种计划好看不好用。
我的对策是,在输出层加一个“补充说明”区域,并要求“遇到缺失信息时,在补充说明里列出你做了哪些假设,不要替我做默认决定”。这个技巧很管用,AI会在计划末尾列出它自己假设的接口数量、环境配置等,你一眼就能看出哪些地方需要补需求。
4.4 坑四:把边界外的任务硬塞给AI
有一类任务现阶段不适合用通用大模型处理:涉及图像复杂识别的UI断言、需要访问内网数据库的测试数据预埋、需要精确时序断言的性能测试。不是说AI完全不行,是成本收益不合算。通用模型擅长语言归纳和代码生成,不等于它是全能自动化工具。
项目里任何涉及生产数据、公司机密信息的场景,我都不建议把原始数据贴进AI工具里。可以用脱敏样例、伪数据或结构化摘要代替,在保证AI输出质量的同时守住信息安全底线。
5. 把Prompt模板沉淀成团队资产
最后说点管理层面的。个人用Prompt是自嗨,团队用Prompt才是提效。我在自己部门推了一套简单的模板管理制度,效果不错。
5.1 建立模板库和版本管理
把上面这些模板按场景建一个公开文档库,存放在团队Wiki或代码仓库里,用目录划分:测试计划、用例生成、数据构造、自动化脚本、缺陷分析。每个模板文件命名带上版本号,比如“test_case_generator_v2.3.md”。为什么要版本管理?因为Prompt模板是会演化的,今天加了历史缺陷上下文后用例质量提高了,你就得把这一版更新换掉旧的,否则团队成员用的还是老版本。
5.2 模板变量与使用说明
模板里用[变量名]标注需要填写的位置,旁边写一行使用说明:“发布需求时,贴PRD链接和核心业务规则”“接口变更时,同步更新字段枚举”。这一步的投入很小,但能大幅降低团队里其他人上手使用的门槛。
5.3 用评审保证模板质量
每隔两周,我会组织一次简单的模板评审:把最近生成效果最好的用例往回追溯,找出它用的Prompt版本,反过来优化原模板。这是个正循环,模板越用越精准,团队成员越写越顺手——大家会发现,与其临时手搓一段提示词,不如直接拿团队模板改改变量,质量稳定得多,踩坑还少。
提示:模板管理不要过度工程化。我见过有些团队搞了复杂的Prompt管理系统、标签体系、权重打分,最后没人用。轻量、直接、能复制粘贴,才是模板能活下去的根本。
在实际使用中,我还发现一个能立竿见影的细节:对同一个功能模块,把历史测试报告里“遗漏缺陷”那几个场景单独整理成一段,放进每个相关模板的上下文中。比如我们订单模块历史漏测最多的是“退款后再取消订单时状态流转异常”,这段文字进了模板之后,AI生成的新用例总是会带上这个场景,相当于把团队踩过的坑,固化成了模型每一次输出都默认会覆盖的雷区。这套玩法,才是AI赋能的真实意义。