ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

测试用例编写指南:从需求拆解到可执行文档的完整方法

测试用例编写指南:从需求拆解到可执行文档的完整方法

简介:这是一份面向软件测试工程师的系统化《测试用例编写指南》文档,针对测试用例编写长期依赖个人经验、划分颗粒度不一、可读性差等痛点,给出从需求分析、业务流程分析、系统设计分析,到用例编写、评审完善与维护更新的完整流程;同时详细说明用例标题、前置条件、操作步骤、预期结果等要素,并介绍测试需求划分、用例划分原则,以及等价类划分、边界值分析、状态迁移等常用测试设计方法。资源包共1个docx文件,大小约494KB,正文按目的、适用范围、编写步骤、要素模板、划分原则、编写要求、测试类型、设计方法、维护与风险建议等章节组织,结构清晰,可直接作为团队测试规范或新人培训材料使用。目前已有551人学习,适合需要统一用例编写规范、提升测试设计水平的测试人员参考。

1. 测试用例编写指南:一份 docx 想解决的三个真问题

写了六七年测试用例,帮团队搭过几套用例规范,我最深的感受是:测试用例编写指南最难的部分从来不是「写」,而是让一个新同事照着你的步骤执行,最后得出的结论和你一致。它真正要解决三个问题:需求怎么拆成测试点、字段和写法按什么口径、写完怎么保证别人敢直接拿去执行。

别把它当成一份 docx 模板,下载下来填完就交差。模板只是壳,字段口径、优先级定义、预期结果写法才是肉。大多数团队不是没有用例,而是用例「有量无质」:数量几百上千条,评审没人细看,执行全靠猜。

它适合三类人:刚入行需要建立写作习惯的测试工程师、要搭团队用例规范的质量负责人、给老项目补用例资产的人。没有高深理论,但每一条都能立刻改到你自己的文档里,属于写一次、用很久的东西。

2. 需求拆解先行:用例写不好,九成是需求没拆透

以前带过一个模拟项目X,需求文档写得很细,用例也照着写了,一评审却被开发反问「这条需求你们理解偏了」。后来复盘发现根子不在用例格式,而在需求到测试点这一步。用例是需求的镜像,需求拆成什么样,用例就是什么样。这一章讲清楚怎么把一段需求文本拆成一张可勾选的测试点清单,这是后续所有字段、步骤、优先级的地基。

2.1 从需求文档到测试点的四步拆解

拿到需求先别开写,我一般做四步人工拆解。

第一步,通读全文,把动词短语全部划出来。新增、修改、删除、查询、导入、导出、审批、驳回,每个动词都对应一批功能点。漏了动词就等于漏了功能,这是新手最容易在第一条沟里翻车的地方。第二步,把所有规则词圈出来。「必须」「不得」「如果……则」「当……时」「超过……」,这些词后面的内容全是判断逻辑,是后续边界值和异常用例的来源。第三步,把边界和异常场景单独列出来,数值上限、时间范围、批量条数、文件大小、空值,需求里往往只有一句话,到用例阶段通常要拆出一整组。第四步,把非功能要求转成可验证的描述,「页面要流畅」不能写进用例,要转成「登录请求在普通网络下响应时间不超过 3 秒」。

拆解结果落到一张测试点清单里,我习惯的格式是这样:

需求原文拆出的测试点用例方向
用户可修改本人昵称,长度 2-20 个字符昵称正常修改;长度 2 / 20;长度 1 / 21;为空;含空格功能 + 边界
导入明细时,单次最多 5000 行导入 5000 行成功;5001 行被拦截;0 行提示无数据功能 + 边界 + 异常
超过 30 天未登录的账号需重新验证29 天可正常登录;30 天触发验证;31 天同样触发边界 + 场景

这张表就是后面用例的目录。写用例前先核对一遍测试点是否全部落了地,能避免最常见的问题:需求提了 20 个功能点,用例只写了 15 个,剩下 5 个没人发现,直到上线前才被用户试出来。

提示:测试点清单直接放在用例文档最前面,评审时第一屏就看它,比从头念用例高效得多。

2.2 等价类与边界值:边界不是只有一个值

