2. 注册表单字段组合覆盖测试设计

注册表单字段组合覆盖测试设计 学习卡片

为什么注册表单不能只做单字段测试

注册表单包含用户名、邮箱、手机号、密码、确认密码五个字段。若每个字段取 3 个典型值,全组合为 3⁵ = 243 条用例,显然不可执行。但只测单字段又漏掉字段间的交互缺陷,例如“邮箱格式正确但手机号为空时,后端是否仍返回成功”。成对组合法(Pairwise)的核心假设是:大多数缺陷由两个字段的交互触发,因此只需保证任意两个字段的取值组合至少出现一次,即可把用例数压到个位数,同时保留交互覆盖能力。

字段取值表与约束

先为每个字段定义等价类取值,并标注字段间的业务约束。约束会直接影响组合生成,必须在建模阶段明确。

字段取值编号取值说明类型
用户名 UU1 / U2 / U3合法6位 / 已存在 / 空有效 / 无效 / 无效
邮箱 EE1 / E2 / E3合法格式 / 缺@ / 空有效 / 无效 / 无效
手机号 MM1 / M2 / M311位合法 / 10位 / 空有效 / 无效 / 无效
密码 PP1 / P2 / P38位含字母数字 / 6位纯数字 / 空有效 / 无效 / 无效
确认密码 CC1 / C2 / C3与P一致 / 与P不一致 / 空有效 / 无效 / 无效
约束:C 的取值依赖 P。当 P 为空或无效时,C1“与P一致”在业务上不可判定,应避免生成 P 无效而 C 有效的组合,否则用例预期结果无法定义。

成对组合生成过程

成对组合的目标是覆盖所有字段两两之间的取值对。以 U×E 为例,需覆盖 (U1,E1)、(U1,E2)、(U1,E3)、(U2,E1)、(U2,E2)、(U2,E3)、(U3,E1)、(U3,E2)、(U3,E3) 共 9 对。五个字段共有 C(5,2)=10 组字段对,每组 9 个取值对,总计 90 个待覆盖对。下面给出一种满足全部成对覆盖的精简用例集(已剔除违反约束的组合):

用例用户名邮箱手机号密码确认密码预期结果
TC01U1E1M1P1C1注册成功
TC02U1E2M2P2C2邮箱格式错误
TC03U1E3M3P3C3邮箱为空提示
TC04U2E1M2P3C3用户名已存在
TC05U2E2M3P1C2邮箱格式错误
TC06U2E3M1P2C3邮箱为空提示
TC07U3E1M3P2C2用户名为空提示
TC08U3E2M1P3C3用户名为空提示
TC09U3E3M2P1C1用户名为空提示

9 条用例覆盖了全部 90 个字段对,相比 243 条全组合减少约 96%。注意 TC09 中 P1 有效且 C1 与之一致,但 U3 为空,预期仍为失败——这验证了“单字段失败不应被其他字段的有效值掩盖”。

注册表单成对组合覆盖矩阵(10 组字段对 × 9 个取值对) U×E U×M U×P U×C E×M E×P E×C M×P M×C P×C 1 2 3 4 5 6 7 8 9 U1E1U1E2U1E3 U2E1U2E2U2E3 U3E1U3E2U3E3 U1M1U1M2U1M3 U2M1U2M2U2M3 U3M1U3M2U3M3 U1P1U1P2U1P3 U2P1U2P2U2P3 U3P1U3P2U3P3 U1C1U1C2U1C3 U2C1U2C2U2C3 U3C1U3C2U3C3 E1M1E1M2E1M3 E2M1E2M2E2M3 E3M1E3M2E3M3 E1P1E1P2E1P3 E2P1E2P2E2P3 E3P1E3P2E3P3 E1C1E1C2E1C3 E2C1E2C2E2C3 E3C1E3C2E3C3 M1P1M1P2M1P3 M2P1M2P2M2P3 M3P1M3P2M3P3 M1C1M1C2M1C3 M2C1M2C2M2C3 M3C1M3C2M3C3 P1C1P1C2P1C3 P2C1P2C2P2C3 P3C1P3C2P3C3 每个格子代表一个字段取值对;9 条用例需覆盖全部 90 个格子 P×C 行中 P3C1 因约束不可判定,实际覆盖 89 个有效对

用例执行与结果判读

执行时按 TC01→TC09 顺序提交表单,重点观察三类信号:

  • 前端拦截:邮箱缺 @、手机号 10 位、密码 6 位纯数字应在提交前被前端校验拦截,不产生网络请求。
  • 后端校验:用户名已存在(U2)应由后端返回明确错误码,而非前端提示。
  • 字段遮蔽:当多个字段同时无效时,系统应逐字段返回错误,而不是只报第一个。例如 TC05 中 U2 和 E2 均无效,预期应同时提示“用户名已存在”和“邮箱格式错误”。
若某条用例实际结果与预期不符,先检查该用例覆盖了哪些字段对,再回溯对应字段的等价类划分是否遗漏了边界。成对组合的失败往往指向两个字段间的约束逻辑缺陷,而非单字段校验问题。

覆盖验证清单

检查项通过标准
字段对覆盖10 组字段对 × 9 个取值对 = 90 个,实际覆盖 ≥ 89(P3C1 除外)
有效路径至少 1 条全有效用例(TC01)返回注册成功
单字段失败每个字段至少 1 次作为唯一失败原因被验证
多字段失败至少 1 条用例包含 2 个以上无效字段,验证错误提示不互相遮蔽
约束遵守不存在 P 无效而 C 判定为“一致”的用例