先把问题拆成两层:组件本身是否稳定,以及它依赖的页面上下文是否一致。缺少完整数据或后台权限时,仍然可以做的动作是固定输入、逐页复现、记录差异,并把差异归到组件参数、容器约束或数据来源上;但这样只能说明差异出现在哪一层,不能直接推出哪一层就是根因。
同一组件在不同页面表现不同,常见有两类原因。第一类是组件接收到的数据不同,比如列表页传入十条记录,详情页只传入一条;第二类是组件所处的容器不同,比如父级宽度、栅格列数、字体继承或层叠顺序不同。两类原因的验收样例方向完全相反。
如果是数据不同,样例要覆盖空数据、一条、多条、超长文本四种输入,并保持容器不变。如果是容器不同,样例要固定同一组数据,只改变外层宽度和栅格位置,例如同一张卡片分别放进单列区、双列区和侧栏区。判断依据很简单:把同一页的数据复制到另一页的容器里,如果表现恢复正常,问题更可能在容器;如果仍然异常,问题更可能在数据或组件内部状态。
没有后台配置权限、拿不到完整埋点或接口日志时,仍可按下面的顺序做一轮最小验收:
这个动作的产出是一份差异表,而不是结论。它的作用是缩小下一步排查范围:如果改容器就能恢复,下一步优先检查布局和断点;如果改数据才恢复,下一步优先检查数据映射和默认值。
条件一:组件在正常页面和异常页面使用同一份数据源。此时样例应以容器为变量,每个样例只改一个容器属性,并保留一份基准样例作为对照。这样做的代价是样例数量偏多,但能避免把数据问题误判成布局问题。
条件二:两个页面数据来源不同,且无法统一。此时样例应以数据形态为变量,明确写出空、单条、多条、超长四档,容器固定为最窄的那个。这样做的代价是无法覆盖宽容器下的表现,但能先确认组件对数据边界是否健壮。
两种条件都成立时,不要一次性组合所有变量。先固定数据跑容器,再固定容器跑数据,最后只对已经出现异常的交叉点补一条组合样例。
假设某商洛建站项目的卡片组件在列表页显示正常,在详情页出现文字溢出。没有后台权限,只能在前端观察。
第一步,把列表页的卡片数据条数改成与详情页一致,溢出依旧,说明不是条数问题。第二步,把详情页卡片的父容器宽度临时改成与列表页相同,溢出消失,说明差异与容器宽度有关。第三步,回到原宽度,只把卡片内的长标题截短,溢出也消失,说明容器宽度和文本长度共同触发。
据此构造的验收样例应包含:同一容器宽度下短文本与长文本各一条,同一长文本下窄容器与宽容器各一条。这个例子的结论只适用于该假设场景,不能据此推断所有卡片组件都存在同样问题。
调整后某个页面不再溢出,不等于组件已经稳定。可能只是当前数据恰好没触发边界,也可能是容器宽度刚好越过临界值。同样,某个页面请求量或抓取量下降,也不能单独证明是这次改动造成的,还可能来自缓存、入口变化或抓取调度。
要减少误判,验收样例里应保留一条反向用例:把之前触发异常的输入重新放回去,确认异常是否真的消失,而不是被隐藏。只有正向和反向用例都通过,才能把这一项标记为已处理;否则应继续保留为待观察项,并在下一步排查中优先检查尚未固定的那个变量。