等价类划分和边界值分析是最基础的设计方法,但大多数实际用例里用得不够细。等价类是把输入空间分成若干集合,每个集合取一个代表值;边界值是在分界点附近取 min、min-1、max、max+1 各测一遍。真正容易漏的是「第二边界」和「特殊值」。

什么叫第二边界?需求写「昵称长度 2-20 字符」,常规思路是测 2、1、20、21 四个值。但如果底层字段是 varchar(50),还要补 50 个字符这条用例,防止长度校验和字段容量打架。再比如金额字段,不光测边界金额,还要测小数点后两位、超大金额、负数。所以我在测试点清单里单开一列「边界值」,不靠测试人员临场发挥。

常见输入项的边界表可以做成这样:

输入项有效等价类无效等价类必测边界值补充特殊值
昵称长度2-20 字符1 字符、21 字符2 / 20 / 1 / 21空值、全空格、含 emoji
转账金额0.01-50000.00 元0、50000.01 元0.01 / 50000.00 / 0 / 50000.0150000.005 元(精度边界)
批量导入行数1-5000 行0 行、5001 行1 / 5000 / 0 / 5001含重复主键、含空行

写边界用例有个血泪经验:预期结果不要只写「成功」或「失败」,要写系统具体表现。同样是长度超限,有的系统提示「昵称长度不能超过 20 个字符」,有的直接截断保存,两种实现的预期结果完全不同。这个判断标准一旦写错,执行者就会开始猜。

2.3 场景法:把用户路径变成可执行步骤

单条用例能覆盖规则,覆盖不了用户的真实操作路径,要用场景法补。场景法核心是基本流加备选流:基本流是用户最顺利走完的路径,备选流是每个可能分叉的地方,异常流是走到一半出错的情况。以登录功能为例:

场景编号场景描述涉及流程是否异常
SC-01输入正确账号和验证码,登录成功进入首页基本流否
SC-02账号正确、验证码错误,提示后可重新输入备选流否
SC-03连续 5 次验证码错误,账号被锁定异常流是
SC-04登录成功后刷新页面,会话仍保持备选流否
SC-05登录页停留超时,提交时报会话过期异常流是

场景表出来后,每个场景再展开成步骤化的用例。新手容易把场景和用例混为一谈,一个场景写成一条巨长的用例,塞了七八个步骤。正确做法是一个场景对应一条用例,复杂的备选流拆成多条,保证每条用例的执行步骤控制在 3 到 8 步之间。场景法最有价值的地方,是逼你用「用户会怎么操作」而不是「系统有什么功能」的视角来编号用例,这个视角在评审时开发最容易买账。

3. 用例字段与模板:一份能落地的测试用例文档长什么样

指南的核心资产是字段口径。同样的功能,字段定义清晰与否,决定这份 docx 是一本能直接执行的操作手册,还是一份躺在共享盘里的死文档。这一章从字段规范、写法规范、文档结构三层往下拆。

3.1 用例编号、优先级、前置条件的规范

先给一份我惯用的字段表,每个字段都有明确口径,模板里逐列说清:

字段填写规范示例
模块按功能模块分类,跨模块公共功能单列login / order / common
用例编号模块码-功能码-三位流水号,全文档唯一LOGIN-AUTH-001
用例标题一句话说清「做什么操作、验证什么结果」验证码错误时登录失败并提示
优先级P0-P3,口径见下文P1
前置条件数据和状态描述,必须能被后来者复现账号 admin 存在且未锁定;验证码接口可用
测试数据与步骤分离,单独成列账号 admin / 错误验证码 123456
测试步骤有序步骤,每步一个操作1. 打开登录页 2. 输入错误验证码并提交
预期结果可判断的具体描述提示「验证码错误」,页面停留在登录页
实际结果执行时填写,失败附截图待执行

编号规则最容易被随意对待。我见过「用例1、用例2」的流水号,也见过编号里带创建人名字的,换人维护直接乱掉。推荐格式是模块码-功能码-三位序号,功能码来自测试点清单,看到编号就知道用例归属,LOGIN-AUTH-001 一眼就能看出是登录模块验证码功能的第 1 条用例。

