Files
ai-ops/tech/TEST_DESIGN.md
2026-05-12 17:48:22 +08:00

22 KiB
Raw Blame History

AI-Ops 测试设计方案

版本v1.0 日期2026-04-27 状态:初稿 覆盖AC-01 ~ AC-12、异常流程 F-01 ~ F-08、边缘流程 G ~ I


1. 测试策略

1.1 测试分层模型

┌─────────────────────────────────────────────────┐
│                   E2E Tests (黑盒)               │
│  场景:用户操作链路 + 系统集成验证                 │
│  工具Go test + k6 / 自制 E2E runner           │
│  覆盖率目标:每个主流程 ≥ 1 条                    │
└─────────────────────────────────────────────────┘
                        ▲
┌─────────────────────────────────────────────────┐
│               Integration Tests (灰盒)             │
│  场景Service 间协作、数据库读写、外部 API Mock   │
│  工具Go test + testify + sqlmock + httptest   │
│  覆盖率门槛service ≥ 80%, handler ≥ 80%        │
└─────────────────────────────────────────────────┘
                        ▲
┌─────────────────────────────────────────────────┐
│                Unit Tests (白盒)                 │
│  场景:单个函数/方法逻辑、边界条件、错误分支       │
│  工具Go test + testify + gomock              │
│  覆盖率门槛domain ≥ 70%                       │
└─────────────────────────────────────────────────┘

1.2 测试通过标准

维度 标准
覆盖率 domain ≥ 70%, service/handler ≥ 80%
主流程 AC-01 ~ AC-12 全部有至少 1 条通过测试
异常流程 F-01 ~ F-08 全部有至少 1 条验证测试
边缘流程 G、H、I 全部有至少 1 条验证测试
告警噪声率 沙盒测试中误报率 ≤ 1%,超过则 CI 失败
自愈误触发 沙盒测试中 0 次误触发,否则 CI 失败

1.3 测试环境矩阵

环境 用途 数据特征 外部依赖
Local Dev 开发者快速验证 Mock 数据 Mock 所有外部服务
CI PR Merge 门禁 Mock 数据 Mock 所有外部服务
Sandbox 沙盒验证(自愈规则) 生产数据脱敏副本 Mock + 部分真实依赖
Staging 上线前全流程验证 生产数据脱敏副本 全真实依赖
Production 灰度上线 真实数据 全真实依赖

2. Mock 策略

2.1 外部依赖 Mock

依赖 Mock 方案 工具
Prometheus / 时序数据库 嵌入式 mock server返回预置指标数据 httptest + 自定义 mock
gateway/internal/metrics Mock HTTP handler返回 JSON 指标 gock / httptest
supply-api/ 供应商健康接口 Mock 返回 200/401/429/500 gock
platform-token-runtime/ 运行时状态接口 Mock 返回正常/异常状态 gock
通知渠道Webhook/邮件/飞书) Mock server 接收并验证请求格式 httptest
PostgreSQL sqlmock 拦截 SQL验证查询正确性 github.com/DATA-DOG/go-sqlmock
Redis miniredis 内存模拟 github.com/alicebob/miniredis

2.2 Mock 分层

Production 依赖:
  gateway metrics API ──→ supply-api 供应商接口 ──→ token-runtime 状态接口
         │                       │                        │
         ▼                       ▼                        ▼
Mock (CI/Local):         Mock (CI/Local):          Mock (CI/Local):
MetricsMockServer    →   SupplierMockServer    →   RuntimeMockServer

3. 测试用例矩阵(按 AC 编号)

AC-01 实时监控看板

用例 ID 描述 类型 覆盖条件
TC-01-01 首页加载时间 <2s Performance Given 用户登录 When 访问首页 Then 响应时间 ≤2s
TC-01-02 首页显示 6 个指标 Happy Path Given 系统运行 When 首页加载 Then 显示 QPS/延迟/P99/错误率/供应商数/告警数
TC-01-03 指标卡片 15s 内刷新 Functional Given 指标更新 When 数据推送 Then 15s 内页面刷新
TC-01-04 无数据时看板展示"无数据" Edge Given 指标源断开 When 首页加载 Then 不显示过期数据
TC-01-NEG-01 未登录访问首页返回 401 Negative Given 未登录 When 访问首页 Then 返回 401
TC-01-NEG-02 非法时间范围参数返回 400 Negative Given 非法时间范围参数 When 请求指标 Then 返回 400

