从一个登录功能开始:需求、状态和风险如何落到测试用例
登录测试很容易写成一张不断变长的清单正常登录、账号为空、密码错误、长度边界、弱网、安全、兼容性……但在真实测试中第一步通常不是继续补测试点而是先确认这次要测的是哪一种登录、需求改了什么、哪些能力不在本次范围内。同样是“登录”普通内容网站、内部管理后台和金融系统的风险并不相同账号密码、短信验证码、第三方登录和单点登录的状态也完全不同。范围没有确定之前讨论“应该写多少条用例”没有统一答案。本文以一个普通Web站点的账号密码登录为例先固定测试依据再使用等价类、边界值、决策表和状态迁移设计27条核心用例。这里关注的是用例怎样从需求和风险中产生而不是把27当作完整登录测试的标准数量。一、先固定本次测试范围为了让案例能够落地先约定这是一个面向普通内容社区的Web登录页使用用户名和密码认证主要支持桌面端浏览器。本次不包含短信验证码、第三方登录、MFA、找回密码和“记住我”。测试所依据的示例需求如下编号已确认的示例需求AUTH-001正常账号输入正确凭据后登录成功创建新会话并跳回登录前的目标页面AUTH-002用户名长度为420位密码长度为864位空值和越界输入在提交前给出提示AUTH-003账号不存在、密码错误和账号停用时对外统一提示“账号或密码错误”AUTH-00410分钟内连续失败5次后临时锁定15分钟锁定期间不能登录AUTH-005登录成功后更新会话标识登录前的旧标识不能直接获得登录态AUTH-006请求处理中禁止重复提交断网后不能误显示登录成功AUTH-007接口只接受约定字段类型非法类型返回客户端错误且不暴露服务端堆栈AUTH-008输入框有明确标签错误信息使用文本说明并能定位到对应字段AUTH-009在约定负载下登录接口的响应时间和错误率满足容量目标AUTH-010在产品声明支持的浏览器中核心流程、提示和键盘操作保持可用用户名长度、锁定时间、并发量和响应时间都是为了演示而设定的需求不是通用标准。实际测试时这些值应来自产品需求、接口文档、安全基线或容量目标如果没有写清楚应先记录为待确认项而不是由测试人员自行补成事实。还有一个常见误区注册、改密和登录的输入规则不一定相同。登录需要兼容系统中已经存在的合法账号不能把新用户注册时的密码复杂度校验直接照搬过来。二、一次登录不只是页面跳转用户看到的是两个输入框和一个按钮系统内部至少经过页面、登录接口、认证服务、会话与数据几层页面交互输入、必填提示、按钮状态、键盘操作和重复点击。登录接口请求字段、错误结构、超时以及异常参数。认证服务凭据校验、账号状态、失败计数和锁定策略。会话与数据会话标识、登录态、跳转地址和审计记录。因此“登录成功”的判定不能只有页面跳转。还要检查接口结果、登录后的用户身份、新会话是否生效、跳转地址是否正确以及失败计数是否被重置。“登录失败”也不只是出现一句错误提示。系统不应创建有效会话失败次数应按规则变化不同失败原因不能意外泄露账号状态本次失败造成的锁定状态还会影响下一次请求。这样拆开后每条用例都应该能回答依据哪条需求、验证哪个风险、需要什么前置状态、怎样判断通过以及执行后保留什么证据。三、用设计方法减少无意义的组合1. 等价类和边界值用户名和密码的输入空间很大不可能逐个尝试。可以先划分有效、无效和空值等价类再围绕边界取值。用户名允许420位时选择3、4、20、21密码允许864位时选择7、8、64、65。边界值用例需要准备对应账号。例如验证20位用户名可以正常登录测试环境中必须存在一个20位用户名的有效账号否则失败原因只是账号不存在无法证明长度上界是否正确。2. 决策表登录结果同时受到账号是否存在、密码是否正确、账号是否停用和是否锁定等条件影响。把条件组合写成决策表更容易发现遗漏和冲突规则账号存在密码正确状态正常已锁定预期结果R1是是是否登录成功并创建新会话R2是否是否拒绝登录并累计失败次数R3否--否拒绝登录不暴露账号是否存在R4是是否否拒绝登录不创建会话R5是是是是拒绝登录保持锁定状态这里有一个实际的取舍分别提示“账号不存在”和“密码错误”对用户更直接但也可能帮助攻击者确认有效账号。对于本文的示例系统约定公开文案和错误响应采用统一策略详细失败原因只进入内部日志。3. 状态迁移连续失败、临时锁定和到期恢复都依赖前一次操作单次请求无法覆盖整个过程。锁定流程至少要验证第4次失败后仍能继续尝试、第5次失败后进入锁定、锁定期间正确密码也不能绕过以及锁定到期后能够恢复。还要关注失败计数是否清零、锁定时间从何时开始计算以及并发请求会不会绕过计数。四、27条核心用例是什么基于前面的范围和10项需求本次整理出27条核心用例。下面的表格保留测试场景和关键判定先让覆盖内容可见。用例编号类别测试场景关键判定结果LOGIN-F-001功能有效账号输入正确凭据登录成功跳回目标页并创建新会话LOGIN-F-002功能用户名为空阻止提交用户名框显示必填提示LOGIN-F-003功能密码为空阻止提交密码框显示必填提示LOGIN-F-004功能用户名为3位低于下界阻止提交提示用户名长度不符合要求LOGIN-F-005功能用户名为4位等于下界使用预置有效账号登录成功LOGIN-F-006功能用户名为20位等于上界使用预置有效账号登录成功LOGIN-F-007功能用户名为21位超过上界阻止提交提示用户名长度不符合要求LOGIN-F-008功能密码为7位低于下界阻止提交提示密码长度不符合要求LOGIN-F-009功能密码为8位等于下界使用预置有效密码登录成功LOGIN-F-010功能密码为64位等于上界使用预置有效密码登录成功LOGIN-F-011功能密码为65位超过上界阻止提交提示密码长度不符合要求LOGIN-D-001安全使用不存在的账号统一失败提示不暴露账号状态LOGIN-D-002安全有效账号输入错误密码拒绝登录失败次数增加1LOGIN-D-003安全停用账号输入正确密码拒绝登录不创建会话LOGIN-S-001功能连续第4次输入错误密码累计失败次数账号仍可继续尝试LOGIN-S-002安全连续第5次输入错误密码账号进入临时锁定并记录锁定时间LOGIN-S-003安全锁定期间输入正确密码仍然拒绝登录不创建会话LOGIN-S-004功能锁定到期后输入正确密码登录成功失败计数清零LOGIN-I-001功能快速连续点击两次登录按钮只处理一次有效请求只创建一个会话LOGIN-I-002功能请求提交后立即断网显示网络错误不误报登录成功LOGIN-I-003接口username传入数组类型返回约定客户端错误不暴露堆栈LOGIN-SEC-001安全对比多种认证失败响应状态码和文案一致无稳定可利用的时间差LOGIN-SEC-002安全登录前后比较会话标识登录后标识更新旧标识不能获得登录态LOGIN-A-001可用性检查输入框和按钮标签标签含义清楚键盘可以识别控件LOGIN-A-002可用性用户名、密码同时为空文本指出错误字段焦点到达首个错误位置LOGIN-P-001性能200并发用户持续10分钟P95不超过500毫秒错误率不超过0.1%LOGIN-C-001兼容性在三个受支持浏览器执行核心流程流程和提示一致布局无遮挡键盘可操作从类别看其中功能15条、安全7条、接口1条、可用性2条、性能1条、兼容性1条。分类只是便于整理同一个用例往往同时涉及多个质量属性。例如“锁定期间正确密码不能登录”既是状态迁移也是安全控制。五、27条够不够如果问题是“能不能完整覆盖一个生产环境的登录系统”答案是不能。27条只覆盖本文已经明确的账号密码登录范围可以作为功能测试和第一轮回归的基础但不能代表完整认证测试。用例是否足够应该检查测试依据和风险而不是只看数量检查维度当前覆盖情况已确认需求AUTH-001AUTH-010均有对应测试用例输入边界覆盖空值、下界外、下界、上界和上界外条件组合覆盖正常账号、错误密码、不存在账号、停用和锁定状态变化覆盖失败累计、达到阈值、锁定期间和到期恢复系统层次覆盖UI、API、认证服务和端到端链路主要异常覆盖重复提交、断网和非法字段类型如果产品实际支持下面这些能力还需要单独扩展测试验证码、短信登录、MFA及验证码过期、重放和绕过“记住我”、主动退出、会话过期、并发会话和多设备登录找回密码、首次登录改密、密码过期和账号恢复OAuth、单点登录以及第三方认证服务异常手机端、国际化、代理网络和更多浏览器环境认证绕过、权限校验、限速、日志审计等专项安全测试。实际执行时测试人员通常根据需求、接口文档、团队检查表和产品适用的安全或可访问性要求来设计用例不需要背诵某个标准编号。比如本例中的键盘操作、焦点位置和文本错误提示只有在产品要求或团队质量基线中明确后才会成为可验收的测试项。六、风险等级不等于执行优先级风险通常看缺陷发生概率和失败影响执行优先级还要考虑是否属于核心链路、是否适合快速回归、执行成本以及本次改动范围。两者有关但不能简单画等号。以普通内容社区为背景重新评估后这组用例包含高风险7条、中风险8条、低风险12条执行批次分为P0 5条、P1 12条、P2 10条。P0只保留正常登录、错误密码必须被拒绝、达到锁定阈值、锁定期间不能绕过、登录后会话更新这5条核心检查。停用账号和失败响应一致性仍属于高风险但更适合放在专项回归中所以安排为P1。用户名为空的失败影响较低但执行成本很小且经常受页面改动影响也可以进入P1。实际回归时可以先用P0做提交后快速检查再执行P0和P1完成主要功能回归版本发布前或相关模块改动较大时再补充P2边界和低风险场景。如果换成后台管理或金融系统同一条安全用例的风险和优先级都可能上调。七、小结与思考登录测试没有固定的“标准用例数量”。更可靠的做法是先确定产品场景和本次范围再从需求、条件组合、状态变化、系统链路和风险中生成用例并为每条用例写出可判断的结果。本文的27条用例能覆盖当前10项示例需求但不能覆盖短信验证码、MFA、第三方登录、找回密码和完整会话管理。明确这些边界并不是测试不充分而是为了让测试结论有清楚的适用范围。需求增加时用例也应该沿着新的状态、接口和风险继续扩展。本文代码GitHub002-login-test-design