优先级口径不定,最后一定是全员 P1。经过多轮验证,我给团队用的定义是这样的:

优先级定义使用场景
P0主流程必经路径,出问题直接阻断发布每次发布后冒烟必跑
P1核心功能规则,非阻断但影响关键体验功能测试必跑,回归主集合
P2一般功能、次要分支、兼容性全量测试或迭代测试
P3边界、异常、易用性建议有改动时按需抽查

前置条件的常见误区是写「系统正常」「用户已登录」这种无法复现的描述。合格的前置条件要做到:另一个人按这句话操作,能把环境还原到用例要求的初始状态。环境级的数据放前置条件,用例级的数据放测试数据列,坚决不写死在步骤文本里,这个区别后面避坑章节还会细讲。

3.2 测试步骤与预期结果:一句话讲清楚一件事

步骤质量直接决定执行效率,也最值得抠细节。三条硬规则:

第一,一个步骤只做一件事。「输入账号密码并点击登录,等待页面跳转」要拆成两步:先输入并断言输入框回显,再提交并断言跳转。这样失败时能精确定位到哪一步挂掉。第二,操作必须带具体输入值。不写「输入错误密码」,要写「输入密码 123456(正确密码为 abc123)」,执行者不用猜,也不用翻需求。第三,预期结果写能被判定对错的描述。这是整个文档最核心的一条,看一组对比:

写法是否合格问题
页面正常显示不合格什么算正常?任何人无法判定
登录成功后进入首页,右上角显示账号名合格有具体位置和具体内容
数据保存成功不合格保存成功体现在哪里
点击保存后按钮变为「已保存」,列表刷新出现新记录合格状态加数据双断言
系统无报错不合格无报错不是预期,是结果描述
接口返回 code=0,页面提示「提交成功」合格接口与界面两层校验

写预期结果有个自查技巧:写完问自己一句,这句话让一个从没看过需求文档的人来判,能不能一眼定对错。如果答案是「得问我」,这条预期结果就得重写,没有商量余地。

3.3 docx 模板落地:文档结构、修订记录与结构化导出

字段口径定完,落到 docx 里要有稳定结构。我常用的模板分五个章节:

文档章节内容作用
1. 适用范围适用项目、适用阶段、读者对象避免文档被乱用
2. 修订记录日期、作者、变更内容、评审人变更可追溯
3. 测试点清单需求原文与测试点的映射表评审时对覆盖率
4. 用例正文按模块分章,每章一张用例表执行和检索
5. 评审记录评审日期、结论、遗留问题质量门禁留痕

修订记录是多数团队忽略的部分,但它是用例可追溯的根。任何一次增删改都要记一条,没有修订记录的用例文档,三个月后没人敢动它。

docx 表格本身不适合做复杂内容校验,所以我在文档之外通常会维护一份结构化的版本,方便后续导入测试管理平台或做自动化体检。结构化格式长这样:

# 单条用例的结构化描述,与 docx 表格字段一一对应 - module: "login" case_id: "LOGIN-AUTH-001" title: "验证码错误时登录失败并提示" priority: P1 preconditions: "账号 admin 存在且未锁定;验证码接口可用" data: username: "admin" code: "123456" # 与实际验证码不一致 steps: - step: 1 operation: "打开登录页,输入账号 admin" expected: "输入框正常回显" - step: 2 operation: "输入验证码 123456,点击登录" expected: "提示「验证码错误」,页面停留在登录页" actual: ""

这段 YAML 里 priority、preconditions、data、steps 和 docx 字段一一对应,说明无论载体是 word 还是测试管理平台,字段口径是一致的。导出成这种结构后,后面做用例体检脚本、生成测试报告都会省很多事,能直接省掉一次人工誊抄。

4. 测试用例避坑指南:5 个写完才发现的高频问题

用例规范能不能推行下去,不看写得有多全,看踩坑之后大家愿不愿意改。这一章是几个团队反复磨合后沉淀下来的 5 个翻车点,每条都按「现象、原因、解决」写,可以直接拿去对照自己的用例文档。

4.1 用例重叠:同一个功能被三个模块各写一遍

