第三章 UI测试用例设计:基于需求的测试用例、边界值分析、等价类划分、场景法设计

好,咱们直接进入正题。UI测试用例怎么设计?很多新人拿到需求文档就懵了,不知道从哪下手。我刚开始带项目时也踩过这个坑——对着屏幕发呆,脑子里全是「这玩意儿怎么测?」。

其实说白了,测试用例设计就四个核心方法:基于需求、边界值、等价类、场景法。今天我把它们揉碎了讲,结合座舱系统的实际案例,你听完就能上手。

3.1 基于需求的测试用例

这是最基础的方法。需求文档里写了什么,你就测什么。但注意,不是让你照着念一遍。

我习惯把需求拆成三个维度:

  • 功能需求:按钮能不能点?页面跳转对不对?
  • 交互需求:点击后有没有反馈?动画时长是否合理?
  • 异常需求:网络断了怎么办?数据加载失败怎么显示?

举个例子,座舱系统的「空调温度调节」功能:

需求条目 测试用例
用户可通过滑动条调节温度(16℃-30℃) 1. 滑动条是否能拖动?
2. 拖动时温度数值是否实时更新?
3. 拖动到16℃和30℃时是否卡住?
点击「自动」按钮恢复默认温度22℃ 1. 点击后滑动条是否回到22℃?
2. 温度显示是否变为22℃?
3. 再次拖动是否正常?
我的小习惯:每写一条用例,我都会问自己「这个需求真的测透了吗?」。比如「自动」按钮,除了测功能,我还会测它被连续点击10次会不会卡死——嗯,真遇到过这种bug。

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 四种方法的组合使用

实际项目中,这四种方法不是孤立的。我一般这样组合:

  1. 先用场景法:画出用户操作流,确定「测什么」
  2. 再用基于需求:对照需求文档,补充遗漏的功能点
  3. 然后等价类划分:把每个输入参数分类,减少重复用例
  4. 最后边界值分析:针对每个参数,补充边界测试

举个例子,座舱系统的「语音控制空调」功能:

方法 测试用例
场景法 用户说「调低温度」→ 系统响应 → 温度变化 → 用户再说「再低一点」→ 系统继续响应
基于需求 需求说支持「调高/调低/设定到XX度」,那就每个指令都测一遍
等价类 语音指令分为:标准指令(「调高温度」)、模糊指令(「热死了」)、无效指令(「播放音乐」)
边界值 温度从16℃调到30℃,每个边界点都测:16→17、29→30、30→29

这样一套组合拳下来,测试覆盖率基本能到95%以上。剩下的5%,靠探索性测试和用户反馈来补。

总结一下

  • 基于需求:保证「该有的都有」
  • 边界值分析:抓住「临界点」
  • 等价类划分:减少「重复劳动」
  • 场景法:模拟「真实操作」

四种方法配合使用,才能写出高质量的UI测试用例。别偷懒,每个方法都走一遍,你会发现bug率直线下降。

好,这一章就到这里。下一章我们讲「测试执行与缺陷管理」,到时候我会分享一些我在项目里踩过的坑,以及怎么高效地提bug。咱们下章见。