相关新闻

编程语言Switch语句进化:从等值匹配到范围判断与模式匹配

编程语言Switch语句进化:从等值匹配到范围判断与模式匹配

1. 从“点”到“面”:为什么我们需要范围判断的Switch 在编程的日常里, switch...case 语句就像我们工具箱里那把最趁手的螺丝刀,处理离散的、明确的枚举值时,它简洁高效,逻辑清晰。无论是处理用户选择的菜单项&…

2026/10/10 6:09:25 阅读更多 →
Python构建文本质量对比分析工具:从NLP指标到自动化报告

Python构建文本质量对比分析工具:从NLP指标到自动化报告

在实际技术博客写作中,我们很少直接对比两个独立的、非技术性的作品标题,如“让我们一起战斗”和“一剑光寒万丈芒”。这类对比通常出现在内容分析、用户偏好研究或A/B测试的场景中。作为开发者,我们更关心如何构建一个系统化的、可量化的内容…

2026/10/10 6:46:47 阅读更多 →
深入理解Python中的类方法、类实例方法和静态方法

深入理解Python中的类方法、类实例方法和静态方法

在于其中, 属于类的方法, 以及类实例所拥有的方法, 还有静态存在的方法, 是面向对象编程里极为重要的概念。它们各自分别有着不一样的特性, 以及不同的用途, 正确地去使用它们, 能够提升代码的可读性, 以及变得更加灵活。1. 类方法(Class )1.1. 什么是类…

