379 lines
22 KiB
Markdown
379 lines
22 KiB
Markdown
|
|
# 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% 流量的变更 | 变更被标记待确认 |
|