# 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 分钟)