2026/10/10 22:36:04 阅读更多 →

最新新闻

司法拍卖土地数据爬虫:应对反爬、结构突变与双平台适配

司法拍卖土地数据爬虫:应对反爬、结构突变与双平台适配

简介:本资源是一套面向Python初学者与数据采集实践者的司法拍卖信息自动化采集工具,聚焦淘宝、京东两大平台的土地类司法拍卖每日数据抓取需求,适用于潜在竞买人、法律从业者及市场研究人员快速获取标的物名称、位置、起拍价、保证金、拍卖时…

2026/10/11 7:57:06 阅读更多 →
Copilot Code Review接入CI:Balanced模式实战与避坑指南

Copilot Code Review接入CI:Balanced模式实战与避坑指南

上个月我还在一遍一遍地点击同一个按钮:打开 PR、等 Copilot Code Review 在评论区里冒出一串建议、再人工判断哪些要改,哪些只是噪声。直到 GitHub 把这套 Code Review 能力开放成 API,我才终于把它从“网页上的一个功能”变成了“CI 里的一…

2026/10/11 7:57:06 阅读更多 →
Redis 为什么会卡住:fork、大 key、慢命令、AOF fsync 4 个阻塞源逐个排除

Redis 为什么会卡住:fork、大 key、慢命令、AOF fsync 4 个阻塞源逐个排除