AC-02 指标下钻

用例 ID 描述 类型 覆盖条件
TC-02-01 下钻显示 1 小时趋势图 Happy Path Given 点击指标卡片 When 下钻 Then 显示 60min 趋势
TC-02-02 按 service/path/supplier 维度分割 Functional Given 趋势图 When 按 supplier 下钻 Then 正确分割
TC-02-03 下钻查询 <3s Performance Given 大数据量 When 执行下钻 Then 响应 <3s
TC-02-04 无数据范围返回空图表 Edge Given 无数据 When 下钻 Then 显示空图表而非报错
TC-02-NEG-01 下钻不存在的 service 返回空结果/404 Negative Given 不存在的 service When 下钻 Then 返回空结果或 404
TC-02-NEG-02 超大时间范围返回 413/截断 Negative Given 超大时间范围 When 下钻 Then 返回 413 或自动截断

AC-03 告警规则配置

用例 ID 描述 类型 覆盖条件
TC-03-01 创建告警规则 Happy Path Given 登录管理员 When 创建规则 Then 规则保存成功
TC-03-02 规则字段完整性校验 Negative Given 缺少必填字段 When 创建规则 Then 返回 400
TC-03-03 规则变更 30s 内生效 Functional Given 规则已创建 When 修改阈值 Then 30s 后新规则生效
TC-03-04 支持 50 条规则并发运行 Load Given 50 条规则 When 同时触发 Then 全部正确评估
TC-03-05 规则编辑/禁用/删除 Functional Given 规则存在 When 编辑/禁用/删除 Then 状态正确变更

AC-04 告警通知触达

用例 ID 描述 类型 覆盖条件
TC-04-01 P0/P1 告警 30s 内通知 Performance Given P1 告警触发 When 通知发送 Then ≤30s 到达
TC-04-02 P2 告警 120s 内通知 Performance Given P2 告警触发 When 通知发送 Then ≤120s 到达
TC-04-03 至少 2 种通知渠道 Functional Given 告警触发 When 发送 Then 飞书和邮件均收到
TC-04-04 通知内容完整性 Functional Given 告警发送 Then 包含级别/规则名/时间/当前值/阈值/事件ID/链接
TC-04-05 Webhook 通知失败后自动切换 Resilience Given Webhook 发送失败 When 告警触发 Then 自动切换至邮件
TC-04-NEG-01 通知渠道全部失效时记录失败并触发内部告警 Negative Given 所有通知渠道失效 When 告警触发 Then 记录失败并触发内部 P2 告警
TC-04-NEG-02 非法事件 ID 查询返回 404 Negative Given 非法事件 ID When 查询事件 Then 返回 404

AC-05 告警聚合与抑制

用例 ID 描述 类型 覆盖条件
TC-05-01 1 分钟内 >20 条告警触发聚合 Functional Given 同一资源 1min 内触发 25 条 When 聚合 Then 生成 1 条集群告警
TC-05-02 集群告警包含累计数量和规则列表 Functional Given 集群告警生成 Then 内容包含数量≥20 和规则列表
TC-05-03 5 分钟抑制期内同一规则不重复通知 Functional Given 告警已发送 When 5min 内再次触发 Then 不重复通知
TC-05-04 级别升级时抑制解除 Functional Given P2 告警抑制中 When 升级为 P1 Then 立即通知
TC-05-NEG-01 聚合阈值设置为 0 或负数时的校验拒绝 Negative Given 阈值为 0 或负数 When 创建/编辑规则 Then 返回 400 并拒绝

AC-06 自动自愈

用例 ID 描述 类型 覆盖条件
TC-06-01 自愈动作 60s 内完成 Performance Given 自愈规则触发 When 执行切换路由 Then ≤60s 完成含重试
TC-06-02 自愈成功记录事件 Happy Path Given 自愈执行成功 When 完成 Then 事件记录 success
TC-06-03 自愈失败升级 P0 人工告警 Functional Given 自愈重试均失败 When 停止 Then 升级 P0 通知
TC-06-04 无自愈规则时仅通知 Functional Given 告警无自愈配置 When 触发 Then 仅发送通知
TC-06-05 沙盒模式:自愈不生效 Resilience Given 沙盒模式 When 自愈触发 Then 仅记录,不实际执行
TC-06-06 自愈后 2min 评估是否解除 Functional Given 自愈执行 When 2min 后 Then 评估条件是否满足
TC-06-07 自愈级联失败回退 Functional Given 自愈切换导致新故障 When 检测到 Then 回退并升级
TC-06-NEG-01 沙盒未通过时禁止关联生产规则 Negative Given 沙盒测试未通过 When 关联生产告警规则 Then 返回 400 并拒绝
TC-06-NEG-02 自愈动作类型非法返回 400 Negative Given 非法自愈动作类型 When 配置规则 Then 返回 400