现象:登录、账号、权限三个模块的用例表里都有一条「密码错误提示」,回归时同一场景来回跑三四遍;某次改了登录逻辑,发现要同步改四份文档,漏改的那份让新逻辑没被回归覆盖到。原因:用例按页面而不是按功能点组织,需求拆解阶段没有做测试点去重。页面会出现在多个模块入口里,但功能点只有一个归属。解决:测试点清单阶段先做去重,一个功能点只归一个模块;登录、导入导出这类跨模块公共能力单独建 common 用例集,其他模块通过用例编号引用而不是复制内容,执行时按功能点组合挑用例,不按模块全量跑。

4.2 预期结果太粗:同一个用例,三个人三种判断

现象:预期结果写着「页面正常」「数据正确」「系统无报错」,执行时三个人对同一用例给出三个结论,缺陷单来回打回。原因:写的时候默认执行者和自己共享同一套理解,省略了判断标准。越熟悉业务的人越容易犯这个错,在他眼里「正常」不言自明。解决:强制预期结果包含具体文案、具体数值或状态流转,把「无报错」改成「接口返回 code=0 且页面提示提交成功」。执行前我还会随机抽一条用例,拿给一个没参与过需求的人试读,读不懂就说明写法不合格。

4.3 优先级全是 P1:等于没有优先级

现象:用例文档里八成是 P1,冒烟集选不出来,回归只能全量跑,发布前时间不够就开始砍用例,砍得没有依据。原因:优先级没有定义,或者定义了但没在评审时核。写的人怕漏测,宁可都标重要,结果就是都不重要。解决:模板里固定优先级口径,评审时重点看 P0 和 P1 的占比。参考比例是 P0 占 10%-15%,P1 占 40%-50%,剩下给 P2 和 P3。占比明显偏离时,不用问,口径没贯彻。

4.4 用例与数据强耦合:改一次数据,动一片用例

现象:用例步骤里写死「账号 test001 转账金额 100.00 元」,某天测试环境数据被清理,几十条用例集体失效,只能加班逐条改。原因:环境数据和业务数据混在步骤文本里,数据一变,用例文本跟着变。解决:测试数据从步骤里拆出来放独立字段,步骤里用「测试数据:账号 / 金额」这类占位引用;环境级数据由初始化脚本统一准备,用例里只写「使用前置条件中已创建的账号」。数据刷新时只需要维护数据准备脚本,用例文本基本不动。

4.5 评审走过场:写完没人看,执行时才发现缺步骤

现象:评审会约在下午,提前十分钟把 docx 发出来,会上从头到尾念用例,念完没人提意见。结果执行时发现前置条件缺失、异常分支没覆盖,一遍遍补充,用例一直在改。原因:评审前没有给阅读时间,也没有评审清单,开放式提问在评审会上永远得不到有效回答。解决:用例文档提前 24 小时发出,评审时长控制在 30 到 45 分钟;按清单逐项核对。评审时盯「测试点清单」和用例的对应关系,比逐条念用例效率高一个数量级。

5. 可执行性与复用:让用例从「写了」变成「跑了能信」

用例文档写得好不好,最终要靠执行结果验证。这一章讲三件事:用例怎么分层组织应对日常迭代、怎么用脚本给用例文档做体检、以及需求变更时怎么快速定位受影响用例。

5.1 把用例分成三层:冒烟集、回归集、全量集

一份用例文档不应该是平的,执行时要按场景取用。我习惯在文档里维护三层集合:

集合用例范围使用时机失败处理
冒烟集每条主流程的 P0 主路径,30-50 条新版本发布后第一轮失败立即阻断,先定位再回归
回归集P0 + P1,覆盖核心规则功能测试、发布前回归失败记录并评估影响面
全量集所有用例,含 P2/P3大版本或长期未维护的系统分批执行,按风险排序

冒烟集的关键是「少而稳」,宁可 40 条每条都有价值,不要 100 条里一半是重复场景。我见过最多的情况是冒烟集选了一堆 P1 页面级用例,真正的主流程反而没覆盖。回归集要跟着每次变更调整,变更影响到的模块用例提到执行队列前面。

5.2 用脚本给用例文档体检:字段完整性、编号唯一、优先级分布