我不会起名字322 后端 / 算法 / 数据库 📘 技术栈 | 🧩 力扣 Hot100 | 🐹 Go 项目 | 🟥 Redis | 🐬 MySQL 文章目录Redis 为什么会卡住:fork、大 key、慢命令…

2026/10/11 7:57:06 阅读更多 →
用 Web VR 引擎搭建 3D 虚拟展厅:从素材上云到多端实时渲染的完整数据链路

用 Web VR 引擎搭建 3D 虚拟展厅:从素材上云到多端实时渲染的完整数据链路

2026年用 Web VR 引擎搭建元宇宙 3D 虚拟展厅:从素材上云到多端实时渲染的完整数据链路 2026年,3D 虚拟展厅与 VR 全景线上展会已从概念演示进入可规模化交付的工程阶段。本文面向开发者,围绕 Web VR 引擎这一技术底座,拆解一条完…

2026/10/11 7:57:06 阅读更多 →
MySQL 的脏页什么时候写回:Buffer Pool、redo log 与 4 个刷脏时机

MySQL 的脏页什么时候写回:Buffer Pool、redo log 与 4 个刷脏时机

我不会起名字322 后端 / 算法 / 数据库 📘 技术栈 | 🧩 力扣 Hot100 | 🐹 Go 项目 | 🟥 Redis | 🐬 MySQL 文章目录MySQL 的脏页什么时候写回:Buffer Pool、…

2026/10/11 7:57:06 阅读更多 →
宁夏职业院校学工信息管理系统怎么选?本地需求特点要注意什么?

宁夏职业院校学工信息管理系统怎么选?本地需求特点要注意什么?

✅作者简介:合肥自友科技 📌核心产品:智慧校园平台(包括教工管理、学工管理、教务管理、考务管理、后勤管理、德育管理、资产管理、公寓管理、实习管理、就业管理、离校管理、科研平台、档案管理、学生平台等26个子平台) 。公司所有人员均有多…

2026/10/11 7:56:05 阅读更多 →

日新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 5:23:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 10:38:42 阅读更多 →