Files
xiaozhi-esp32-server/docs/unified-fastapi-platform/quality-gates.md
T

5.2 KiB
Raw Blame History

质量门禁

1. 原则

自动测试负责证明“实现符合可观察的现有行为”;真实测试负责证明“设备、供应商和生产网络确实 按预期工作”。两类证据不得互相替代。

2. 测试层次

层次 目标 典型内容 运行时机
静态 快速发现格式、类型、依赖问题 Ruff、Mypy、前端 lint/type、配置校验 每次提交
单元 验证纯逻辑与状态转换 Token、协议解析、队列、配置版本、Provider DTO 每次提交
特征/契约 冻结现有可观察行为 旧服务黄金报文、API envelope、设备帧、Provider 请求 每个 PR
隔离集成 验证真实本地依赖 MySQL、Redis、文件、jobs、Pub/Sub、事务 每个相关 PR
模拟 E2E 验证用户和设备流程 manager-web、虚拟设备、Fake Provider、统一 gateway 每个里程碑
差分 比较旧/新实现 REST、OTA、WS 会话和副作用 M1 起持续运行
非功能 容量和恢复 多连接、背压、断线、摘流、资源泄漏、安全 M6/M7
真实环境 外部事实 ESP32、云 Provider、MQTT/RAGFlow、目标部署 M8

3. CI 分层

Tier A:快速门禁

目标是在常规 PR 中快速反馈,建议控制在 10 分钟内:

  • FastAPI Ruff、Mypy、unit/contract pytest。
  • manager-web i18n、unit、snapshot。
  • xiaozhi-server/迁移代码语法与导入检查。
  • 路由、消费者和生成文档一致性。
  • Secret 扫描和部署配置静态检查。

从 P01 建立覆盖率基线后,变更行覆盖率不得低于 85%,协议解析和会话状态机的分支覆盖率 不得低于 90%,全局覆盖率不得下降。覆盖率用于发现遗漏,不允许为了数字制造无行为价值的测试。

Tier BPR 集成门禁

  • 隔离 MySQL/Redis。
  • manager-web 生产构建及浏览器关键路径。
  • 虚拟设备完整对话流程。
  • Fake Provider 覆盖成功、超时、断流、取消和错误映射。
  • API/realtime/jobs 镜像构建与 Compose readiness。
  • 修改范围对应的旧/新差分。

Tier C:里程碑门禁

  • 全量旧/新差分。
  • 多 realtime worker 配置广播。
  • 并发连接和 60 分钟模拟 soak。
  • 优雅摘流、进程终止、Redis/MySQL 短暂故障恢复。
  • 依赖漏洞、鉴权边界和恶意输入测试。
  • 支持架构的镜像构建或至少可重复的构建证明。

Tier C 不在每个小 PR 重复运行,以节约资源;相关核心代码变化或阶段收口时必须运行。

性能采用相同 runner 上的新旧实现相对比较。初始自动门槛为:

  • Fake Provider 下业务错误率为 0。
  • WebSocket 握手和控制消息 p95 回退不超过 15%。
  • 可完成会话吞吐回退不超过 10%。
  • 每个 realtime PR 运行 20 个虚拟连接、5 分钟;RC 运行 100 个虚拟连接、60 分钟。
  • 测试结束后 RSS、线程、async task、文件描述符和临时文件不得持续线性增长。

这些指标只约束模拟回归,不代表真机容量结论;如固定测试机不足,PR 必须记录实际档位,不能 静默降低门槛。

4. 必须建立的协议场景

虚拟设备测试至少覆盖:

  1. OTA 获取 WebSocket/MQTT 信息和未绑定激活码。
  2. WebSocket header 与 query 参数两种握手。
  3. hello、listen、abort、ping、iot、mcp、server 控制消息。
  4. Opus 音频输入、ASR 文本、LLM 流、TTS 文本及音频输出。
  5. 唤醒、连续对话、主动中断、无语音超时。
  6. 设备绑定前后的行为。
  7. Provider 超时、断流、无内容、限流和取消。
  8. 客户端断线、服务摘流和重连。
  9. MQTT gateway 16 字节桥接帧的编码与解码。
  10. 配置更新只影响约定的当前或后续会话。

黄金数据必须脱敏、可提交且带版本说明。不能从一次偶然运行直接认定为规范;旧代码、文档和至少 一个调用方必须交叉确认。

5. PR 合并门禁

所有 PR

  • 计划工作包和文件所有权明确。
  • 新行为有测试,重构行为有特征/差分证据。
  • 相关 Tier A 全绿。
  • 无未解释 skip、xfail、warning 激增或生成文件漂移。
  • 文档和配置随行为同步。
  • 回滚方法明确。

高风险 PR 额外要求:

  • 设备协议:协议 Reviewer + 虚拟设备差分。
  • 鉴权/密钥:Security Reviewer + 失败路径和密钥泄露检查。
  • 数据迁移:全新库、已有库、重复执行和回滚测试。
  • 并发/任务:取消、超时、资源关闭和故障注入。
  • Provider 公共接口:所有能力族契约测试通过。

6. RC 自动化退出条件

只有满足以下全部条件,才能转入真实测试:

  • 所有计划 PR P00-P12 已合并或明确取消并记录理由。
  • 公开兼容边界全部关联到自动测试。
  • 虚拟设备和 manager-web E2E 全绿。
  • 所有 Provider 适配器通过 Fake/契约矩阵。
  • 没有 P0/P1 内部缺陷;P2 风险有接受或后续方案。
  • 统一发行物在干净环境完成安装、升级和回滚。
  • 模拟负载下没有无界内存、线程、任务或文件增长。
  • 未验证项逐条映射到真实环境交接用例。

满足这些条件代表“纯 Agent 阶段完成”,不代表真实 Provider 或硬件已经通过。