一个每页显示20条记录的列表,用5条数据测试时可能完全正常,换成20条或21条,却突然多出空白页,或者漏掉最后一条。
这些数量看起来只差一点,程序执行的逻辑却可能已经发生变化。边界值分析关注的,就是这类规则切换的位置。
1. 先把分页规则说完整
设计测试之前,要先知道什么结果算正确。
假设有一个简单的分页列表,规则如下:记录按唯一编号升序排列,每页最多显示20条,超过一页的部分继续放到后面的页面。没有记录时显示“暂无记录”,不提供可点击的翻页入口。为了先检查分页逻辑,测试期间不新增、不删除记录。
按这个约定,19条记录只需要一页,20条仍然只需要一页,21条则需要两页,分别显示20条和1条。40条记录恰好占满两页,不应该再出现第三个空白页。
“每页最多20条”本身还不够完整。它没有单独说明空列表怎样显示,也没有说明最后一页是否允许为空。把这些约定补齐,测试才有明确的判断依据,而不只是观察页面有没有报错。
2. 围着规则切换的位置选数据
边界值分析是一种黑盒测试技术。它从需求划分出的有序范围出发,重点检查边界及其附近的取值,寻找上限、下限或比较条件处理错误的问题。
在分页例子中,可以先围绕20条这个位置选择三组数据:
- 19条:还没有占满第一页。
- 20条:恰好占满第一页,但不需要第二页。
- 21条:超过第一页容量,必须进入第二页。
这三组分别检查“接近上限”“刚好达到上限”和“越过上限”的情况。只测19条和21条,可能漏掉仅在整页时出现的问题。
例如,把页数算成“总条数除以20取整数,再加1”,19条会得到1页,21条会得到2页,看起来都对。但20条会被算成2页,40条会被算成3页,多出来的都是空白页。
因此,第一组测试之后,还应补充0条和1条,检查空列表与第一条记录;再用39、40、41条检查第二次分页切换。这里列的是围绕这个例子选出的测试点,不代表三个相邻数字就能覆盖整个功能。
边界也不一定是“允许”和“不允许”的分界。20条和21条都是合法数据,只是它们对应的页数和最后一页内容不同。
3. 页面打开了,还要核对数据有没有读对
选好输入后,需要把预期结果写成可以检查的条件。
以21条记录为例,准备编号1到21的数据。第一页应当显示1到20,第二页应当只显示21。检查时,不能只看“出现了第二页”,还要看每一页实际包含哪些记录。
如果第二页错误地重复显示编号20,页面数量可能仍然正确,数据却已经出错。只检查两页一共显示21条,也不一定能发现问题,因为重复一条、漏掉一条,总数仍然可能是21。
比较稳妥的做法,是逐页核对数量和编号,再把各页结果按顺序接起来,与原始列表比较。这样可以同时检查有没有丢失、重复或顺序变化。
写成自动化测试时,可以按“准备数据、执行操作、核对结果”组织,让输入、操作和预期保持清楚。测试名称也可以直接说清场景,例如“20条记录时不产生第二页”。以后这个用例失败,看到名称就能知道哪条规则出了问题。
4. 修复后,先确认原问题,再检查其他影响
假设测试发现20条记录会多出一个空白页。修改实现后,第一步应当重新运行这组原本失败的数据,确认同样的操作现在得到正确结果。
这一步属于确认测试,关注的是原缺陷是否修好。接着还要检查19条、21条以及其他可能受改动影响的情况,这属于回归测试,关注改动有没有破坏原本正常的行为。二者目的不同,不能只因为原失败用例通过,就认为相关功能都已经验证完毕。
回归范围可以沿着这次改动继续考虑。如果只改了页数计算,先检查空列表、整页和非整页;如果还改了取数据的位置,就需要关注每页内容是否衔接正确。列表带有筛选功能时,还要检查筛选后只剩一页,当前页却仍停在第二页的情况。
测试所在的层次也要说清楚。直接调用分页函数,可以检查它返回的结果;页面上的“下一页”按钮是否使用了正确参数,还需要通过界面操作验证。函数测试通过,不能代替这一步。
最后,把20条记录触发问题的输入、正确结果和测试保留下来。以后无论是修改页大小,还是重写分页组件,只要又产生了多余的空白页,这个用例就应该重新失败,而不是等到使用时再次碰到它。
