用途
observability-driven-testing 是一套面向测试设计的方法论技能,目标是把生产遥测数据当作“输入”来设计新测试。它适用于已经在生产环境中使用 APM、分布式追踪或错误跟踪工具的团队,希望让测试覆盖对齐真实流量与真实故障,而不是只覆盖理论边界场景。
主要能力
1. 以 trace 作为测试证据 不只断言 HTTP 状态码,而是断言 trace 结构、span 属性与耗时(哪些服务被调用、是否出现 ERROR span、根 span 延迟、数据库操作等)。文档给出三种模式:在测试基础设施中集成 OpenTelemetry(为测试运行器打点,通过 service.name、test.suite、test.run_id 资源属性与应用 trace 关联);基于 trace 的断言;跨服务的分布式 trace 校验(assertTraceStructure 辅助函数)。
文档明确指出:语义约定包 @opentelemetry/semantic-conventions 需固定到精确版本(示例为 1.41.1),不要用 caret;因为 trace 断言以字符串引用属性名,属性名会随版本漂移导致断言静默失效。并提示不要引入新的 OpenTracing 兼容层。
2. 日志与错误驱动的测试设计 分析生产错误日志找出测试缺口:从错误跟踪器导出近 30 天、计数大于 5 的错误,按错误消息指纹分组;逐一判断是否已有测试能捕获,并据错误特征建议测试层级(TypeError/空引用 → 单元测试;超时/连接错误 → 带故障注入的集成测试;UI 渲染错误 → E2E 测试;数据不一致 → 契约测试或数据库测试)。
3. 遥测驱动的测试优先级排序 用 Gap Score 公式评估端点:Gap Score = (error_rate × requests_per_day) / max(test_count, 1)。文档给出分级标签(CRITICAL ≥ 50,HIGH 12–49,OK < 12)与示例矩阵,并要求标签必须由公式和阈值推导,不可手工标注。还介绍了热路径分析、以 exemplar 打通“指标 → trace → 测试”链路,以及对零埋点可观测性工具(eBPF 类)与 OTel Weaver 的说明。
4. 生产错误到测试的流水线 五步闭环:错误检测 → 复现(拉取 trace、定位请求参数与状态)→ 编写测试(选对层级、修复前必须先失败、在测试名或注释中记录来源错误)→ 修复并部署 → 验证消除(部署后监控同一错误计数是否归零,若复现则从第二步重来)。文档给出团队反馈机制:每周 30 分钟错误评审(取频次最高的 10 个新错误,逐个分配负责人、创建测试或标记为已知/可接受)、以及事故收尾门禁(每个复盘必须回答“什么测试能预防它”)。
5. 诊断工作流 包括端到端追踪失败请求(获取 trace ID、在 APM 中打开、遍历 span 树、按 trace ID 关联日志、定位根因),以及把测试失败与生产遥测关联:测试失败时查生产错误近 7 天是否有匹配消息、同 HTTP 路由是否有 ERROR 状态 trace,以区分“确认的生产影响”与“仅测试问题”。
使用方式
文档采用“情境 → 去处”的快速路由表,并在开头提示先检查 .agents/qa-project-context.md 作为上下文。它给出一组发现性问题,用于了解现有可观测性栈(Datadog、New Relic、Honeycomb、Jaeger、Grafana Tempo 等)、应用是否已埋 OpenTelemetry、日志基础设施(ELK、Loki、CloudWatch、Datadog Logs)、trace 采样率(概率采样会随机丢弃测试断言的 trace,需对测试流量强制采样)、错误跟踪工具与测试基础设施是否具备发出遥测的能力。
适用场景
适用于已有生产 APM/追踪与错误跟踪、希望把线上故障系统性转化为测试的 QA/测试工程团队;需要跨服务 trace 校验的集成与 E2E 场景;需要对测试投入做数据化优先级排序的场景。
限制与注意事项
- 未被埋点的服务在 trace 中不可见,无法通过 trace 测试。
- 概率采样会随机丢弃测试所断言的 trace,必须对测试流量强制采样。
- 计算错误率到覆盖率矩阵需要 test-to-code 覆盖映射。
- Tracetest 开源项目最后一个公开版本为 v1.7.1(2024 年 10 月),近期活跃度低,采用前需评估维护情况;Tracetest Cloud 已于 2024 年 10 月停止服务,不应配置。
- OTel profiling 信号自 2026-03-26 进入公开 alpha,目标 Q3 2026 GA,应视为尚未生产就绪。
- 该技能的具体安装命令、运行环境要求与许可证未在资料中提供。