前端

软件测试面试的解题框架:如何把一道题拆出 10 个测试点

2026/06/04 约 18 分钟
软件测试面试的解题框架:如何把一道题拆出 10 个测试点

测试面试中有一类经典题:「请设计一下 XXX 的测试用例」。测登录页、测购物车、测一个搜索框、测微信发红包……

大多数人想到什么说什么,东一榔头西一棒槌。面试官看到的是:思路零散、没有方法论、考虑不周全

问题不在「你知道多少」,而在你没有一套拆解框架。本文给你一套我自用的六步解题法。

框架总览:六步解题法

1. 明确范围 → 2. 功能分解 → 3. 数据设计 → 4. 异常&边界

5. 非功能维度 → 6. 回归关联

拿到题目后,按这六个步骤走,既能展示思维结构化,又不容易遗漏。

Step 1:明确范围 —— 先问边界,再做设计

面试官说「测一个登录页」,并不意味着你能开始列用例。

应该先用 30 秒反问澄清。问什么?我总结为 3W 原则

W问什么示例
Who用户是谁?角色有哪些?普通用户 vs 管理员 vs 未注册访客
What功能范围是什么?只有账密登录,还是含手机验证码/扫码/SSO?
Where在什么环境?Web 端?App 端?H5?小程序?

示例话术

「在开始设计用例之前,我想先确认几个前提。这个登录页面向哪些用户角色?支持的登录方式有哪些?是在什么终端上使用?有没有第三方登录集成?」

这一步本身就是加分项——不急着解题,先界定问题边界,说明你具备测试规划的意识。

Step 2:功能分解 —— 把大功能拆成可验证的小单元

拿到范围后,用「输入 → 处理 → 输出」的模型拆解。

以「手机验证码登录」为例

输入层:
  ├── 手机号输入框    → 格式校验、长度限制
  ├── 验证码按钮      → 点击行为、倒计时、重发
  ├── 验证码输入框    → 位数限制、过期、错误
  └── 登录按钮        → 可点击条件、loading 态

处理层:
  ├── 发送验证码      → 接口调用、频率限制、无效手机号
  ├── 校验验证码      → 正确/错误/过期/已使用
  └── 登录态生成      → token 存储、会话超时

输出层:
  ├── 成功            → 跳转页面、记住登录、欢迎提示
  ├── 失败            → 错误提示、重试次数、账号锁定
  └── 异常            → 网络断开、服务超时、验证码服务宕机

把你的思路在面试中讲出来

「我把登录拆成三层来看:输入层测 UI 交互和前端校验,处理层测接口逻辑和异常处理,输出层测成功和失败的各种反馈。每层我再展开讲具体的点……」

面试官听到这个结构,心里已经在打勾了。

Step 3:数据设计 —— 告诉面试官你知道「测什么数据比测什么功能更重要」

这一步最容易被忽略,也最容易出彩。

账号状态维度

状态测试重点
正常用户基准流程
未注册用户提示注册 / 自动注册
密码错误 N-1 次第 N 次是否锁定
账号已锁定是否提示解锁方式
账号已注销登录行为如何处理
同时在多个设备登录互踢逻辑、会话管理
异地 / 新设备登录是否需要二次验证

验证码数据维度

数据场景测试点
正确验证码正常登录
错误验证码提示错误 + 允许重试
过期验证码提示过期 + 引导重新获取
已使用过的验证码一次性生效
60s 内重复获取倒计时机制 + 频率限制
换手机号重新获取旧验证码失效

💡 面试中讲出「账号状态维度」这四个字,就已经超过 80% 的候选人了。

Step 4:异常 & 边界 —— 区分「功能没做」和「系统容错」

面试官爱问:「你觉得哪些边界情况需要关注?」很多人回答「输入 11 位手机号」「密码至少 6 位」就停了。

我用一个 三层异常模型

L1 — 用户操作异常(人为输入错误)
  ├── 空格、特殊字符、emoji
  ├── 粘贴超长文本
  ├── 快速连续点击发送验证码
  └── 切后台再回来(验证码倒计时是否继续)

L2 — 系统状态异常(环境条件变化)
  ├── 网络断开 → 恢复 → 重试机制
  ├── 切换 WiFi / 4G 时发送请求
  ├── 服务端返回 500 / 502 / 504
  └── 验证码服务独立宕机

