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

3.8 KiB
Raw Blame History

09 · 测试策略

所属:运动会积分榜系统 · 开发文档集 版本:v0.1(讨论稿) · 2026-09-09 上游:README · 相关:02-积分与排名规则


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