契约、无障碍、性能与变异测试

契约、无障碍、性能与变异测试

这篇笔记还在编辑中,内容可能会继续补充、调整或重写。

测试应对应风险

单元、组件和端到端描述的是测试范围,不能自动覆盖所有工程风险。接口契约、无障碍、性能预算和测试本身的有效性,需要专项方法补充。

契约测试

契约测试验证消费者与提供者对请求、响应和错误结构的共同理解。它可以基于 OpenAPI、GraphQL Schema、IDL 或消费者契约,目标是在部署前发现字段、类型、状态码和兼容性漂移。

前端 Mock 应由同一契约生成或校验。手写 Mock 即使让所有 UI 测试通过,也可能与生产服务完全不同。

无障碍测试

自动化规则可以检查语义、名称、ARIA 和部分对比度问题;组件测试可以覆盖键盘和焦点;端到端测试可以验证完整任务。自动化不能替代读屏和人工理解测试。

性能测试

性能测试应固定页面版本、设备、网络和缓存条件。CI 中适合阻止明显的资源体积、请求数量和实验室指标回退;真实用户分布则由 RUM 持续验证。

避免使用波动很小的绝对阈值让流水线随机失败。先记录分布和方差,再设置具有用户意义的预算。

变异测试

覆盖率只能说明代码被执行过。变异测试主动修改条件、返回值或运算符;如果测试仍然通过,说明断言可能没有保护相应行为。它适合高价值的纯业务规则,不必对所有 UI 和生成代码执行。

Flaky Test 治理

不稳定测试需要记录失败率、首次出现版本和负责人。隔离可以暂时恢复主线信号,但必须设置修复期限。常见根因包括共享数据、时间、动画、网络、固定等待、环境资源和并发污染。

实践任务

  1. 修改 API Schema,确认契约校验在前后端部署前失败。
  2. 为一个模态框编写键盘、焦点和 axe 测试,再进行人工读屏验证。
  3. 为关键路由建立体积与实验室性能预算。
  4. 对状态转换函数运行变异测试,补足未被杀死的高价值变异。
  5. 人为制造一个依赖执行顺序的 Flaky Test,并完成根因修复。

验收标准

  • Mock 与真实 API 共享可验证契约
  • 无障碍测试同时包含自动化和人工步骤
  • 性能预算记录测量条件与合理波动范围
  • 关键业务规则的断言能够杀死主要变异
  • Flaky Test 有隔离、归责、修复和退出流程