第三章 UI测试用例设计:基于需求的测试用例、边界值分析、等价类划分、场景法设计
好,咱们直接进入正题。UI测试用例怎么设计?很多新人拿到需求文档就懵了,不知道从哪下手。我刚开始带项目时也踩过这个坑——对着屏幕发呆,脑子里全是「这玩意儿怎么测?」。
其实说白了,测试用例设计就四个核心方法:基于需求、边界值、等价类、场景法。今天我把它们揉碎了讲,结合座舱系统的实际案例,你听完就能上手。
3.1 基于需求的测试用例
这是最基础的方法。需求文档里写了什么,你就测什么。但注意,不是让你照着念一遍。
我习惯把需求拆成三个维度:
- 功能需求:按钮能不能点?页面跳转对不对?
- 交互需求:点击后有没有反馈?动画时长是否合理?
- 异常需求:网络断了怎么办?数据加载失败怎么显示?
举个例子,座舱系统的「空调温度调节」功能:
| 需求条目 | 测试用例 |
|---|---|
| 用户可通过滑动条调节温度(16℃-30℃) | 1. 滑动条是否能拖动? 2. 拖动时温度数值是否实时更新? 3. 拖动到16℃和30℃时是否卡住? |
| 点击「自动」按钮恢复默认温度22℃ | 1. 点击后滑动条是否回到22℃? 2. 温度显示是否变为22℃? 3. 再次拖动是否正常? |
3.2 边界值分析
边界值分析,说白了就是找「临界点」。座舱系统里到处都是边界——温度、音量、亮度、车速……
为什么边界值容易出问题?因为开发写代码时,if (value >= 16 && value <= 30) 这种判断,最容易在边界上写错。比如写成 value > 16,那16℃就进不来了。
我总结的边界值选取规则:
- 最小值:比如温度16℃
- 最大值:比如温度30℃
- 略小于最小值:15.9℃
- 略大于最大值:30.1℃
- 中间值:23℃(用于对比)
座舱案例:音量调节(0-100)
测试用例:0、1、99、100、-1、101
我曾经遇到过:音量调到0时,系统静音了,但UI上还显示「1」。这就是边界值没测到位。
你想想看,如果只测「正常值」,这种bug根本发现不了。边界值分析就是专门抓这种「差一点」的问题。
3.3 等价类划分
等价类划分,核心思想是「把无限变成有限」。座舱系统的输入千变万化,你不可能每个值都测一遍。那就把输入分成几个「等价类」,每个类里挑一个代表测就行。
我习惯分三类:
- 有效等价类:符合需求的输入
- 无效等价类:不符合需求的输入
- 边界等价类:临界值附近的输入
举个例子,导航目的地输入框:
| 输入类型 | 等价类 | 测试数据 |
|---|---|---|
| 有效 | 中文地址、英文地址、数字+字母 | "北京市朝阳区"、"123 Main St"、"A1出口" |
| 无效 | 空字符串、特殊字符、超长字符串 | ""、"@#$%"、"a"重复1000次 |
| 边界 | 1个字符、最大字符数、最大字符数+1 | "北"、50个字符、51个字符 |
3.4 场景法设计
场景法,说白了就是「模拟用户真实操作」。座舱系统不是单个功能堆起来的,用户是一连串操作。比如:
- 上车 → 启动 → 导航 → 听音乐 → 调空调 → 停车
- 倒车 → 影像显示 → 雷达报警 → 切换视角
- 语音唤醒 → 说「导航到公司」→ 确认路线 → 开始导航
我设计场景法时,会先画一个用户操作流:
用户操作流示例:导航场景
1. 用户点击「导航」图标
2. 输入目的地「北京南站」
3. 系统显示路线列表
4. 用户选择「推荐路线」
5. 点击「开始导航」
6. 进入导航界面
7. 行驶过程中,用户点击「退出导航」
8. 返回主界面
然后针对每个步骤,设计测试用例:
- 步骤1:图标是否可点击?点击后是否跳转?
- 步骤2:输入框是否支持中文?键盘弹出是否遮挡?
- 步骤3:路线列表是否加载?没有网络时怎么显示?
- 步骤4:点击后是否有反馈?路线是否高亮?
- 步骤5:开始导航后,语音播报是否正常?
- 步骤6:导航界面是否显示当前道路?地图是否实时更新?
- 步骤7:退出导航后,是否回到主界面?导航记录是否保存?
3.5 四种方法的组合使用
实际项目中,这四种方法不是孤立的。我一般这样组合:
- 先用场景法:画出用户操作流,确定「测什么」
- 再用基于需求:对照需求文档,补充遗漏的功能点
- 然后等价类划分:把每个输入参数分类,减少重复用例
- 最后边界值分析:针对每个参数,补充边界测试
举个例子,座舱系统的「语音控制空调」功能:
| 方法 | 测试用例 |
|---|---|
| 场景法 | 用户说「调低温度」→ 系统响应 → 温度变化 → 用户再说「再低一点」→ 系统继续响应 |
| 基于需求 | 需求说支持「调高/调低/设定到XX度」,那就每个指令都测一遍 |
| 等价类 | 语音指令分为:标准指令(「调高温度」)、模糊指令(「热死了」)、无效指令(「播放音乐」) |
| 边界值 | 温度从16℃调到30℃,每个边界点都测:16→17、29→30、30→29 |
这样一套组合拳下来,测试覆盖率基本能到95%以上。剩下的5%,靠探索性测试和用户反馈来补。
总结一下:
- 基于需求:保证「该有的都有」
- 边界值分析:抓住「临界点」
- 等价类划分:减少「重复劳动」
- 场景法:模拟「真实操作」
四种方法配合使用,才能写出高质量的UI测试用例。别偷懒,每个方法都走一遍,你会发现bug率直线下降。
好,这一章就到这里。下一章我们讲「测试执行与缺陷管理」,到时候我会分享一些我在项目里踩过的坑,以及怎么高效地提bug。咱们下章见。