
做测试的人大概都有这种体验用例文档写了几百条版本一迭代改前置条件改到手软要是换了操作路径甚至得整条重写。最近我一直琢磨一件事AI确实能帮我们生成测试用例但如果生成出来的是“一次性用品”那价值就大打折扣了。真正值得花力气去做的是让AI生成的测试用例具备可复用性——也就是一个用例通过参数和场景的组合能在多个业务场景里跑。这篇文章没有高深理论就是我自己的实践复盘怎么把AI生成的用例拆开、改造、沉淀让它从只能测一条路径变成能覆盖一片业务。1. 为什么我死活想把AI生成的测试用例做成“可复用”的1.1 测试用例真正的成本不是写出来是养起来先说个数据不一定准但很说明问题。我们团队在引入AI生成测试用例之前手工维护的功能测试用例大概有六七百条。每次迭代真正新增的用例可能只有三五十条但要改的旧用例经常超过一百条。业务方一句话字段名从oldName改成newName接口层透传字段变了前端页面的label也跟着变用例里的步骤、断言、测试数据全得跟着动。那段时间最消耗团队精力的不是写新用例而是改旧用例、清失效用例、补被遗漏的关联场景。后来我开始让AI辅助生成测试用例效率确实上来了。原来一天写二十条用例已经算快现在给AI一段需求描述它几分钟就能吐出几十条。可问题也跟着来了AI生成的用例普遍写得太“具体”——具体到用户名写死“zhangsan”URL写死某个测试环境地址断言写死某个按钮的文案。这些用例第一次跑能过第二次换个环境、换个角色就废了。团队里一度出现一种错觉用例数量上去了覆盖率看起来很高但一跑回归能用上的没几条。大部分时间都花在“翻译”AI生成的用例上改数据、改选择器、改预期结果比我自己从头写还累。所以我在内部复盘时反复强调一个观点测试用例的资产价值不在于“写出来”的那一刻而在于后面每一次版本迭代时它还能不能被快速改造、复用、扩展。如果一条用例只能服务一个场景、一种环境、一组固定数据那它就不是高质量资产只是待维护的负债。这也就是我盯上“可复用性”的直接原因。1.2 复用不是复制粘贴而是“一个用例多个场景”先给“可复用”下一个务实的定义不是把用例文件复制一份改个名字而是让同一条用例逻辑通过参数、数据、配置的切换覆盖多个业务场景。换句话说步骤和断言保持稳定变化的东西全部抽到外面去。举个最常见的登录场景。很多团队习惯按端来写用例Web登录用例一条App登录用例一条小程序登录用例又一条密码错误写一条账号锁定写一条短信验证码失效再写一条。结果就是同一套“输入账号密码点击登录”的流程被复制了七八遍每遍只有数据和元素定位不同。这种用例看着多实际维护成本是成倍增长的——一旦登录按钮的交互从“点击”变成“点击后弹窗确认”这七八条用例全得改。如果做成可复用结构只需要一条“登录校验”用例模板把“端类型”作为参数值为web、app、miniApp把“账号状态”作为数据参数值为正常、锁定、密码过期、验证码错误把“登录方式”作为步骤分支值为密码、短信验证码、生物识别。这样一条模板套上不同的参数组合就能派生出几十条有效用例。这里面的关键不是“让AI多写几条”而是“让AI按参数化结构写”让数据和逻辑分离。再说“场景”这个词。业务上说的场景可能是用户操作路径可能是业务规则分支也可能是环境组合。一个用例要覆盖多个场景本质是把“场景差异”转化成“变量差异”。AI生成用例时能不能做到这一点取决于我们有没有把场景拆成变量的思路。这套思路其实是老测试人熟悉的参数化、数据驱动只不过现在需要把它前置到Prompt设计里让AI在生成那一刻就把可复用性考虑进去。2. 拆开看AI生成的用例里到底哪些部分可以复用2.1 把用例拆成数据、步骤、断言、环境四层我自己在改造AI生成用例时习惯先把一条用例拆成四层数据层、步骤层、断言层、环境层。拆开之后哪些该固定、哪些该参数化就一目了然。分层包含内容易变程度复用方式数据层输入数据、账号、订单状态、初始化条件高参数化、外部数据源读取步骤层点击操作、请求顺序、页面跳转路径中用例模板复用占位符替换断言层预期结果、校验点、状态码、页面元素断言中断言表达式与数据绑定环境层环境地址、数据库配置、账号体系、权限配置高环境变量、配置文件数据层和环境层是最容易变化的如果把它们写死在步骤里复用基本没戏。步骤层相对稳定但不同端之间也有差异比如Web端是点击一个“登录”按钮App端可能是点击Tab栏的“我的”再进入登录页。所以步骤层适合做成带条件分支的模板而不是一行行死代码。断言层要注意的是不要断言那些和场景强绑定的细节比如某个页面上的时间戳、某个环境特有的提示语。我常用一个生活化的类比来解释这四层一条可复用的测试用例就像家里常备的一道菜谱。数据层是食材步骤层是操作流程断言层是“尝起来应该咸鲜、肉要熟透”的标准环境层是煤气灶还是电磁炉。食材可以换灶具可以换但操作流程和判断标准可以复用。如果菜谱里写死“用家里的苏泊尔炒锅中火烧三分钟”换口锅就没法做了那复用性就断了。2.2 参数化一个用例跑多个场景的“命门”参数化这个概念做接口测试的同学一定不陌生。但AI生成用例时很多工具默认不会主动做参数化它更倾向于按需求文档“照实写”。比如你让它设计一个订单查询用例它会写打开订单列表页输入订单号888888点击查询断言显示订单状态为“已发货”。这里面“888888”“已发货”全是死值换个数据就废了。真正可复用的写法是输入“订单号”参数取值包括存在的订单、不存在的订单、格式非法的订单断言“订单状态”参数取值包括待支付、已支付、已取消、已发货。操作步骤保持一致只是参数不同。这一个用例就能覆盖正常查询、异常查询、边界查询、权限校验等多个场景。我在实际操作中会给AI补充一个要求“将所有输入数据和关键预期结果提取为参数变量不要直接写在操作步骤里。”这一个Prompt要求对最终用例可复用性的提升立竿见影。AI生成的用例会变成前置条件存在订单号${orderId}当前用户${userType}操作步骤调用“查询订单”接口传入订单号${orderId}预期结果接口返回状态码${expectedCode}订单状态为${expectedStatus}数据组合orderId已发货订单userType普通用户expectedStatus已发货orderId不存在订单userType普通用户expectedCode404参数看起来简单但它是连接“一个用例”和“多个场景”的桥梁。没有参数化场景靠人工复制有了参数化场景靠数据组合。AI在这个过程中最大的价值是能根据需求文档自动识别哪些字段是变量、哪些值之间有业务约束减少我们手工整理参数表的时间。但“识别变量”这个动作依然需要在Prompt里反复强调。2.3 AI生成时的场景理解决定了复用的天花板我见过很多人抱怨AI生成的测试用例质量差其实一半原因是“喂给AI”的东西不够。AI没有业务上下文的时候只能根据常识生成通用场景自然很难覆盖到你们系统的特殊规则。想让AI生成出来的用例具备可复用性第一步是让它真正理解业务场景而不是让它凭感觉写。我的做法是在让AI生成用例之前先整理一份“场景素材包”包括需求描述、业务规则表、接口定义、历史缺陷、相关用户角色。然后像和新人沟通一样把这些素材丢给AI并明确告诉它“请基于这些规则设计测试用例先列出你识别到的业务场景清单再针对每个场景输出用例。”这一步相当于做了“场景理解”的预训练AI给出的用例会明显更贴合实际。这里特别想说一下“场景理解”和“用例数量”的关系。很多AI生成的用例平台都在强调能生成多少条、覆盖率多高。但真正影响可复用性的不是数量而是AI有没有把场景拆成可组合的单元。比如一个电商订单模块它能不能识别出“用户身份、订单状态、支付方式、售后阶段”这些维度能不能理解“已取消的订单不能再申请退款”这类规则约束这些维度抓得准生成出来的用例才能跨场景复用抓不准生成再多都是零散的碎片。3. 实操手册把AI生成的第一版用例改造成可复用资产3.1 让AI按“数据-步骤-断言”结构生成而不是讲一段故事有很长一段时间我让AI生成用例的方式是直接说“帮我设计登录功能的测试用例”。AI返回的内容看着很全但一般是大段文字前置条件和预期结果混在一起测试数据藏在步骤里根本没法直接进用例管理系统。后来我把输出格式要求写在Prompt里效果完全不一样。这是我目前常用的Prompt模板你可以直接抄请设计一个“订单列表查询”的测试用例要求 1. 按“前置条件 / 测试数据 / 操作步骤 / 预期结果”四段输出 2. 将账号、订单状态、分页大小、排序方式提取为参数变量 3. 至少覆盖正常查询、空数据、非法分页、无权限四个业务场景 4. 每个预期结果只写校验点不绑定具体环境地址。注意第2条和第4条这是可复用性的关键。如果不做第2条AI会把“张三”“已支付”“10条每页”这些值写死在步骤里如果不做第4条AI很可能会在预期结果里写“接口返回https://test.example.com/order/list”这种环境相关地址。加了这两条输出结构就干净很多直接变成一套可参数化执行的用例模板。当然AI第一次生成的结果还是需要人工过一遍。我会重点检查变量命名是否语义化、断言是否聚焦关键业务结果、步骤里有没有遗漏前置动作。这个检查过程并不慢因为结构清晰扫一眼就能发现问题。比起从零改效率已经高太多了。3.2 从单个场景到场景矩阵变量表与组合策略改造完单条用例的参数结构接下来要做的是“从一条用例扩展成多个场景”。很多人的第一反应是把所有参数组合都列出来比如三个变量各有五个取值那就生成5×5×5125条用例。这通常是没必要的执行起来也受不了。更高效的方式是先列变量表再用组合策略控制用例规模。举个例子假设我们要测一个订单查询场景变量表如下变量取值用户类型普通用户、VIP、管理员订单状态待支付、已支付、已取消查询方式按订单号、按时间区间、按状态筛选访问端Web、App、小程序如果全组合是3×3×3×381条用例。对于回归测试来说这数量偏多。实际我一般会采用成对组合Pairwise的策略保证任意两个变量之间的取值都能被覆盖到但总用例数可以压缩到十几条。AI在这里可以帮忙生成组合结果也可以人工用Pairwise工具跑一下不过原理都是一样的优先覆盖变量之间的交互影响而不是追求所有组合。这个“场景矩阵”的过程真正实现了“一个用例多个场景”步骤层只有一套“查询订单”的模板数据层通过参数组合产生各种场景然后每条组合出来的记录都能映射成一条可执行测试用例。组合数量控制得越合理用例资产就越健康。3.3 环境解耦同一个用例在测试、预发、生产都能跑可复用性的另一个大家容易忽略的维度是环境。很多AI生成的用例天然带着“测试环境限定”的毛病尤其是一些工具在生成时会把当前访问的URL、当前登录账号直接嵌入进去。比如“登录https://test.example.com使用admin/admin123”。这条用例到了预发环境基本不能用。环境解耦的核心思路是把所有环境相关内容放在配置层而不是用例层。我习惯在用例模板里写“使用${BASE_URL}作为基础地址”“使用账号${ADMIN_ACCOUNT}”然后把具体的环境变量放在执行环境里。接口自动化可以用环境变量或配置文件UI自动化可以通过全局参数注入。这是一段典型的配置示例base_url: ${BASE_URL} default_account: ${DEFAULT_ACCOUNT} default_password: ${DEFAULT_PASSWORD}这样同一个测试用例在测试环境、预发环境、生产环境都能跑。断言里也不要写死环境相关的数据比如“页面显示XXX系统V2.3”这个版本号换环境可能就变了。断言应该关注业务结果而不是环境特征。这个改造看似简单却是让用例从“能用一次”变成“长期资产”的关键一步。4. 我在项目里踩过的几个坑以及怎么爬出来的4.1 AI会一本正经地编造不存在的按钮和接口AI生成测试用例最大的问题是“幻觉”。有一次我让AI设计一个用户中心的功能用例它一本正经地写了一句“点击页面右上角的‘安全中心’按钮”。结果产品经理一看页面压根没有这个按钮只有“账号设置”下面的二级入口。如果直接照这个用例去执行第一步就废了。这种幻觉之所以常见是因为AI在训练时见得太多了会自动脑补一套“通用页面结构”但它并不知道你们系统的真实交互。应对办法有两个一是给AI提供足够具体的信息来源比如把原型图说明、接口文档、页面元素清单都丢给它二是明确要求“步骤中出现的操作对象必须来自我提供的素材列表不要自己补充”。即便这样AI仍然可能犯错所以人工评审不能省。我一般会在评审时特别关注“操作对象是否存在”“接口路径是否真实”“前置条件是否可满足”这三个点。4.2 过度抽象最后变成“什么都测不了”的废用例踩过另一个坑是反方向的为了追求复用把用例抽象到了极致。团队里的同事设计了一条“通用数据增删改查”用例把所有操作都参数化一个用例里同时包含新增、查询、修改、删除四段步骤试图覆盖所有业务模块。这条用例在理论上很完美真跑起来才发现甲模块的“新增”和乙模块的“新增”步骤差异很大失败之后定位问题也要花很长时间。后来我们定了个原则一条用例只保留一个核心业务意图其他动作都是为了辅助这个意图。比如测试“新增订单”的用例步骤里可以有“前置数据的查询”作为准备但不要把“查询订单”和“删除订单”混进同一条用例。可复用性靠的是“模块化拼接”不是“万能大杂烩”。把步骤拆成小片段、每个片段专注一件事反而更容易在多个场景间复用。4.3 复用率涨了缺陷检出率反而跌了还有一个很反直觉的现象当我们把用例复用率提上去之后缺陷检出率反而下降了。复盘之后发现问题出在“过度复用”上。大家都用同一套参数化模板去覆盖场景结果很多用例只是在重复跑同一条业务路径只是数据不同并没有覆盖到那些真正复杂的交互和边界。比如“订单支付”这个流程复用率很高每个渠道都用同一套“提交订单-支付-断言成功”的用例。但新版本上线时真正出问题的其实是“支付回调延迟”和“重复支付通知”这两个异常场景这些我们用例压根没覆盖到。所以后来我给自己定了一个不成文的规定复用率不是越高越好要留出20%到30%的用例专门用于新场景挖掘和探索性测试。同时每个月对高复用用例做一次“异化评审”看看它们是不是已经变成了“路径重复但数据不同”的假覆盖。5. 在团队里落地这套做法的几个关键动作5.1 先从登录、权限这些稳定模块开刀如果你也想在团队里推行“AI生成可复用测试用例”我最大的建议是别一上来就全流程改造先挑一个高频、稳定、场景清晰的模块试点。我们选的是登录和权限模块原因很简单业务规则稳固多端场景多数据维度清晰而且几乎每个迭代都会碰它。试点时我们先让AI按模板生成一套登录用例然后人工把变量表、断言点、环境配置梳理清楚沉淀成标准用例模板。接下来几次迭代凡是涉及登录、权限调整的需求都要求先复用这套模板再针对增量场景补充新用例。两周之后两个模块的用例维护成本肉眼可见地降下来了团队里其他同学也开始认可这套做法。这时候再往订单、支付这些更复杂的模块铺开阻力就小很多。5.2 用例模板库和评审链一个都不能少落地过程中我意识到光有思路不够还得有机制。我们建了一个很简单的用例模板库里面保存的是“不带具体业务数据”的高质量用例模板每条模板都会标注适用模块、核心变量、断言关注点、已知注意事项。AI生成的新用例会优先和模板库比对能复用的直接用不能复用的再新增。评审链也很重要。我规定AI生成的用例不能直接进执行列表必须经过一轮“用例负责人评审”重点检查三点步骤可执行性、断言是否有效、参数化是否完整。评审通过之后才登记入库。别小看这个流程它看起来多了一步实际上省掉了后面执行、维护的大量返工。5.3 用复用率和缺陷检出率两个指标共同考核团队里一旦强调“可复用性”很容易出现一个极端大家拼命提高复用率把用例改得越来越“通用”但实际测试效果越来越差。所以我一直坚持用两个指标一起看而不是只盯一个。指标计算口径关注点用例复用率被两个及以上场景引用的用例数量 / 用例总数资产利用是否充分缺陷检出率某用例累计发现缺陷数 / 执行次数用例是否真的有效场景覆盖率已覆盖业务规则数 / 总业务规则数测试范围是否完整每个月复盘时如果复用率涨了但缺陷检出率降了我会先怀疑是不是“假复用”太多。指标是工具不是目的。真正的目标是让同样多的用例覆盖更广的真实场景并且能在版本迭代中快速调整、继续生效。6. 往后想从“用例复用”再进一步就是“场景复用”6.1 场景资产库把高价值场景沉淀下来做到这一步我们已经在解决“一个用例多个场景”的问题。但做久了我发现还有一层价值可以继续挖与其只复用一个用例不如把那些高频、稳定、有代表性的“场景切片”沉淀成一个场景资产库。什么叫场景切片比如“登录态失效后发起支付系统应跳转登录页并在登录后返回支付页”这是一个场景切片“管理员关闭用户权限后该用户再次登录应被提示无权限”也是一个场景切片。这些切片本身和具体用例解耦可以被不同的用例组合引用。当新需求出现时先看看场景资产库里有没有能拼起来的切片直接把AI生成用例的起点抬高了一层。我们在搭建这个库的时候用的工具很简单就是一个带标签的文档库先跑起来再说。6.2 让AI Agent把场景切片拼成新用例最近我在尝试让AI Agent基于场景资产库生成新的测试用例思路是把历史沉淀的场景切片作为上下文喂给AI Agent然后给它一个用户反馈或新增需求让它用现成的切片组合出候选用例。比如用户反馈“换绑手机号之后老手机号还能不能登录”AI Agent会从资产库里调出“用户登录”“手机号绑定”“短信验证码校验”“会话失效处理”这几个切片拼出正常场景和逆向场景的用例。这条路径现在还谈不上成熟但方向我很认可AI生成测试用例的未来不是每次从零“创作”而是基于可复用的场景资产做“组合创新”。这需要我们先把基础资产打磨好把参数化、环境解耦、场景理解这些工作做到位。我自己最近的一个习惯是每次让AI生成用例之前先问一句“这里面哪些变量是以后会变的”然后把答案写进用例描述里。这个过程看起来慢省掉的却是后面改脚本、改文档的夜。如果你也在做AI生成测试用例这件事我建议你先别追求数量挑一个高频模块把“一个用例、多个场景”跑通一次后面自然就顺了。