
之前带测试团队做项目时我经常面临一个很尴尬的情况同一个登录功能不同测试工程师写出来的用例质量差距非常大。有人写了八十条用例结果核心的“账号锁定”场景没覆盖到有人只写了二十条却能精准命中所有高风险路径。问题不在于写得多还是少而在于测试用例设计是否有一套系统的方法论支撑。很多刚入行的测试同学把测试用例简单地理解为“步骤 预期结果”写完就完事。但事实上一份专业的测试用例设计背后要回答几个核心问题业务需求是否被完整拆解异常路径是否被覆盖用例是否可以高效执行和维护不同优先级用例的比例是否合理这篇文章会围绕测试用例设计方法完整展开。无论你是刚入行的测试新人还是已经带项目的测试负责人都可以从中获得一套可落地的用例设计思路。1. 测试用例设计到底在解决什么问题1.1 什么是测试用例测试用例Test Case是指为了特定测试目标而设计的一组测试输入、执行条件、操作步骤和预期结果的集合。通俗地说测试用例就是一份“操作说明书”告诉执行者在什么环境下准备好什么数据执行什么操作最后应该看到什么结果。一个完整的测试用例通常包含用例编号所属模块用例标题优先级前置条件测试数据操作步骤预期结果实际结果执行时填写备注1.2 为什么需要系统的用例设计方法很多测试同学写用例时习惯“想到哪写到哪”这种方式存在几个典型问题覆盖不完整只测试正常路径异常路径大量遗漏。用例冗余很多用例其实是重复的只是数据不同。可执行性差步骤写得不够清晰开发或新人执行时看不懂。无法度量说不清楚当前版本的测试覆盖率是多少哪些需求点还没测。而系统的测试用例设计方法能帮你从“经验驱动”升级为“方法论驱动”。等价类划分、边界值分析、因果图、判定表、正交试验、场景法等经典方法本质上都是对“如何从需求和逻辑中系统性找出测试点”这一问题的回答。1.3 测试用例设计在研发流程中的位置测试用例设计通常发生在测试计划制定之后、测试执行之前。测试人员需要先充分理解需求文档、原型图、接口文档然后进行用例设计再组织用例评审最后才进入测试执行阶段。用例设计的好坏直接决定了测试执行阶段的质量上限。如果用例本身覆盖不全执行再认真也发现不了隐藏的缺陷。2. 测试用例的构成要素与规范写法2.1 核心要素拆解先看一个模板字段说明示例用例编号唯一标识建议按模块功能序号LOGIN_001所属模块功能归属用户登录用例标题一句话说明测试目标验证手机号密码正确登录成功优先级用例的重要程度P0 / P1 / P2 / P3前置条件执行前需要满足的环境/数据准备用户已注册账号未被锁定测试数据执行时使用的输入数据手机号13800138000密码Abc123操作步骤具体执行动作步骤要可执行1. 打开登录页2. 输入手机号3. 输入密码4. 点击登录预期结果步骤执行后的应验结果登录成功跳转到首页显示用户名实际结果执行后填写与预期一致备注补充说明、关联需求编号、关联缺陷需求编号 REQ-202403012.2 用例标题的写法用例标题不要写成“登录功能测试”这太宽泛无法指导执行。推荐写法是条件 操作 预期结果的浓缩。例如验证输入正确的手机号和密码点击登录后成功进入首页验证手机号为空时点击登录后提示“请输入手机号”验证密码连续输错5次后账号被锁定30分钟2.3 测试步骤的粒度控制测试步骤写得太粗执行者会重复问写得太细维护成本又过高。一个基本原则是步骤粒度以“普通测试工程师不需要再询问细节就能独立执行”为标准。举一个反例1. 打开登录页 2. 正常输入 3. 点击登录 4. 查看结果这里“正常输入”是什么手机号是多少密码是多少没人知道。应该写成1. 打开登录页 http://demo.example.com/login 2. 在手机号输入框输入 13800138000 3. 在密码输入框输入 Abc123 4. 在验证码输入框输入 1234 5. 点击【登录】按钮 6. 观察页面跳转和提示2.4 测试数据与前置条件的设计前置条件必须满足两个要求可复现、充分。以登录功能为例前置条件要写清楚测试环境地址是否已有测试账号账号的状态正常、锁定、未激活等是否需要清理历史缓存数据测试数据的设计要避免使用生产真实数据优先使用专用的测试数据。涉及用户隐私和敏感信息时必须脱敏处理。3. 核心测试用例设计方法详解这部分是全文的重点。下面逐一分析经典测试用例设计方法的使用场景、核心规则和常见误区。3.1 等价类划分法3.1.1 方法介绍等价类划分法的核心思想是把输入条件按照“是否对程序处理逻辑有相同影响”进行分组。同一等价类中的数据程序的处理方式和结果是等价的因此只需要从每个等价类中选取少量代表性数据进行测试。等价类分为两类有效等价类满足需求规格说明的输入数据。无效等价类不满足需求规格说明的输入数据。3.1.2 示例假设有一个订单金额输入框需求规定金额必须为大于0且不超过10000的数字支持两位小数。输入条件有效等价类无效等价类金额数值0.01 到 10000 之间的数字0、负数、大于 10000格式整数或最多两位小数三位及以上小数、字母、特殊字符、空值每个无效等价类都是一条独立的用例。3.1.3 注意事项有的测试同学只关注有效等价类觉得无效输入“没必要测”这是最大的误区。研发在写代码时最容易漏掉的就是异常分支。无效等价类恰恰是发现这类问题的主力。3.2 边界值分析法3.2.1 方法介绍边界值分析法是等价类划分法的补充。大量的软件缺陷集中在输入范围的边界附近因为程序员在写判断条件时最容易犯“大于等于写成了大于”“小于写成小于等于”之类的错误。在边界值分析中需要关注几个关键点上点边界上的点。离点离边界最近的点。内点边界范围内的有效数据点。3.2.2 示例以上面的订单金额为例要求金额在 0.01 到 10000 之间包含边界值本身。边界值分析出的用例数据包括类型数据预期结果上点 - 最小值0.01接受离点 - 最小值的下边界0拒绝内点5000接受上点 - 最大值10000接受离点 - 最大值的上边界10000.01拒绝3.2.3 注意事项边界值分析不仅要覆盖输入框的边界也要覆盖列表分页的边界、时间范围的边界、字符串长度的边界等。一次事务里同时存在多个边界条件时优先组合测试高风险边界。3.3 因果图与判定表法3.3.1 方法介绍当输入条件较多、且条件之间有组合关系时等价类划分和边界值分析就不够用了。此时需要使用因果图或判定表法。因果图的核心步骤分析需求中的输入条件因。分析需求中的输出结果果。画出输入和输出之间的逻辑关系与、或、非、互斥等。将因果图转换成判定表。为判定表中每一列设计一条测试用例。3.3.2 示例优惠券使用逻辑需求描述用户下单时如果订单金额满100元且优惠券状态为可用则允许使用该优惠券如果订单金额不满100元则提示“订单金额不足”如果优惠券已过期则提示“优惠券已过期”。列出条件和动作条件桩C1订单金额 100 元C2优惠券状态为可用动作桩A1允许使用优惠券A2提示“订单金额不足”A3提示“优惠券已过期”判定表如下条件/动作规则1规则2规则3规则4C1金额 100是是否否C2优惠券可用是否是否A1允许使用✔A2提示金额不足✔✔A3提示优惠券过期✔这个例子比较简单因为“订单金额不足”和“优惠券过期”都可能成为动作所以需要结合具体需求。实际项目中需求往往更复杂可能存在“条件之间互斥”或“组合触发同一动作”的情况这就需要仔细分析需求逻辑。3.3.3 注意事项判定表在需求逻辑比较复杂时非常有效但如果条件太多比如超过6个判定表的行列数会爆炸式增长。这时可以先用正交试验法筛选组合再对核心组合设计用例。3.4 正交试验法3.4.1 方法介绍正交试验法源自统计学核心思想是用少量有代表性的组合代表全量组合。它特别适合“多因素、多水平”的场景。这里的因素Factor指条件水平Level指条件的取值。3.4.2 示例假设一个查询功能有三个查询条件每个条件有两个取值关键词填了 / 没填分类选择了 / 没选择排序方式升序 / 降序全量组合是 2 × 2 × 2 8 种直观上还可以接受。但当条件继续增加时全量组合会指数级增长。正交试验则用少量用例覆盖两两组合。实际应用中可以直接使用现成的正交表工具或在线生成器减少手工计算的工作量。3.4.3 注意事项正交试验法适合参数组合场景比如筛选条件、配置项、环境组合等。但要注意正交试验法覆盖的是“两两组合”而非所有高阶组合。对核心业务的高阶组合仍然要单独补充用例。3.5 场景法3.5.1 方法介绍场景法关注用户的实际操作路径而不是单纯的输入条件。场景法中的两个核心概念基本流用户正常完成业务操作的流程。备选流在业务流程中出现异常、分支或替代路径时的流程。场景法的优势是贴近真实用户行为特别适合端到端的业务流测试。3.5.2 示例电商下单流程基本流用户登录 → 浏览商品 → 加入购物车 → 提交订单 → 支付成功 → 订单完成备选流可能包括备选流1用户未登录直接提交订单 → 跳转登录页 备选流2购物车为空时提交订单 → 提示“购物车为空” 备选流3支付超时 → 订单状态变为“待支付” 备选流4库存不足 → 提示“商品库存不足” 备选流5支付失败 → 提示支付失败保留订单每一个备选流从基本流的某个步骤岔开并最终可能回归基本流。3.5.3 注意事项场景法设计用例时不要只画流程就结束。还要明确每个场景的入口条件、数据准备、预期结果以及场景之间是否存在依赖关系。3.6 错误推测法3.6.1 方法介绍错误推测法依赖测试人员的经验和对产品历史缺陷的了解主动猜测“哪里容易出问题”。常见的高风险位置包括首次新增/首版上线的功能模块历史缺陷集中的模块频繁变更的业务逻辑涉及金额计算、时间处理、并发操作的模块第三方接口对接点数据迁移、缓存更新、定时任务等场景3.6.2 注意错误推测法不是“瞎猜”而是有依据的针对性测试。经验丰富的测试人员可以在等价类、边界值等方法覆盖之外用错误推测法补充一组高价值用例。但它不能作为唯一的用例设计方法必须与其他方法配合使用。4. 完整实战案例登录功能测试用例设计接下来用一个完整的登录功能需求把上面的方法串起来。这个例子覆盖了从需求分析、用例方法选择、到最终用例清单输出的全过程。4.1 需求描述业务需求用户可以使用手机号和密码登录系统。具体要求如下手机号必须是11位有效手机号不能为空。密码必须是6到16位的字母和数字组合不能为空。登录时需要输入4位数字验证码。验证码有效期为5分钟过期后需要重新获取。手机号、密码、验证码任一校验失败均给出明确错误提示。连续5次登录失败账号锁定30分钟。账号锁定期内即使输入正确信息也不能登录。4.2 需求拆解与测试点分析先把需求拆解为可测的功能点功能点测试关注点手机号校验非空、11位、数字格式密码校验非空、长度6-16、字母数字组合验证码校验非空、4位数字、有效期5分钟登录结果成功跳转、失败提示错误次数统计连续失败5次锁定30分钟账号锁定状态锁定期间不允许登录4.3 使用等价类划分法设计用例手机号分类等价类代表性数据有效11位数字且为有效手机号13800138000无效为空空无效长度不足11位1380013800无效超过11位138001380001无效包含字母或特殊字符1380013800a无效不符合手机号规则12345678901密码分类等价类代表性数据有效6-16位字母和数字组合Abc123无效为空空无效长度小于6位Ab1无效长度大于16位Abcdef12345678901无效只含数字123456无效只含字母abcdef无效包含特殊字符Abc123验证码分类等价类代表性数据有效4位数字且未过期1234无效为空空无效不足4位123无效超过4位12345无效含字母12a4无效已过期超过5分钟4.4 使用边界值分析法补充用例密码长度边界5位低于下限6位下限7位下限内点15位上限内点16位上限17位超过上限验证码过期时间边界4分59秒未过期5分00秒临界点5分01秒已过期错误次数边界第4次失败未触发锁定第5次失败触发锁定锁定29分钟后仍然锁定锁定30分钟整解锁锁定30分钟零1秒已解锁4.5 使用场景法补充业务流用例场景分析场景编号场景名称具体路径场景1正常登录输入正确信息 → 登录成功场景2手机号错误输入错误手机号 → 提示“手机号格式不正确”场景3密码错误输入正确手机号 错误密码 → 提示“密码错误”场景4验证码错误输入正确账号密码 错误验证码 → 提示“验证码错误”场景5验证码过期等待验证码过期后登录 → 提示“验证码已过期”场景6连续失败锁定连续输错5次 → 账号锁定30分钟场景7锁定期间登录锁定期内输入正确信息 → 提示“账号已锁定”4.6 完整用例示例节选以“场景6连续失败锁定”为例看一个完整用例怎么写。字段内容用例编号LOGIN_031所属模块用户登录用例标题连续输入错误密码5次后账号锁定30分钟优先级P0前置条件测试账号已注册且当前未锁定使用正确的手机号和验证码密码连续输错测试数据手机号13800138000验证码1234密码错误依次为111111、222222、333333、444444、555555操作步骤1. 打开登录页输入正确手机号、正确验证码、错误密码111111点击登录2. 重复上述操作4次分别使用错误密码222222、333333、444444、5555553. 观察第5次登录后的页面提示4. 等待30分钟后使用正确密码重新登录预期结果第5次点击登录后系统提示“账号已锁定请30分钟后再试”30分钟内即使输入正确密码也无法登录30分钟后使用正确密码可以正常登录4.7 用例优先级划分建议P0阻塞级核心正确性用例、数据安全用例比如正常登录成功、输入正确密码但账号被锁定。P1高优先级大多数业务功能用例比如手机号格式错误、密码错误、验证码过期。P2中优先级异常场景和边界场景比如验证码包含字母、密码正好16位。P3低优先级体验类、非功能类用例比如界面提示文案的显示位置。5. 测试用例的管理与评审5.1 用例评审的必要性很多团队没有用例评审环节或者只是走过场。这导致问题是到了测试执行阶段才被发现比如用例与需求不一致、用例覆盖缺失、用例步骤不可执行等。一份专业的测试用例应当经过评审主要评审维度如下需求覆盖是否所有需求点都有对应的用例。方法正确性用例设计方法是否合理边界值是否遗漏。可执行性步骤是否清晰数据是否明确。预期结果的准确性预期结果是否可验证、无歧义。冗余检查是否存在大量重复或优先级不合理的用例。5.2 测试用例与需求追踪矩阵需求追踪矩阵Requirement Traceability Matrix简称 RTM用于建立需求与测试用例之间的映射关系。一个简化的 RTM 示例需求编号需求描述对应用例编号执行状态REQ-001手机号必须为11位有效号码LOGIN_001, LOGIN_002, LOGIN_003已执行REQ-002密码为6-16位字母数字组合LOGIN_004, LOGIN_005已执行REQ-003连续失败5次锁定账号30分钟LOGIN_031, LOGIN_032未执行RTM 的价值在于当需求发生变更时可以快速定位受影响的用例测试结束后也可以用来输出测试覆盖率报告。5.3 用例维护更新测试用例不是一次性产物而是需要持续维护的核心资产。以下情况需要更新用例需求变更。缺陷修复后暴露了新的测试点。测试执行中发现用例本身设计不合理。重构或优化了业务流程。新增了异常场景或边界场景。6. 常见问题与解决方案问题现象常见原因解决思路用例数量很多但核心风险还是遗漏方法使用不当只依靠经验随手写引入等价类、边界值、判定表等系统方法按模块拆解后再设计用例描述模糊执行时反复确认标题和步骤写得过于笼统明确操作步骤、测试数据和预期结果遵循“一个用例只验证一件事”原则用例与需求不一致需求变更后没有同步更新用例建立用例与需求的追踪矩阵在需求变更流程中增加用例更新步骤预期结果不可验证写成了“显示正确”这类模糊描述预期结果必须可观察、可断言例如“页面顶部显示用户名跳转到首页接口返回200”用例优先级划分不合理没有考虑业务影响和风险等级结合需求价值、历史缺陷率、用户使用频率来调整优先级用例库越来越大回归成本高用例缺乏分层和分类管理将用例划分为冒烟用例、核心功能用例、回归用例定期清理过时用例7. 测试用例设计最佳实践7.1 需求先行业务理解优先用例设计不是从写用例开始的而是从理解需求开始的。在动手设计之前需要先弄清楚这个功能面向什么用户核心业务价值是什么哪些路径使用频率最高哪些异常会带来最大的资损或安全问题只有把一个需求理解到位才能高质量地拆解测试点。7.2 多种设计方法结合而不是只用一种不同方法各有适用场景所有输入框相关的功能优先考虑等价类 边界值多条件组合的业务逻辑优先考虑判定表核心用户操作链路优先考虑场景法参数组合过多的查询模块优先考虑正交试验。7.3 用“正向用例 负向用例 边界用例”三维结构组织用例每设计一个功能模块的用例都按三个维度检查正向用例功能正常工作的路径。负向用例非法输入、异常操作、权限不足、数据不存在等。边界用例数据边界、时间边界、次数边界、数量边界。7.4 测试数据与环境准备前置测试用例设计完成后还要同步准备测试数据和环境。不要把数据准备留到执行阶段才临时处理尤其是涉及账号状态、订单状态、时间条件等特殊数据时提前准备好可以大幅提升执行效率。可以建立测试数据清单设计用例时同步标注每条用例需要的数据准备动作。7.5 为回归测试保留一份稳定的“核心用例集”每个版本都跑全量用例是不现实的。建议在用例设计阶段就分层冒烟用例集版本提测后的第一道关卡耗时控制在15分钟以内。核心功能用例集覆盖主营业务流程每轮测试必须执行。回归用例集版本上线前选择性执行。7.6 用例设计要兼顾安全测试视角在测试用例设计过程中必须加入安全视角的用例。以下安全场景是设计用例时的必选项输入框提交 SQL 特殊字符和脚本内容检查是否会被执行。未登录状态直接访问需要鉴权的接口或页面。通过修改请求参数尝试越权访问其他用户数据。测试环境是否使用了脱敏数据严禁将真实用户隐私数据用于测试。7.7 自动化用例与手工用例分层规划用例设计阶段就应该明确哪些用例适合自动化哪些用例保留为手工执行。自动化用例适合以下特征脚本稳定不频繁变更。核心回归路径。数据准备可控。断言清晰预期结果可程序化校验。而涉及视觉体验、复杂交互、模糊判断的测试点更适合保留为手工用例。8. 一份可以直接使用的用例设计检查清单在输出测试用例之前用下面这份清单逐项自检可以覆盖绝大多数常见遗漏项[ ] 是否覆盖了需求中的所有正常流程[ ] 是否覆盖了所有异常流程和非法输入[ ] 是否分析过输入边界、长度边界、时间边界、次数边界[ ] 是否覆盖了权限相关的场景未登录、低权限、越权访问[ ] 是否覆盖了数据为空、数据不存在、数据重复的场景[ ] 是否覆盖了第三方依赖异常接口超时、返回错误[ ] 是否覆盖了并发操作同时提交、重复点击[ ] 是否覆盖了数据一致性场景事务中断、部分成功[ ] 每条用例是否都有明确且可验证的预期结果[ ] 每条用例是否都有独立的编号和明确的优先级[ ] 是否建立了用例与需求的追踪关系[ ] 是否准备了执行所需的环境、数据和账号建议把这份清单保存下来每次完成用例设计后逐项打钩。坚持一段时间后会发现漏测率明显下降用例评审时被挑出的问题也会越来越少。测试用例设计是一项需要持续打磨的硬技能而不是“会用工具写点步骤”那么简单。把方法用熟练把清单变成习惯任何功能到你手上都能形成一张严密、高效、可执行的测试网。如果这篇文章对你有帮助可以收藏备用也欢迎在实际项目中实践后回来分享你的用例设计经验。