# OPS 第 1 阶段测试计划

## 1. 文档目标

本文定义 OPS 第 1 阶段后端、前端和端到端测试范围。当前仓库尚未保留实际 `server/`、`web/` 工程；本文作为编码和联调前测试规格，后续实现必须按本文补齐测试。

## 2. 测试分层

| 层级 | 目标 | 工具建议 | 数据要求 |
| --- | --- | --- | --- |
| 后端单元测试 | 验证状态机、规则匹配、错误救援、权限判断 | Go `testing` | 不访问外部服务 |
| 后端接口测试 | 验证 REST API、统一响应、鉴权、审计 | Go `httptest` | SQLite 内存库或任务指定测试库 |
| 后端集成测试 | 验证 PostgreSQL 事务语义、时序库适配、通知适配 | Go 测试套件 | 真实 SQLite 内存库或真实测试服务，不 mock 数据库 |
| 前端类型检查 | 验证 TypeScript、API 类型和状态分支 | `pnpm type:check` | 不依赖真实后端 |
| 前端组件/页面测试 | 验证 loading、empty、error、success、partial、forbidden 状态 | 项目模板现有测试工具 | 可使用固定响应夹具 |
| 端到端测试 | 验证资源到告警、通知、工单、报表闭环 | Playwright 或等价工具 | 连接真实后端 API |

开发期 mock 只能用于前端独立调试。联调、验收和端到端测试必须连接真实后端 API。

## 3. 后端测试矩阵

| 能力域 | 必测场景 | 测试类型 | 通过标准 |
| --- | --- | --- | --- |
| 统一响应 | 成功、业务错误、权限错误、系统错误 | 接口测试 | 响应包含 `code`、`message`、`traceId`，错误含建议动作。 |
| 资源模型 | 创建、编辑、停用、退役、非法状态恢复 | 单元 + 接口 | 状态机合法，非法流转拒绝并写审计。 |
| 采集任务 | 成功、部分成功、超时、凭据错误、连续失败 | 单元 + 集成 | 失败原因可见，连续失败生成内部事件。 |
| 时序适配 | 批量写入、范围查询、聚合、降采样、保留策略 | 集成 | 可按 `resource_id + metric_code + 时间范围` 查询。 |
| Trap/Syslog | 解析成功、未解析、补规则重放、屏蔽策略 | 接口 + 集成 | 未解析事件保留原文，重放后状态正确。 |
| 告警规则 | 阈值触发、恢复、去重、压缩、抑制、升级 | 单元 + 接口 | 告警状态机合法，策略命中可追踪。 |
| 通知 | 站内消息、短信、邮件成功和失败 | 集成 | 通知失败不阻塞告警和工单，记录失败原因。 |
| 工单 | 创建、接单、转交、挂起、重启、关闭、并发关闭 | 单元 + 接口 | 非法流转拒绝，并发冲突返回当前状态。 |
| 权限 | 功能权限、数据权限、越权访问 | 接口 | 越权返回 forbidden，不泄露敏感数据。 |
| 报表 | 空范围、大范围、导出、无权限 | 接口 + 集成 | 大范围查询受控，导出写审计。 |

## 4. 前端测试矩阵

| 页面 | 状态覆盖 | 必测动作 |
| --- | --- | --- |
| 首页总览 | loading、empty、error、success、partial、forbidden、stale | 模块配置保存、局部组件失败、无权限模块隐藏。 |
| 综合监控 | loading、empty、error、success、partial、forbidden、stale | 资源筛选、查看详情、采集失败提示、手动刷新。 |
| 告警中心 | loading、empty、error、success、partial、forbidden、operating、operation_failed | 确认、忽略、派单、筛选、导出、查看通知记录。 |
| 策略与模板 | empty、error、success、forbidden、operation_failed | 创建规则、字段校验、禁用策略、模板变量校验。 |
| 通知中心 | loading、empty、error、success、partial、operation_failed | 查看三类渠道记录、失败重发。 |
| 工单管理 | loading、empty、error、success、partial、forbidden、operation_failed | 接单、转交、挂起、重启、关闭、并发冲突提示。 |
| 报表管理 | loading、empty、error、success、partial、forbidden、stale | 生成、导出、空范围、大范围失败提示。 |
| 可视化大屏 | loading、empty、error、success、partial、forbidden、stale | 轮播配置、组件局部失败、刷新时间展示。 |
| 权限管理 | empty、error、success、forbidden、operation_failed | 角色授权、数据权限、越权验证。 |

## 5. 端到端验收测试

### 5.1 主闭环脚本

1. 创建或导入主机、H3C/华三网络设备、数据库、URL/API 样例资源。
2. 配置采集任务和指标阈值。
3. 写入或触发一条可控异常。
4. 在原始事件池查看接收、解析、规则命中记录。
5. 在告警中心确认告警生成、去重、级别和业务上下文。
6. 验证站内消息、短信、邮件三类通知记录。
7. 对告警执行确认并派单。
8. 工单完成接单、处理、关闭。
9. 回到告警详情查看关联工单、处理记录和审计日志。
10. 在首页、大屏、报表查看该故障的统计证据。

### 5.2 失败救援脚本

| 脚本 | 操作 | 通过标准 |
| --- | --- | --- |
| 采集失败 | 使用错误凭据触发采集 | 资源详情显示失败原因，写 `collector_runs` 和审计。 |
| 未解析 Trap | 投递未知 OID 样例 | `raw_events` 状态为 `unparsed`，补规则后可重放。 |
| 通知失败 | 配置不可用短信或邮件测试通道 | 告警可继续处理，通知记录失败，可重试。 |
| 自动派单失败 | 创建无匹配处理人的派单规则 | 告警停留待分派，不创建重复工单。 |
| 权限拒绝 | 普通账号尝试关闭无权工单 | 返回 forbidden，页面不乐观更新。 |

## 6. 本地验证命令

后端至少运行：

```powershell
Set-Location .\server
go test ./...
go vet ./...
```

前端初始化后至少运行：

```powershell
Set-Location .\web
pnpm type:check
pnpm lint
pnpm build
```

如果因为私有依赖、网络、凭据或环境限制无法运行，需要在交付说明中记录原因、影响范围和替代验证证据。

## 7. 测试数据要求

| 数据 | 最小要求 |
| --- | --- |
| 资源 | 主机、H3C/华三网络设备、数据库、虚拟化、URL/API 各至少 1 类样例。 |
| 指标 | CPU、内存、磁盘、接口状态、接口流量、URL 可用性、响应时间。 |
| Trap/Syslog | 至少 1 条可解析样例、1 条未解析样例、1 条恢复样例。 |
| 告警 | 不同级别至少 3 条，覆盖触发、确认、忽略、恢复、派单。 |
| 通知 | 站内消息、短信、邮件成功和失败各至少 1 条记录。 |
| 工单 | 创建、接单、转交、挂起、重启、关闭全路径样例。 |
| 权限 | 管理员、值班人员、普通只读用户各 1 个。 |

## 8. 质量门禁

- 后端核心状态机和规则逻辑必须有单元测试。
- 所有核心接口必须覆盖成功、失败、无权限、非法状态。
- 前端核心页面必须覆盖 `docs/首期UI状态覆盖.md` 中列出的状态。
- 端到端测试必须能证明主闭环，不得只校验静态页面存在。
- 测试不能使用 mock 数据库替代真实数据库行为。
