Files
Scoreboard/devdocs/09-测试策略.md
T

101 lines
3.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 分钟)