用例数量过了两三百条,人工检查字段就不可靠了。我一般会把 docx 里用例表导成 CSV 或电子表格格式,然后用一段小脚本做基础体检。脚本做的事情不多,但能挡住大部分低级问题:

# 用例文档体检脚本:检查必填字段、编号唯一性和优先级分布 import pandas as pd # 参数说明:path 为从 docx 导出的用例表文件 # required 列表按实际模板字段调整 df = pd.read_csv("cases.csv") required = ["case_id", "module", "priority", "preconditions", "steps", "expected"] # 1) 必填字段空值检查:空值统计会列出哪些字段有缺失 empty = df[required].isna().sum() print(empty[empty > 0]) # 2) 编号唯一性:重复编号会导致两次执行结果互相覆盖 duplicated = df[df.duplicated("case_id", keep=False)] print("重复编号用例数:", len(duplicated)) # 3) 优先级分布:normalize=True 输出占比,P1 超过 50% 要警惕口径失效 print(df["priority"].value_counts(normalize=True)) # 4) 步骤数量:步骤过少的用例往往是预期结果写得不够细 df["step_count"] = df["steps"].astype(str).str.count(";") + 1 print("步骤数不超过 2 的用例数:", len(df[df["step_count"] <= 2]))

这段脚本的逻辑是把「人工评审凭感觉」变成「数据说话」:必填字段空值说明模板没被执行,编号重复说明文档维护已经失控,优先级分布异常说明口径没贯彻。第 4 个检查对应「步骤拆分」这条规范,步骤写成一个长句的用例,按分号拆开一数就能发现。参数上,required 列表要和 docx 模板的字段一致;步骤分隔符如果用换行而不是分号,把 str.count(";") 换成按换行拆分即可。

注意:脚本只能查形式问题,查不出「预期结果写得对不对」这类语义问题。形式体检过了,语义还要靠评审和试执行。

5.3 用例与需求的双向追溯:一张映射表管住变更

用例文档最大的敌人是需求变更。我的做法是在测试点清单基础上维护一张追溯矩阵,把需求条目、测试点、用例编号串起来:

需求条目测试点用例编号状态
REQ-LOGIN-02 验证码校验验证码错误提示LOGIN-AUTH-001 / 002已实现
REQ-IMPORT-05 行数上限导入 5000 行边界IMPORT-LIMIT-001/002/003需求变更中
REQ-IMPORT-05 行数上限导入 5001 行拦截IMPORT-LIMIT-004待更新

需求变更时,先查矩阵里这条需求对应哪些用例,把状态标成「待更新」,改完用例再更新矩阵状态。以前没有矩阵的时候,改一条需求要在整个 docx 里翻半天,还经常漏;现在变更影响范围十分钟内能圈出来。这个矩阵也是评审时对覆盖率的正式依据,测试点清单里每一项都要能在矩阵里找到对应用例编号。

6. 三分钟自检清单:把用例规范变成团队习惯

规范能不能活下来,取决于它是否被内化成习惯。我现在写完一批用例,不急着发评审,先花三分钟按一张清单自检一遍,这比任何评审都管用。建议把这个清单也放进团队的测试用例编写指南里,作为交付前的质量门禁:

自检项通过标准
编号唯一全文档无重复编号,格式统一
前置条件可复现别人照做能还原初始状态
步骤单一每步一个操作、一个输入值
预期可判断无「正常 / 正确 / 无报错」字样
数据已分离步骤中没有写死环境数据
追溯完整每个测试点都有对应用例编号
优先级有梯度P0 占 10%-15%,P1 不过半

这个习惯是我从一次失败里捡回来的。有一回发版前评审,用例文档表面很整洁,执行时却连续发现三条用例前置条件互相矛盾,整个回归被顶住半天,那个版本的用例基本是重写的。从那以后我给自己定了一条硬规矩:用例不先过自检清单,就不允许提交评审。说白了,这份指南的核心不是说教,是把「写用例」从个人经验变成团队口径,让每个新同事拿到的是一套能直接上手的标准,而不是到处打听老人「平时怎么写的」。希望帮到你。

本文还有配套的精品资源,点击获取

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进