101 lines
3.8 KiB
Markdown
101 lines
3.8 KiB
Markdown
# 09 · 测试策略
|
||
|
||
> 所属:运动会积分榜系统 · 开发文档集
|
||
> 版本:v0.1(讨论稿) · 2026-09-09
|
||
> 上游:[README](./README.md) · 相关:[02-积分与排名规则](./02-积分与排名规则.md)
|
||
|
||
---
|
||
|
||
## 1. 测试分层
|
||
|
||
| 层次 | 范围 | 工具 | 要求 |
|
||
| --- | --- | --- | --- |
|
||
| 单元测试 ★ | 积分引擎、排名、tie-break、并列、双倍、破纪录、撤销重算 | Vitest | 覆盖所有规则分支,≥60 用例,**必过** |
|
||
| 集成测试 | API + 权限 + 事务 + 审计 | Vitest + Fastify inject | 关键路径全覆盖 |
|
||
| 实时测试 | 快照/增量/重连/乱序/重复/心跳 | Vitest + socket.io-client | 模拟断线重连 |
|
||
| E2E | 录入 → 发布 → 大屏更新 | Playwright | 至少 3 条主流程 |
|
||
| 压测 | 50 大屏 + 5 管理端并发 | autocannon / 自写脚本 | 延迟 <100ms,无内存增长 |
|
||
| 彩排 | 真实数据全流程 | 人工 | 赛前必做 |
|
||
|
||
---
|
||
|
||
## 2. 积分引擎测试用例矩阵
|
||
|
||
> 引擎是纯函数,输入「成绩集合 + 积分模板」,输出「流水 + 排名」。以下用例必须在 M2 阶段全部通过。
|
||
|
||
| # | 用例 | 期望 |
|
||
| --- | --- | --- |
|
||
| 1 | 8 人参赛正常排名 | 9/7/6/5/4/3/2/1 |
|
||
| 2 | 两人并列第 2(skip) | 7/7/-/5/4/3/2/1 |
|
||
| 3 | 两人并列第 2(average) | 6.5/6.5/-/5/4/3/2/1 |
|
||
| 4 | 三人并列第 3(skip) | 6/6/6/-/-/3/2/1 |
|
||
| 5 | 团体项目双倍 | 18/14/12/… |
|
||
| 6 | 破纪录 + 双倍 | 成绩分双倍,破纪录加分**不**双倍 |
|
||
| 7 | 并列第一的奖牌计数 | 2 金 0 银 1 铜 |
|
||
| 8 | 发布后撤销 | 流水作废,总分回退 |
|
||
| 9 | 修改已发布成绩 | 旧流水作废 + 新流水,审计可查 |
|
||
| 10 | 弃权者不占名次 | 名次顺延 |
|
||
| 11 | 报名不足 8 人 | 按实际名次取分 |
|
||
| 12 | 人工扣分后排名变化 | tie-break 正确重排 |
|
||
| 13 | 同分 tie-break | 金牌 → 银牌 → 铜牌 → 编码 |
|
||
| 14 | 破纪录多级别 | 取最高档(max 模式) |
|
||
| 15 | 破纪录多级别(sum 模式) | 累加 |
|
||
| 16 | 一条成绩归属两个单位(联队) | 按配置拆分或整体归属 |
|
||
| 17 | 重复发布同一组 | 幂等,不产生重复流水 |
|
||
| 18 | 乱序应用增量 | 最终状态一致 |
|
||
|
||
---
|
||
|
||
## 3. 集成测试重点
|
||
|
||
| 场景 | 断言 |
|
||
| --- | --- |
|
||
| 未登录调写接口 | 401 / `AUTH_REQUIRED` |
|
||
| `recorder` 尝试发布 | 403 / `FORBIDDEN` |
|
||
| 发布触发推送 | 大屏客户端收到 `change` 且 version 递增 |
|
||
| 撤销发布 | 流水作废、大屏回退、审计有记录 |
|
||
| 并发修改同一项目 | 后者收到 `CONFLICT` |
|
||
| 重复提交同一 `requestId` | 返回首次结果,不重复写 |
|
||
|
||
---
|
||
|
||
## 4. 实时同步测试
|
||
|
||
- 连接 → `hello` → 收到 `snapshot`。
|
||
- 断开 10 秒期间产生 3 次变更 → 重连收到 `catchup` 且最终状态一致。
|
||
- 重复投递同一 `change` → 客户端忽略。
|
||
- 服务端重启 → 客户端重连后 version 不回退。
|
||
- 心跳超时 → 客户端显示离线角标。
|
||
|
||
---
|
||
|
||
## 5. E2E 主流程
|
||
|
||
1. 登录 → 选择项目 → 录入成绩 → 存草稿 → 发布 → 大屏出现新成绩与积分变化。
|
||
2. 撤销发布 → 大屏回退 → 重新录入并发布。
|
||
3. 登记破纪录 → 确认 → 大屏播放破纪录动效 → 积分榜加分正确。
|
||
|
||
---
|
||
|
||
## 6. 压测指标
|
||
|
||
| 指标 | 目标 |
|
||
| --- | --- |
|
||
| 大屏客户端数 | 50 并发长连接 |
|
||
| 管理端 | 5 并发操作 |
|
||
| 发布接口 P95 | < 100ms |
|
||
| 推送延迟 P95 | < 500ms |
|
||
| 连续运行 24h | 内存增长 < 10% |
|
||
|
||
---
|
||
|
||
## 7. 彩排清单(赛前必做)
|
||
|
||
- [ ] 导入真实单位 / 项目 / 报名数据
|
||
- [ ] 全流程录入 + 发布 + 大屏验证
|
||
- [ ] 断网 1 分钟后恢复,验证增量补发
|
||
- [ ] 拔电重启,验证自动拉起与数据完整
|
||
- [ ] 从备份恢复演练
|
||
- [ ] 大屏在真实分辨率与投影下检查可读性
|
||
- [ ] 裁判长实操培训(30 分钟)
|