AC-07 配置审计日志

用例 ID 描述 类型 覆盖条件
TC-07-01 配置变更 1s 内生成审计记录 Performance Given 执行配置变更 When 完成 Then ≤1s 审计记录存在
TC-07-02 审计字段完整性 Functional Given 审计记录 When 查询 Then 包含全部 10 个字段
TC-07-03 审计日志不可篡改 Security Given 审计记录 When 尝试修改 Then 数据库层拒绝或被检测
TC-07-04 审计日志 90 天保留 Functional Given 审计数据 91 天 When 查询 Then 91 天前记录不存在(新数据已清理)
TC-07-05 审计查询 <3s Performance Given 10000 条审计记录 When 按条件查询 Then <3s

AC-08 配置回滚

用例 ID 描述 类型 覆盖条件
TC-08-01 正常回滚 <60s Performance Given 审计记录存在 When 执行回滚 Then ≤60s 完成
TC-08-02 回滚前显示子资源影响列表 Functional Given 回滚操作 When 执行前 Then 显示将被覆盖的子资源
TC-08-03 回滚生成新审计记录 Functional Given 回滚执行 When 完成 Then 新审计记录关联原始 ID
TC-08-04 目标不存在时返回 OPS_AUD_4101 Negative Given 目标已被删除 When 执行回滚 Then 返回错误码且不执行
TC-08-05 回滚失败不静默 Resilience Given 回滚执行失败 When 完成 Then 返回错误码并通知

AC-09 容量主板

用例 ID 描述 类型 覆盖条件
TC-09-01 显示 7 天趋势数据 Functional Given 容量主板 When 加载 Then 显示 7 天 Token/QPS/延迟趋势
TC-09-02 负载等级标注(正常/警告/过载) Functional Given 负载数据 When 展示 Then 正确标注等级
TC-09-03 预测触达上限时间 Functional Given 增长率数据 When 计算 Then 显示预测时间(仅供参考)
TC-09-NEG-01 容量主板数据源丢失时展示降级提示 Negative Given 时序库断开 When 访问容量主板 Then 显示降级提示而非错误

AC-10 日志/指标查询

用例 ID 描述 类型 覆盖条件
TC-10-01 按多维度筛选日志 Functional Given 查询条件 When 执行 Then 正确过滤
TC-10-02 日志查询 <3s Performance Given 10000 条日志 When 查询 Then <3s
TC-10-03 CSV 导出 10000 条 Load Given 查询结果 When 导出 Then 正确生成 CSV
TC-10-04 分页查询第 2 页 Functional Given 分页请求 When 获取第 2 页 Then 返回正确偏移
TC-10-NEG-01 导出超过 10000 条时返回 413 或分批 Negative Given 查询结果 >10000 条 When 导出 CSV Then 返回 413 或自动分批导出

AC-11 监控数据保存

用例 ID 描述 类型 覆盖条件
TC-11-01 原始数据保留 ≥7 天 Functional Given 8 天前数据 When 查询 Then 7 天内数据存在
TC-11-02 分钟级聚合保留 ≥30 天 Functional Given 31 天前数据 When 查询 Then 31 天前不存在
TC-11-03 小时级聚合保留 ≥90 天 Functional Given 91 天前数据 When 查询 Then 不存在
TC-11-NEG-01 查询已清理数据返回空并提示保留策略 Negative Given 查询已清理时段 When 查询原始数据 Then 返回空并提示保留策略

AC-12 角色与权限

用例 ID 描述 类型 覆盖条件
TC-12-01 查看者只能读不可写 Security Given 查看者 When 尝试写操作 Then 返回 403
TC-12-02 运维人员不可执行回滚 Security Given 运维人员 When 执行回滚 Then 返回 403
TC-12-03 管理员可执行所有操作 Functional Given 管理员 When 执行任意操作 Then 成功

4. 异常流程测试F-01 ~ F-08

