ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

测试用例设计全指南:从等价类划分到AI辅助生成,彻底讲透怎么写测试用例

测试用例设计全指南:从等价类划分到AI辅助生成,彻底讲透怎么写测试用例 把测试用例这事掰开揉碎讲一遍从思维方法到落地模板再到AI辅助的新玩法一次性给你讲透。如果你正在为“用例怎么写”发愁或者写出来的用例总被开发怼“这需求根本不合理”这篇文章就是给你准备的。1. 先把测试用例这件事想明白它到底解决什么问题1.1 测试用例在研发流程里的真实地位很多刚入行的测试同学容易陷入一个误区觉得测试用例就是“照着需求文档点一遍按钮然后把结果填进表格”。如果只是这个层面的认知那写出来的东西充其量算操作记录不能叫测试用例。测试用例在整个研发流程里承担的角色我习惯把它分成三层来说。第一层是沟通载体。开发说你提的bug复现不了测试用例就是你的“不在场证明”——前置条件、操作步骤、测试数据全部写清楚开发照着走一遍就能复现。产品经理说这个功能就是按需求做的测试用例就是你的“需求落地对照表”每一步操作都对应着一条需求条款谁对谁错一目了然。第二层是执行依据。一个功能点怎么测、测哪些维度、覆盖到什么程度算测完这些都需要在设计用例时提前想好。没有用例的测试是“随缘测试”想到哪测到哪漏测了都不知道漏在哪。第三层是回归基线。版本迭代最怕的就是改一处挂一片测试用例就是那根“锚”。这轮改动影响哪些模块把对应的用例捞出来跑一遍心里就有底了。三层角色立住你再看“怎么写测试用例”这个问题思路就完全不一样了——你不是在填表格你是在做质量设计。1.2 一条好的测试用例长什么样我面试测试工程师时喜欢让人现场写一条“登录功能”的用例。大部分人都会写“输入正确账号密码点击登录进入首页”。这条用例对吗对但没有用。为什么没用因为它缺少测试用例最核心的几个要素可执行性、可判定性、可追溯性。可执行性说的是前置条件和操作步骤要具体到别人拿着就能照做。比如“输入正确账号密码”里的“正确账号密码”是多少位的、有没有特殊字符、需不需要验证码这些不写清楚换个人执行结果可能就完全不同。可判定性说的是预期结果要明确到能自动判定通过还是失败。“进入首页”太笼统了应该是“登录成功后页面跳转到首页右上角显示当前登录用户名首页加载出用户专属的推荐位数据”这样执行人一看就知道合不合格。可追溯性说的是用例要能对应到具体需求。需求变更时你能顺着用例编号找到受影响的范围。这条登录用例如果是从“用户登录功能”这个需求拆出来的用例编号里就应该带上需求的标识。所以一条合格的测试用例至少得包含这些字段用例编号、所属模块、用例标题、前置条件、测试数据、操作步骤、预期结果、优先级、执行结果。其中操作步骤和预期结果必须一一对应几步操作就配几条预期不能前面写了五步操作后面只有两条预期结果那中间三步悬空了出了问题你根本定位不到是哪一步导致的。2. 测试用例设计的核心方法这些方法怎么组合用2.1 等价类划分法与边界值分析法最基础也最实用的组合测试用例设计方法教科书上讲了很多种但实际工作中用得最多的就是等价类划分法和边界值分析法而且这两个方法通常配合使用。等价类划分法的核心逻辑是把无限的输入数据划分成有限的几类从每一类里取一个代表值来测试。它的理论依据是同一类里的数据程序的处理逻辑是一样的测一个相当于测所有。生活化一点理解假设你是地铁安检员乘客按身高买票1.3米以下免票1.3米到1.5米半票1.5米以上全票。你不可能让每个乘客都量一遍身高你只需要测几个有代表性的身高段比如1.2米免票段、1.4米半票段、1.6米全票段就能验证整个票务逻辑。这就是等价类划分。边界值分析法则是对等价类划分的补充专门盯着每个类的边界值测。大量bug都出在边界上比如需求写“1.3米以下免票”程序员代码里写的可能是“height 1.3”也可能是“height 1.3”差一个等号1.3米整的孩子就要买半票了。把两个方法结合起来一个输入框的测试用例设计就非常清晰了。以登录密码框为例需求写的是“密码长度为6-20位支持字母、数字和常见特殊字符”那我们可以这样拆有效等价类6位密码、20位密码、6-20位之间的密码、包含字母数字特殊字符的密码无效等价类5位密码、21位密码、空密码、只包含中文字符的密码边界值6位边界5位/6位/7位、20位边界19位/20位/21位、空值把这些case组合起来覆盖度就非常高了。这里有个实操心得边界值测试别只测边界本身要连边界内外各取一个值一起测。比如6位是下边界那5位、6位、7位都要测这样才能确认程序在边界处到底划在哪边。2.2 场景法、判定表与正交试验法应对复杂业务逻辑的利器等价类和边界值擅长处理单个输入项但真实业务场景很少是单个输入项的。用户下单要同时满足登录状态、商品库存、优惠券条件、支付方式等多个条件这时就要用到场景法和判定表。场景法从用户实际操作的业务流程出发把整个功能串起来测。以电商下单为例基本流是“登录→选商品→加入购物车→结算→支付→生成订单”备选流包括“登录时密码错误重试→选商品时库存不足→结算时优惠券不可用→支付时余额不足”等。设计用例时基本流必须覆盖备选流挑选关键路径覆盖这样才能把业务流程中的分支逻辑测透。判定表法适合条件多、条件之间存在组合逻辑的场景。比如优惠券系统的规则用户是VIP且有优惠券、用户是VIP但无优惠券、用户非VIP且有优惠券、用户非VIP且无优惠券四种组合对应的结果各不相同。把条件列成表动作列成表条件组合和动作的对应关系一目了然用例设计也不会漏。正交试验法用于条件组合爆炸的场景。假设一个查询功能有5个查询条件每个条件有4个取值全组合要测4的5次方等于1024种情况根本测不完。正交试验法从全组合里挑出覆盖最均匀的一小部分组合来测能用最少的用例覆盖最大的组合空间。这里我要特别强调一个观点方法永远是组合使用的别指望一种方法打天下。实际设计用例时我通常先画业务流程用场景法把主路径和分支路径梳理出来针对路径上的每个功能点用等价类和边界值设计输入测试如果遇到条件组合多的功能再用判定表或正交试验法补充。这个组合拳打下来覆盖度基本就到位了。3. 从需求到用例一条可落地的完整流程3.1 需求分析阶段用例设计的地基很多人写用例漏测根子不在设计阶段而在需求分析阶段就没吃透需求。我见过太多测试同学拿到需求文档扫一眼就开始写用例写到一半发现某个功能逻辑有歧义又跑回去问产品。这样既浪费时间写出来的用例质量也堪忧。需求分析阶段要搞清楚四件事这个功能解决什么问题、用户怎么操作、有哪些前置条件和约束、异常情况怎么处理。“这个功能解决什么问题”决定了你的测试重点。比如一个搜索功能如果核心目标是“帮用户快速找到想要的商品”那搜索结果的排序逻辑、相关性就是测试重点如果核心目标是“防止用户搜到违规商品”那过滤逻辑就是测试重点。同一个功能业务目标不同测试重心完全不同。“用户怎么操作”决定了用例的操作步骤设计。一个功能可能有多种操作入口PC端、移动端、H5页面操作路径都不一样需求分析阶段就要把这些入口梳理清楚。“有哪些前置条件和约束”决定了用例的前置条件和测试数据。比如支付功能要求用户已实名认证、余额充足这些前置条件不满足时功能应该给出什么提示都需要设计用例。“异常情况怎么处理”是最容易被忽视的。网络超时、服务器异常、数据校验不通过、并发冲突这些异常路径虽然不常走但一旦出问题影响往往是致命的。需求文档如果不明确要主动找产品和技术确认把这些异常场景补全。这个阶段我还会做一件事把需求文档里的每个功能点拆成“功能清单”一条条列出来后面设计用例时逐个对照确保没有遗漏。这张清单也是用例评审时的重要依据。3.2 用例设计阶段从功能清单到测试点需求梳理清楚了下一步就是把功能清单转化成测试点。这一步的核心工作是“拆解”。一个功能点通常能拆出好几个测试点。以“用户注册”功能为例功能清单里可能只有“用户注册”这一条但拆解后测试点包括注册入口从PC端、移动端、H5页面分别进入注册页字段校验用户名格式、密码强度、手机号格式、验证码有效性业务规则用户名是否唯一、手机号是否已注册、邀请码是否正确交互逻辑注册成功后跳转哪里、注册失败提示什么异常场景网络中断、服务器超时、重复提交、验证码过期兼容性不同浏览器、不同操作系统把每个功能点都这样拆解完你的测试点清单基本覆盖了正常流程、异常流程和边界情况。这时再写用例思路清晰很多。拆解测试点时要注意优先级划分。我会用P0/P1/P2/P3四级来标注P0是核心功能的主流程一旦挂了直接阻断用户使用P1是重要功能的分支流程出问题影响体验但能绕过P2是次要功能或异常场景P3是边缘情况。执行用例时先跑P0和P1时间不够时P2/P3可以降级处理这样测试资源的投入产出比最高。3.3 用例编写与评审把测试点变成可执行的用例测试点还是概括性的描述要变成能直接执行的用例还需要一步“具象化”。我拿“商城登录功能”来举例展示一个用例从测试点到完整用例的转化过程。测试点是“登录成功验证”转化成用例就是下面这样用例编号TC-LOGIN-001 所属模块用户中心-登录 用例标题验证正确账号密码登录成功 前置条件 1. 系统已部署且登录服务正常 2. 已有注册账号test_user / Test123456 测试数据 账号test_user 密码Test123456 操作步骤 1. 打开商城首页点击右上角“登录”按钮进入登录页 2. 输入账号 test_user 3. 输入密码 Test123456 4. 点击“立即登录”按钮 预期结果 1. 登录成功跳转至首页 2. 首页右上角显示“test_user”用户名 3. 首页个性化推荐区域加载出当前用户的历史浏览相关商品 优先级P0这条用例就严格满足了可执行、可判定、可追溯的标准。你把它发给任何一个人哪怕是实习生照着操作就能执行结果合格不合格一眼就能判断。用例编号的命名也要讲究。我见过一种混乱的项目用例编号取名叫“用例1”“用例2”后面需求一变更根本无法追溯。合理的命名应该包含模块标识和行为描述比如“TC-LOGIN-001”表示登录模块的第一条用例“TC-ORDER-PAY-003”表示订单支付模块的第三条用例。这样需求变更时通过编号就能快速定位受影响的用例范围。用例编写完成后必须经过评审才能进入执行阶段。评审时重点看三块覆盖度是否完整对照需求的功能清单和测试点清单逐个确认、预期结果是否明确所有预期结果都能判定通过/失败、用例之间是否有冗余同一个场景被多条用例重复覆盖时保留一条即可。评审会上测试、开发、产品三方都要在场开发能指出测试用例中不符合技术实现逻辑的地方产品能确认用例与需求的一致性。4. 接口测试用例设计与功能用例不同的玩法4.1 接口用例的核心关注点功能测试用例关注的是用户视角的操作流程接口测试用例关注的是数据交互的正确性。同样是登录功能功能用例关注“输入账号密码点击登录能不能进首页”接口用例关注“登录接口传参正确时返回什么、传参错误时返回什么、token有效期多长、并发登录怎么处理”。设计接口测试用例时我习惯从五个维度入手。第一个维度是参数验证。接口的每个入参都要测必填项为空、参数类型错误、参数长度超限、枚举值越界。比如登录接口的username参数要测不传、传空字符串、传超过最大长度的字符串、传不存在的数据类型这些情况接口是返回参数错误提示还是直接500。第二个维度是业务逻辑验证。接口不是单纯的参数校验背后还有业务逻辑。比如下单接口库存不足时要返回明确错误码优惠券接口优惠券已过期时要返回对应的提示。这些逻辑在功能测试里可能通过页面交互就能发现接口测试里要关注返回的错误码和提示信息是否准确。第三个维度是异常场景验证。接口在网络超时、服务端异常、数据库异常时的表现是接口测试的重点。很多系统在功能测试时一切正常一上线就出问题往往是因为异常场景没有接口层面的保障。第四个维度是安全性验证。涉及用户数据的接口要关注越权访问、SQL注入、敏感信息泄露等问题。电商系统里查询订单详情的接口如果只校验了接口参数没有校验当前用户是否为订单归属人那就有越权风险。第五个维度是性能验证。核心接口的响应时间、吞吐量、并发能力虽然通常由性能测试专项负责但接口测试阶段也要做基础摸底及早发现明显的性能瓶颈。4.2 一个接口用例的实例拆解以商城系统的“查询商品详情”接口为例展示完整的接口测试用例设计。接口基本信息GET /product/detail参数为productId商品ID和userId用户ID可选返回商品名称、价格、库存、详情描述等信息。接口用例拆解如下用例编号TC-PRODUCT-DETAIL-001 用例标题验证传入正确productId时返回商品详细信息 前置条件 1. 商城接口服务正常 2. 存在商品ID为10001的已上架商品库存为50 请求参数 productId10001 userId不传 预期结果 1. HTTP状态码为200 2. 响应结果code0表示业务成功 3. 响应数据中包含商品名称为“测试商品A” 4. 响应数据中价格为“199.00” 5. 响应数据中库存为“50”这只是正常路径的用例异常路径的用例需要单独设计productId为空、productId不存在的商品、productId为负数、productId为字符串类型、userId传一个不存在的用户、接口超时、签名错误等。一个“查询商品详情”的功能接口用例设计出来通常是20到30条覆盖所有维度的正常和异常场景。接口用例的预期结果要写具体。不能说“返回正常”要说清楚HTTP状态码是多少、业务code是多少、关键字段的值是什么。这样后续做接口自动化测试时断言逻辑直接就写在用例里了。这里补充一点接口测试用例和功能测试用例不是割裂的。功能测试发现了bug你要能定位到是哪个接口的问题接口测试发现了隐患你也要能判断这个隐患对用户操作会产生什么影响。把两层用例对应起来看质量保障体系才完整。5. AI辅助生成测试用例现在能做到什么程度5.1 AI生成测试用例的实际能力边界AI辅助生成测试用例是现在测试圈讨论最多的话题之一。我的态度是AI已经能承担一部分用例生成的工作但距离全自动还有很长的路要走。先说说AI能做到什么程度。我用过几个主流AI工具来生成测试用例把需求文档或PRD喂给它它能输出覆盖正常流程、异常流程、边界情况的用例草稿用例要素基本齐全标题、前置条件、操作步骤、预期结果都有。但这里有个关键问题AI生成的用例是基于“它见过的通用模式”来推理的它不了解你的业务规则、你的用户习惯、你的历史线上问题。比如电商系统的优惠券叠加规则每个平台的规则都不一样AI生成的用例只能覆盖“通用逻辑”——优惠券存在时可以使用、过期时不可使用——但“满减券和折扣券是否可叠加”“平台券和店铺券的优先级”这类业务特有的规则AI生成不了需要人来补充。还有个更现实的问题AI生成的用例存在“幻觉”。“用户已登录状态下点击登录按钮跳转首页”这种用例AI很容易生成但实际上已登录状态下根本不该显示登录按钮。这种逻辑漏洞AI发现不了因为它不理解系统的真实状态流转。所以我的判断是AI是“用例草稿生成器”不是“用例设计器”。它能帮你快速搭建用例框架节省从空白文档到初稿的时间但用例的准确性、完整性和业务适配性还是需要人来把关。5.2 AI辅助生成用例的实操流程与坑我目前用得比较顺畅的AI辅助流程是这样把PRD或需求描述的关键信息模块名称、功能点、业务规则、已知约束整理成结构化描述喂给AI让AI基于这些信息生成用例初稿再人工进行裁剪和补充。比如描述登录功能时给AI的信息是这样的功能名称商城用户登录 功能入口首页右上角登录按钮、结算页登录引导 业务规则用户名支持手机号或邮箱密码6-20位含字母和数字连续错误5次锁定30分钟登录有效期为7天 约束条件未登录用户可浏览商品但不可下单AI拿到这些信息生成的用例质量会有明显提升因为它有了“推理的边界条件”。这里有个小技巧给AI的信息越结构化输出越可用。不要直接丢一整篇PRD让它自己理解你花5分钟梳理关键信息省下来的是几十分钟的用例修改时间。AI生成用例后人工审视要重点看几类问题。一是“无效用例”就是那些逻辑上不成立、业务上不会发生的场景直接删掉。二是“漏测场景”把AI生成的结果和你的测试点清单对照缺什么补什么。三是“预期结果离谱”AI有时会生成不切实际的预期比如“点击登录后3秒内必须完成跳转”这种没有依据的预期结果要修正。这里我再强调一个AI辅助的典型坑别让AI帮你做全覆盖的判断。AI不会告诉你“这个功能的这些用例已经覆盖完整了”它只是基于输入的信息生成输出。覆盖度是否完整永远需要人来判断。AI可以加速你的工作但不能替代你的思考。6. 常见问题与实战心得6.1 写用例时最容易踩的几个坑第一个坑是“用例大而全但深不进去”。刚入行时我写用例恨不得把每个按钮的每个操作路径都列出来结果用例写了几百条执行起来累死人真正能发现bug的没几条。后来我总结出一个原则用例数量不重要覆盖质量才重要。P0和P1的用例要写深写透P2/P3的用例精简到能覆盖风险即可。第二个坑是“前置条件和测试数据不写清楚”。很多用例直接在操作步骤里写“输入账号”但不写账号是什么、这个账号要满足什么条件。执行的人只能瞎猜猜错了结果就是误报。前置条件和测试数据是用例的一部分不是可选项。第三个坑是“用例不维护”。产品功能隔三差五改版用例还停留在三个月前执行起来全是失败最后变成了摆设。用例是需要持续更新的每次版本迭代后都要回头梳理存量用例过期的删掉变更的更新新增的功能补上。第四个坑是“用例评审走过场”。开发、产品、测试坐在一起产品刷刷刷翻完需求文档说“没问题”开发说“差不多”用例评审会开了等于没开。用例评审要逐条过重点在“这个需求的这个逻辑用例覆盖了吗”这个问题上深入探讨缺了的当场补。6.2 用例维护与持续优化的方法一个项目的用例会随着迭代越来越庞大两个月不梳理就会变成一坨没人敢动的代码。我的经验是用例维护要建立三个机制。第一个机制是版本管理。用例不是一次性文档要跟着版本走。每个版本迭代时把用例变更独立记录标注变更原因和关联需求编号。这样出问题时能回溯到历史版本排查是不是回归用例漏更新导致的。第二个机制是定期评审。每隔一两个迭代挑一个固定时间做存量用例梳理。我会把用例按模块分组让负责对应模块的测试同学自查一遍标记出已失效的、需要更新的、可以合并的再统一处理。这个过程就像给代码做重构虽然不能立刻产生价值但能防止用例资产持续腐化。第三个机制是数据驱动优化。每次功能测试执行完把用例执行结果导出来重点分析“用例执行通过但上线后仍然出bug”的场景这说明用例设计的覆盖逻辑存在盲区要复盘补充。反过来长期执行都为“通过”且从未发现过bug的用例也要定期评估看是否值得继续保留在回归用例集里。6.3 车载以太网这类特殊领域的用例设计说一个汽车行业的话题。近两年车载以太网相关的测试需求增长很快很多功能从传统CAN总线向以太网架构迁移。车载以太网测试用例的设计逻辑和普通的功能测试、接口测试有很大区别。它的特殊性在于第一车载环境对安全性要求极高用例必须覆盖网络安全、通信故障容错、极端环境温度、振动下的稳定性第二车载以太网涉及OSI模型的多层协议从物理层的传输速率、信号质量到传输层的TCP/UDP通信再到应用层的服务发现、诊断协议每一层都需要独立的用例设计第三车载通信的实时性要求用例要验证消息延迟、周期消息的超时处理等时间相关场景。我接触过一些做车载测试的同行他们最头疼的往往是“环境搭建”因为车载以太网的测试环境搭起来比普通软件测试复杂得多还需要配合硬件在环仿真。如果你做的是这个方向的测试我的建议是用例设计时要把环境因素考虑进去前置条件里写清楚当前是用实车环境、台架环境还是仿真环境因为同一个功能在不同环境下的表现可能完全不同。车载以太网只是特殊领域的一个例子我举这个例子是想说明不管是什么领域用例设计的基本逻辑是一样的但领域特定知识决定了用例的深度和广度。你只有真正理解了业务领域才能设计出有实际价值的测试用例而不是停留在“点按钮看结果”的表层。回过头来看“测试用例如何编写”这件事它其实是一个从思维到落地再到持续优化的系统工程。方法可以学习工具可以使用AI可以辅助但最核心的还是你对业务的理解、对风险的判断、对用户场景的共情能力。用例是测试人员的产品多花心思打磨它你的测试工作才真正做到位了。
返回列表