feat: bootstrap supply intelligence baseline
This commit is contained in:
98
test/CASES.md
Normal file
98
test/CASES.md
Normal file
@@ -0,0 +1,98 @@
|
||||
# Supply-Intelligence 测试用例
|
||||
|
||||
> 版本:v1.0 | 状态:初稿
|
||||
|
||||
---
|
||||
|
||||
## AC-01 探针覆盖度
|
||||
|
||||
| 用例编号 | 名称 | 前置条件 | 测试步骤 | 预期结果 | 优先级 |
|
||||
|---------|------|---------|---------|---------|--------|
|
||||
| TC-01.1 | 99% 覆盖率达标 | 插入 100 条测试账号 | 1. 等待 15 分钟 2. 统计探针日志 | 探针覆盖率 ≥ 99% | P0 |
|
||||
| TC-01.2 | 探针周期可配置 | 已配置探针任务 | 1. 修改探针周期为 3 分钟 2. 等待 60 秒 | 周期在 60 秒内生效 | P1 |
|
||||
|
||||
## AC-02 状态变更正确性
|
||||
|
||||
| 用例编号 | 名称 | 前置条件 | 测试步骤 | 预期结果 | 优先级 |
|
||||
|---------|------|---------|---------|---------|--------|
|
||||
| TC-02.1 | active → suspended | 账号为 active | 1. Mock 返回 401 | 60s 内状态变为 suspended | P0 |
|
||||
| TC-02.2 | suspended → disabled | 账号为 suspended | 1. Mock 连续 3 次返回 401 | 60s 内状态变为 disabled | P0 |
|
||||
| TC-02.3 | 429 不变更 | 账号为 active | 1. Mock 返回 429 | 15 分钟内状态保持 active | P0 |
|
||||
| TC-02.4 | 状态机违规 | 账号为 active | 1. 尝试直接变更为 disabled | 被拒绝,返回错误码 | P0 |
|
||||
| TC-02.5 | 状态回复 | 账号为 suspended | 1. Mock 返回 200 | 60s 内状态变为 active | P1 |
|
||||
|
||||
## AC-03 误报率
|
||||
|
||||
| 用例编号 | 名称 | 前置条件 | 测试步骤 | 预期结果 | 优先级 |
|
||||
|---------|------|---------|---------|---------|--------|
|
||||
| TC-03.1 | 7 天误报率 | 全部账号正常 | 1. 运行 7 天 2. 统计状态误变更次数 | 误报率 ≤ 1% | P0 |
|
||||
|
||||
## AC-04 新模型发现延迟
|
||||
|
||||
| 用例编号 | 名称 | 前置条件 | 测试步骤 | 预期结果 | 优先级 |
|
||||
|---------|------|---------|---------|---------|--------|
|
||||
| TC-04.1 | 2h 内发现 | 已对接供应商 | 1. T0 在 Mock 响应中新增 model_id 2. T0+2h 查询数据库 | candidate 存在,status=discovered | P0 |
|
||||
|
||||
## AC-05 已下架模型告警
|
||||
|
||||
| 用例编号 | 名称 | 前置条件 | 测试步骤 | 预期结果 | 优先级 |
|
||||
|---------|------|---------|---------|---------|--------|
|
||||
| TC-05.1 | 不自动下架 | package 为 active | 1. 从 Mock 中移除 model_id 2. 等待 2h | package 状态保持 active | P0 |
|
||||
| TC-05.2 | 生成告警待办 | package 为 active | 1. 从 Mock 中移除 model_id 2. 等待 2h | 运营工作台出现告警 | P0 |
|
||||
|
||||
## AC-06 准入测试通过
|
||||
|
||||
| 用例编号 | 名称 | 前置条件 | 测试步骤 | 预期结果 | 优先级 |
|
||||
|---------|------|---------|---------|---------|--------|
|
||||
| TC-06.1 | 测试通过 | candidate 为 discovered | 1. 触发准入测试 2. 等待 30min | 状态变为 test_passed,生成 package 草稿 | P0 |
|
||||
| TC-06.2 | 草稿字段完整 | 测试通过后 | 1. 查询生成的 package 草稿 | 包含 platform、model、price 字段 | P1 |
|
||||
|
||||
## AC-07 准入测试失败
|
||||
|
||||
| 用例编号 | 名称 | 前置条件 | 测试步骤 | 预期结果 | 优先级 |
|
||||
|---------|------|---------|---------|---------|--------|
|
||||
| TC-07.1 | 接口返回 500 | candidate 为 discovered | 1. Mock 返回 500 2. 等待测试完成 | 状态变为 test_failed,failure_reason 非空 | P0 |
|
||||
| TC-07.2 | 前端展示 | candidate 为 test_failed | 1. 访问运营工作台 | 展示失败详情 | P1 |
|
||||
|
||||
## AC-08 自动注册成功
|
||||
|
||||
| 用例编号 | 名称 | 前置条件 | 测试步骤 | 预期结果 | 优先级 |
|
||||
|---------|------|---------|---------|---------|--------|
|
||||
| TC-08.1 | 注册流程 | 已配置白名单 | 1. 触发自动注册 2. 等待 30min | 新增 active 账号 | P0 |
|
||||
| TC-08.2 | 密钥加密 | 注册完成后 | 1. 查询数据库 | API Key 已加密存储 | P1 |
|
||||
|
||||
## AC-09 自动注册 fail-closed
|
||||
|
||||
| 用例编号 | 名称 | 前置条件 | 测试步骤 | 预期结果 | 优先级 |
|
||||
|---------|------|---------|---------|---------|--------|
|
||||
| TC-09.1 | 网关不可用 | 配置启用 | 1. Mock 邮件网关返回 503 2. 等待 60s | 任务状态为 failed,审计日志记录失败 | P0 |
|
||||
| TC-09.2 | 不返回成功 | 注册失败后 | 1. 检查对上游响应 | 不返回成功状态码 | P0 |
|
||||
|
||||
## AC-10 审计日志完整性
|
||||
|
||||
| 用例编号 | 名称 | 前置条件 | 测试步骤 | 预期结果 | 优先级 |
|
||||
|---------|------|---------|---------|---------|--------|
|
||||
| TC-10.1 | 字段完整性 | 触发操作后 | 1. 5s 内查询审计日志 | 包含所有必要字段 | P0 |
|
||||
| TC-10.2 | 自动化操作审计 | 自动化操作后 | 1. 查询审计日志 | 存在对应记录 | P0 |
|
||||
|
||||
## AC-11 运营工作台干预
|
||||
|
||||
| 用例编号 | 名称 | 前置条件 | 测试步骤 | 预期结果 | 优先级 |
|
||||
|---------|------|---------|---------|---------|--------|
|
||||
| TC-11.1 | 一键上架 | package 为 draft | 1. 点击确认上架 2. 等待 3s | 状态变为 active | P0 |
|
||||
| TC-11.2 | 忽略模型 | candidate 为 discovered | 1. 点击忽略 | 不在待处理列表中,7 天后恢复 | P0 |
|
||||
|
||||
## AC-12 配置热更新
|
||||
|
||||
| 用例编号 | 名称 | 前置条件 | 测试步骤 | 预期结果 | 优先级 |
|
||||
|---------|------|---------|---------|---------|--------|
|
||||
| TC-12.1 | 探针周期热更新 | 已运行 | 1. 修改配置 2. 观察调度行为 | 60s 内生效 | P1 |
|
||||
|
||||
## 边缘场景 / 失败路径
|
||||
|
||||
| 用例编号 | 名称 | 前置条件 | 测试步骤 | 预期结果 | 优先级 |
|
||||
|---------|------|---------|---------|---------|--------|
|
||||
| TC-E1 | DNS 失败 | 探针任务已配置 | 1. 模拟 DNS 解析失败 | 状态不变更,记录日志 | P1 |
|
||||
| TC-E2 | 空响应体 | 探针任务已配置 | 1. Mock 返回空 JSON | 状态不变更,记录日志 | P1 |
|
||||
| TC-E3 | 并发乐观锁 | 探针任务已配置 | 1. 同时触发手动更新和探针 | 乐观锁冲突,探针记录失败 | P1 |
|
||||
| TC-E4 | 测试账号不可用 | 准入测试进行中 | 1. 将测试账号标记为 suspended | 测试标记为 failed,原因为 test_account_unavailable | P1 |
|
||||
75
test/STRATEGY.md
Normal file
75
test/STRATEGY.md
Normal file
@@ -0,0 +1,75 @@
|
||||
# Supply-Intelligence 测试策略
|
||||
|
||||
> 版本:v1.0 | 状态:初稿
|
||||
|
||||
---
|
||||
|
||||
## 1. 测试目标
|
||||
|
||||
| 目标 | 指标 | 验证方式 |
|
||||
|------|------|---------|
|
||||
| 功能正确性 | 所有 AC 通过率 100% | 每个 AC 至少 1 正向 + 1 负向测试用例 |
|
||||
| 状态机正确性 | 状态迁移符合状态图 | 所有状态转换路径覆盖 |
|
||||
| 安全性 | 无越权、审计日志完整 | 渗透测试 + 审计追溯 |
|
||||
| 性能 | 探针 P99 < 50ms,扫描完成 < 30min | 负载测试 |
|
||||
|
||||
## 2. 测试层级
|
||||
|
||||
```
|
||||
├── 单元测试 (Unit Test)
|
||||
│ ├── 状态机转换逻辑
|
||||
│ ├── 探针策略逻辑
|
||||
│ ├── 扫描比对算法
|
||||
│ └── 准入测试判定逻辑
|
||||
│
|
||||
├── 集成测试 (Integration Test)
|
||||
│ ├── 数据库交互(状态变更、审计日志)
|
||||
│ ├── Redis 缓存交互
|
||||
│ ├── 供应商 API Mock
|
||||
│ ├── 邮件/短信网关 Mock
|
||||
│ └── 向量数据库检索
|
||||
│
|
||||
├── E2E 测试 (End-to-End Test)
|
||||
│ ├── 探针到状态变更整条链路
|
||||
│ ├── 扫描到候选模型整条链路
|
||||
│ ├── 准入测试到上架整条链路
|
||||
│ └── 账号注册整条链路
|
||||
│
|
||||
└── 稳定性测试 (Stability Test)
|
||||
├── 7 天连续探针运行
|
||||
└── 高并发扫描/测试
|
||||
```
|
||||
|
||||
## 3. 测试工具
|
||||
|
||||
| 层级 | 工具 | 说明 |
|
||||
|------|------|------|
|
||||
| 单元测试 | Go testing + testify + mockery | 覆盖率门槛 domain ≥ 70%、service ≥ 80% |
|
||||
| 数据库测试 | testcontainers-go (PostgreSQL) | 每次测试启动独立容器 |
|
||||
| 缓存测试 | miniredis | 轻量级 Redis Mock |
|
||||
| 供应商 Mock | gock / httptest | 模拟供应商 API 响应 |
|
||||
| E2E 测试 | 自定义 Go E2E 框架 | 启动完整服务 + 数据库 |
|
||||
| 稳定性测试 | 自定义脚本 | 7 天连续运行监控 |
|
||||
|
||||
## 4. 测试环境
|
||||
|
||||
| 环境 | 用途 | 数据 |
|
||||
|------|------|------|
|
||||
| 本地开发 | 单元 + 快速集成测试 | 测试数据生成 |
|
||||
| CI | 自动化单元 + 集成测试 | 测试数据生成 |
|
||||
| 测试环境 | E2E + 性能基准 | 模拟生产数据 |
|
||||
| 生产前 | 稳定性验证 | 生产数据副本(脱敏) |
|
||||
| 生产环境 | 灰度监控 | 真实数据 |
|
||||
|
||||
## 5. 测试数据管理
|
||||
|
||||
- 供应商 API 响应使用 `test/fixtures/supplier_responses/` 下的 JSON 文件管理。
|
||||
- 测试用例集使用 `test/fixtures/test_cases/` 下的 YAML 文件管理。
|
||||
- 每个测试用例自洁,启动前加载固定数据集,结束后清理。
|
||||
|
||||
## 6. 特殊测试要求
|
||||
|
||||
- **探针测试**:必须覆盖 429 、 401 、 403 、 500 、 503 、超时、空响应、DNS 失败、TCP 超时等所有常见异常场景。
|
||||
- **状态机测试**:必须覆盖所有状态转换路径,特别是 `active` → `disabled` 的违规路径必须被拒绝。
|
||||
- **审计测试**:所有自动化操作必须在 5 秒内生成审计记录,且字段完整。
|
||||
- **并发测试**:探针任务与运营人员手动操作的并发场景必须测试,验证乐观锁机制。
|
||||
Reference in New Issue
Block a user