用例 ID 异常场景 验证点 预期行为
TF-01 自愈动作重试均失败 P0 人工告警触发 10s 内重试 1 次,失败后立即升级 P0 电话/短信
TF-02 通知渠道失效Webhook 5xx 备用渠道切换 记录失败,使用邮件→飞书→短信 三次切换
TF-03 回滚目标已不存在 OPS_AUD_4101 返回错误码,运营手动修复
TF-04 指标采集器 5min 无数据 数据源丢失标识 控制台显示丢失标识,触发 P2 内部告警
TF-05 审计日志存储满盘 降级不阻断业务 丢弃非关键字段或异步上报,业务操作继续
TF-06 自愈形成级联故障 回退并升级 自动恢复上一步,升级人工告警,立即电话通知
TF-07 监控数据库全面中断 只读/降级模式 控制台只读,告警引擎本地缓存继续运行
TF-08 实时看板指标计算超时 显示上次结果 显示上次成功结果并标注时间戳

5. 灰度发布验证计划

5.1 各 Phase 验证内容

Phase 验证内容 通过标准 回归集
Phase 1 监控看板 + 日志查询 AC-01, AC-02, AC-10, AC-11 全部通过 无历史功能
Phase 2 告警规则 + 通知渠道 AC-03, AC-04, AC-05 全部通过 Phase 1 全量
Phase 3 自愈引擎 + 审计回滚 AC-06, AC-07, AC-08 全部通过 + 沙盒 10 次无误触发 Phase 1+2 全量
Phase 4 容量主板 AC-09 全部通过 Phase 1+2+3 全量

5.2 灰度门禁检查项

每次 Phase 升级前必须全部通过:

  • 所有 AC 测试用例 100% 通过
  • 单元测试覆盖率达标domain ≥70%, service ≥80%
  • 自愈沙盒验证 ≥10 次无误触发
  • 回滚演练(至少 3 个资源类型)成功
  • 性能基准测试通过(响应时间符合 AC 要求)
  • 安全扫描通过(无高危漏洞)

6. 回归测试集