L3 — 并发 / 时序异常(多个操作交错)
  ├── 验证码未返回时点击登录
  ├── 发送验证码时切换手机号
  ├── 登录中杀进程重启 App
  └── 在 A 页面发送验证码,去 B 页面输入

话术

「我把异常分成三层:用户操作异常、系统状态异常、并发生时序异常。每层我举两个例子——比如用户快速连点发送验证码、或者验证码还没返回就点了登录……」

Step 5:非功能维度 —— 结尾的「保底分」

功能用例列完了,面试官大概率会问「还有其他要考虑的吗」。这是给你留的加分题。

维度切入点
安全密码是否明文传输、验证码有无频率限制、登录失败超过 N 次是否锁定、session 有效期、是否防 SQL 注入 / XSS、密码是否 log 到日志里
性能登录接口的 P99 延迟、验证码下发耗时、高并发下短信成本是否可控
兼容性不同浏览器、不同手机系统版本、不同屏幕分辨率下的 UI 表现
用户体验键盘弹起时输入框是否被遮挡、密码可切换明文/密文、loading 态是否有反馈、报错信息是否清晰可理解
国际化海外手机号、不同时区、多语言错误提示

💡 不需要每个维度都长篇大论,但要说出一两个具体的,证明你考虑过。

Step 6:回归关联 —— 展示全局视野

最后一个加分动作:告诉面试官你还会关注哪些关联模块

「除了登录页本身,我还会关注:记住密码功能是否影响后续登录、登录后 token 是否在请求头正确传递、退出登录后 token 是否失效、修改密码后已登录的会话是否被踢出、以及新用户首次登录是否被正确引导到引导页。」

这一步的意义:展示你不是一个「只能测被分配的那个页面」的执行者,而是能从系统层面思考模块间依赖的测试工程师。

完整演示:用这套框架回答「测微信发红包」

面试官:请设计一下微信发红包的测试用例。

Step 1 — 明确范围

我确认一下:是「发红包」还是「收发红包的全流程」?是普通红包还是包含拼手气红包?只测微信客户端还是包含支付系统?

Step 2 — 功能分解

我把发红包拆成:选择金额类型(普通/拼手气)→ 填写金额和个数 → 输入支付密码 → 红包生成并发送到聊天 → 对方领取。每个环节我展开讲用例。

Step 3 — 数据设计

数据维度测试值
金额边界0.00(拒绝)、0.01(最小)、200.00(单包上限)、200.01(拒绝)、20000.00(单日上限)
个数边界0(拒绝)、1(最小)、100(单次上限)、101(拒绝)
金额个数交叉0.01 元 × 100 个 = 1 元(恰好够分)
余额校验余额 199,发 200(拒绝)、余额 200,发 200(允许,发完余额归零)
拼手气总金额能否被人数整除、所有人金额总和是否等于总金额、是否有 0.00 出现

Step 4 — 异常

支付密码错误、指纹/面容识别失败、发红包过程中网络断开、对方在领取前删除聊天记录、红包 24 小时过期退款。(如果再细化:并发——同一红包被多人同时抢时的金额一致性)

Step 5 — 非功能

安全性:支付密码的加密传输、防止红包金额被中间人篡改。性能:除夕夜高并发下红包生成延迟。体验:发红包后的动效和音效。

Step 6 — 回归关联

红包退款后钱包余额是否恢复、群红包的领取记录是否准确、删除好友后未领取的红包是否退款、红包记录在账单中是否可追溯。


面试前一天的复习清单

你要会的东西准备到能脱口而出的程度
一篇「测登录页」的标准回答按六步法口述一遍,计时 5 分钟
等价类 + 边界值的 2 个案例比如邮箱验证、优惠券满减
一个状态迁移图订单状态机 or 登录会话状态
一个判定表审批规则 or 登录条件组合
一个正交实验案例报表筛选 or 配置项组合
「安全方面你会关注什么」准备 3 个点:XSS/SQL注入/加密传输
「你怎么保证覆盖充分」等价类缩减冗余 + 边界值捉边缘 + 状态图防遗漏

这套框架来自前两篇文章的知识积累,真正面试时按顺序走一遍,你的回答会比其他候选人结构清晰不止一个档次

三篇文章构成了一个完整的测试知识体系,配合食用效果最佳:

💬 评论区占位 —— 可在此接入 GiscusWaline