契约、无障碍、性能与变异测试
契约、无障碍、性能与变异测试
这篇笔记还在编辑中,内容可能会继续补充、调整或重写。
测试应对应风险
单元、组件和端到端描述的是测试范围,不能自动覆盖所有工程风险。接口契约、无障碍、性能预算和测试本身的有效性,需要专项方法补充。
契约测试
契约测试验证消费者与提供者对请求、响应和错误结构的共同理解。它可以基于 OpenAPI、GraphQL Schema、IDL 或消费者契约,目标是在部署前发现字段、类型、状态码和兼容性漂移。
前端 Mock 应由同一契约生成或校验。手写 Mock 即使让所有 UI 测试通过,也可能与生产服务完全不同。
无障碍测试
自动化规则可以检查语义、名称、ARIA 和部分对比度问题;组件测试可以覆盖键盘和焦点;端到端测试可以验证完整任务。自动化不能替代读屏和人工理解测试。
性能测试
性能测试应固定页面版本、设备、网络和缓存条件。CI 中适合阻止明显的资源体积、请求数量和实验室指标回退;真实用户分布则由 RUM 持续验证。
避免使用波动很小的绝对阈值让流水线随机失败。先记录分布和方差,再设置具有用户意义的预算。
变异测试
覆盖率只能说明代码被执行过。变异测试主动修改条件、返回值或运算符;如果测试仍然通过,说明断言可能没有保护相应行为。它适合高价值的纯业务规则,不必对所有 UI 和生成代码执行。
Flaky Test 治理
不稳定测试需要记录失败率、首次出现版本和负责人。隔离可以暂时恢复主线信号,但必须设置修复期限。常见根因包括共享数据、时间、动画、网络、固定等待、环境资源和并发污染。
实践任务
- 修改 API Schema,确认契约校验在前后端部署前失败。
- 为一个模态框编写键盘、焦点和 axe 测试,再进行人工读屏验证。
- 为关键路由建立体积与实验室性能预算。
- 对状态转换函数运行变异测试,补足未被杀死的高价值变异。
- 人为制造一个依赖执行顺序的 Flaky Test,并完成根因修复。
验收标准
- Mock 与真实 API 共享可验证契约
- 无障碍测试同时包含自动化和人工步骤
- 性能预算记录测量条件与合理波动范围
- 关键业务规则的断言能够杀死主要变异
- Flaky Test 有隔离、归责、修复和退出流程