先确认一个前提:同一个组件在A页面正常、在B页面异常,通常不是组件本身“时好时坏”,而是两个页面给它的上下文不同。构造验收样例的正确做法,是把差异变量拆成可复现的最小页面组合,而不是在出问题的页面上反复刷新。下面给出可操作的拆法。
同一个组件在不同页面的表现差异,最常见的两类解释是:
这两类问题的验收样例完全不同。前者要固定数据、只切换模板;后者要固定模板、只切换数据。混在一起测,得到的结论无法归因。
具体动作:新建两个仅用于验收的页面,都只放这一个组件,其余内容保持最小化。页面甲使用与正常页面相同的模板,页面乙使用与异常页面相同的模板,两者传入同一份数据。然后交换:页面甲换成异常页面的数据,页面乙换成正常页面的数据。
结果如何影响下一步:
这个交换步骤是整篇方法的核心,因为它把“感觉上不一样”变成了可观察的对照结果。
样例不是截图,而是能被别人重放的描述。每条样例至少包含:
假设一个短例子:某列表组件在分类页显示三列,在单篇页只显示一列。前置条件写成“分类模板 + 十条数据”和“单篇模板 + 十条数据”,操作是分别打开两个页面并滚动到底部,判定依据是“每行卡片数量与容器宽度是否匹配”。这样写,接手的人不用猜。
如果主题升级、组件版本更新或页面模板结构调整,旧的验收基线不再成立。此时应先固定新基线,再重跑上面的交换测试,而不是直接沿用旧结论。判断是否需要重定基线的信号包括:组件输出结构变化、模板调用方式变化、数据来源接口变化。三者任一变化,原样例的判定依据就可能失效。
另外要注意,请求量或抓取量归零不能单独证明组件处理正确。它也可能是缓存命中、页面未被访问或统计口径变化造成的。验收要看页面上的实际输出,而不是看某个计数。
完成一轮交换测试后,把确认的差异变量写进检查项,例如“该组件在单篇模板下必须显式传入容器宽度”“空数据时必须输出占位而不是空白”。这些检查项就是后续改版的回归依据。下次同一组件再出问题,先跑这些项,能快速判断是新问题还是旧问题复发。
如果两个页面确实使用了同一模板和同一数据,表现仍不同,那就要把范围收窄到加载顺序和状态保持上,此时前面的对照页面仍然是有效的排查起点,只是需要增加一条“同一会话内先后打开两个页面”的样例来观察状态是否被污染。