6.1 快速回归集(每次 PR

TC-01-01, TC-01-02, TC-03-01, TC-03-03, TC-04-01, TC-07-01, TC-07-02, TC-12-01, TC-12-03
共 9 条,约 5-10 分钟

6.2 完整回归集(每次 Phase 升级)

TC-01-01 ~ TC-01-04, TC-01-NEG-01, TC-01-NEG-02
TC-02-01 ~ TC-02-04, TC-02-NEG-01, TC-02-NEG-02
TC-03-01 ~ TC-03-05
TC-04-01 ~ TC-04-05, TC-04-NEG-01, TC-04-NEG-02
TC-05-01 ~ TC-05-04, TC-05-NEG-01
TC-06-01 ~ TC-06-07, TC-06-NEG-01, TC-06-NEG-02
TC-07-01 ~ TC-07-05
TC-08-01 ~ TC-08-05
TC-09-01 ~ TC-09-03, TC-09-NEG-01
TC-10-01 ~ TC-10-04, TC-10-NEG-01
TC-11-01 ~ TC-11-03, TC-11-NEG-01
TC-12-01 ~ TC-12-03
TF-01 ~ TF-08
共 53 条,约 30-60 分钟

7. 技术栈与集成约束验证

7.1 统一技术栈与双运行模式验证

用例 ID 描述 类型 验证条件
TOPS-RUN-01 独立运行模式启动 Happy Path Given 独立 config.yaml 与独立数据库/Redis/时序库 When 启动 cmd/ai-ops/main.go Then /actuator/health/ready 返回 200/api/v1/ai-ops/* 可访问
TOPS-RUN-02 集成运行模式挂载 Integration Given gateway 或 supply-api 主进程加载 IntegrationPlugin When 启动 Then /internal/ai-ops/* 路由、后台 worker、健康检查挂载成功
TOPS-RUN-03 配置分离加载 Functional Given 独立模式与集成模式分别启动 When 读取配置 Then 独立模式仅使用自身配置,集成模式正确合并主项目配置
TOPS-RUN-04 数据库前缀隔离 Structural Given 执行迁移 When 检查 schema Then 仅创建 ai_ops_ 前缀表

7.2 独立运行与集成运行验证

7.3 IntegrationPlugin 与模块挂载验证

用例 ID 描述 类型 验证条件
TOPS-PLG-01 IntegrationPlugin 注册路由与健康检查 Integration Given 集成模式 When 插件注册 Then 监控、告警、日志、审计、健康检查路由挂载成功
TOPS-PLG-02 模块开关生效 Functional Given enabled_modules 关闭某模块 When 启动 Then 对应路由/后台任务不注册,其他模块不受影响
TOPS-PLG-03 集成模式共享资源 Integration Given 主进程注入共享 DB/Redis/logger/metrics client When 插件启动 Then 使用共享资源且不重复初始化冲突依赖

7.3 OpenAPI 契约验证

用例 ID 描述 类型 验证条件
TOPS-OAS-01 OpenAPI 文档可访问 Functional Given 服务启动 When 请求 /openapi.json/docs Then 返回 200 且包含监控、告警、自愈、审计、日志查询接口
TOPS-OAS-02 路由与 OpenAPI 一致 Contract Given 导出的 OpenAPI 文档 When 对照 HTTP 路由 Then 请求/响应/错误码与实现一致,无缺失公开接口
TOPS-OAS-03 集成前缀可配置 Contract Given 集成模式配置内部前缀 When 导出文档 Then 文档反映 /internal/ai-ops/ 前缀或明确区分外部/内部暴露面

7.4 NewAPI / Sub2API 适配层验证

用例 ID 描述 类型 验证条件
TOPS-ADP-01 /metrics 采集适配 Contract Given NewAPI/Sub2API 通过 Prometheus scrape 拉取指标 When 调用 /metrics Then 指标命名、label、采样频率满足契约
TOPS-ADP-02 告警回调适配 Integration Given 外部系统配置 Webhook 回调 When 告警触发 Then 回调内容完整、签名正确、失败可重试
TOPS-ADP-03 自愈脚本调用外部管理 API Integration Given 自愈动作触发程序化脚本 When 通过适配层调用 NewAPI/Sub2API Then 鉴权、错误码映射、回退逻辑符合设计

8. 发布门禁与阶段结论

8.1 发布门禁检查表

以下门禁项全部通过前,不得进入生产交付:

  • 独立运行与集成运行模式均完成启动验证路由、worker、健康检查真实挂载
  • BuildServer / BuildRuntime 中条件能力已显式接入,而非仅存在定义
  • OpenAPI、/metrics、Webhook、管理 API 的鉴权与字段边界合同测试通过
  • 自愈动作均完成沙盒验证、快照记录与回滚演练
  • 审计日志保证先写审计再执行业务,高风险操作审计失败即拒绝
  • viewer / operator / admin 三类角色权限矩阵验证通过
  • 告警洪泛、自愈误触发、时序库中断、通知渠道失效四类高风险回归全部通过
  • 至少一条真实故障检测 → 告警 → 通知/回滚链路完成端到端验证

8.2 阶段门控结论

当前结论REQUEST_CHANGES已转化为具体行动项见 HLD 10.2 节)

进入开发/实现前必须补齐:

  • 将 HLD 中的威胁建模点全部下沉为可执行测试与阻断项(每个威胁场景必须有对应 CI 阻断测试用例)。
  • 为"定义 → 装配 → 调用 → 入口"四层链路补充 QA 检查要求,重点覆盖自愈、告警、审计、权限。
  • 分别给出独立模式与集成模式的最小验证命令、预期输出与失败判定。
  • 高风险变更必须 fail-closed影响面 > 50% 的变更在审计写入失败时必须拒绝执行。

阻断条件(任一触发则不得进入开发):

  • 高风险动作没有沙盒/回滚闭环。
  • 审计不能证明先写后执行业务。
  • 关键能力只存在接口声明,未真实接入运行主链路。
  • HLD 门控 8.1 中任意一项未通过。

9. 性能测试

9.1 性能基准

指标 目标值 压测方法
首页加载 <2s (P99) k6 并发 50 用户
告警触发到通知 P0/P1 <30s, P2 <120s 单次告警触发计时
下钻查询 <3s (P99) k6 并发 20 用户
审计查询 <3s (P99) 10000 条数据下查询
配置回滚 <60s (P99) 单次回滚计时
支持并发告警规则 ≥50 条同时评估 并发注入 50 条告警数据

10. 安全测试

测试项 方法 验证点
权限越界 使用低权限 Token 尝试高权限操作 返回 403
审计日志篡改 尝试 UPDATE/DELETE 审计表 操作被拒绝或被检测
SQL 注入 输入 ' OR 1=1 -- 参数化查询无注入
告警信息泄露 跨用户查询告警 无数据泄露
高风险变更未二次确认 提交影响 90% 流量的变更 变更被标记待确认