# 年会互动大屏系统 - 联调测试方案 (Integration Test Plan)

| 项目名称 | 年会互动大屏系统 (马年国潮版) | 版本号 | V1.0 |
| :--- | :--- | :--- | :--- |
| 文档状态 | **执行中** | 负责人 | 技术总监 |
| 涉及端 | 移动端 H5、大屏端 Web、导播台 Admin、服务端 Node | 更新日期 | 2026-01-15 |

---

## 1. 测试目标与范围
本次联调旨在验证各子系统间的**数据流转**、**实时通信**及**视觉同步**是否符合预期。重点关注 150 人并发场景下的稳定性及“操作-反馈”的延迟体验。

### 核心联调链路
1.  **投票链路**：手机端盖戳 -> Socket 传输 -> Redis 原子计数 -> 大屏粒子特效生成。
2.  **抽奖链路**：导播台控制 -> 状态机切换 -> 算法筛选 -> 大屏三阶段动效展示。
3.  **管理链路**：名单导入 -> 数据清洗 -> 实时控制 -> 紧急重置。

---

## 2. 环境准备 (Pre-requisites)

### 2.1 硬件环境
* **大屏幕端**：高性能 PC (建议独立显卡)，连接 LED 大屏（或 1080P+ 显示器）。
* **导播台**：操作员笔记本电脑 (Chrome 浏览器)。
* **用户端**：准备至少 5 台不同型号的手机 (含 iOS/Android, 高端/低端机型)。

### 2.2 网络环境
* **局域网 (LAN)**：大屏 PC 必须连接有线网络。
* **Wi-Fi/4G**：手机端测试混合网络环境。
* **服务端**：Redis 与 Node.js 服务已启动，Socket 端口开放。

### 2.3 数据准备
* [ ] 导入测试用员工名单 Excel (含 1960-2005 不同年份出生，含 200 人以上数据)。
* [ ] 配置 7 个测试节目及对应的封面图。
* [ ] 配置 7 个奖项名称 (最佳创意、最佳视觉等)。

---

## 3. 详细测试用例 (Test Cases)

### 3.1 模块 A：身份验证与连接
| ID | 测试场景 | 操作步骤 | 预期结果 | 状态 |
| :--- | :--- | :--- | :--- | :--- |
| A01 | 员工扫码登录 | 微信扫码访问首页 | 1. 显示“请输入姓名”<br>2. 提交后进入首页，显示“已连接”绿灯 | ☐ |
| A02 | 导播台登录 | 访问 `/admin/director-console` | 1. 拦截跳转至登录页<br>2. 输入 `20268888` 后进入控制台 | ☐ |
| A03 | 大屏连接 | 访问 `/screen/display-mode` | 1. 全屏显示“马到成功”主视觉<br>2. 左下角“在线人数”实时更新 | ☐ |

### 3.2 模块 B：节目投票 (核心交互)
**前置条件**：导播台已开启某节目的“投票通道”。

| ID | 测试场景 | 操作步骤 | 预期结果 | 状态 |
| :--- | :--- | :--- | :--- | :--- |
| B01 | **明信片入场** | 导播开启投票通道 | 手机端节目卡片（明信片）**淡入并上滑**出现，伴随震动提示 | ☐ |
| B02 | **盖戳体验 (乐观UI)** | 拖动/点击底部“最佳创意”印章 | 1. **手机端**：印章手柄下压 -> 震动 -> 留下带有**用户昵称**的红色印迹 (Multiply模式)<br>2. **大屏端**：(<1s延迟) 底部飞出一颗金色粒子，击中对应节目，炸开金粉 | ☐ |
| B03 | 重复投票拦截 | 对同一节目投第二张票 | 手机端提示“该节目已评价”，无法盖第二个戳 | ☐ |
| B04 | 撤回/改票 | 点击卡片上已盖的印迹 | 1. 印迹消失，底部印章恢复高亮<br>2. 大屏端该节目热度值回落 (可选，或仅停止增长) | ☐ |
| B05 | **断网投票 (弱网)** | 手机开启飞行模式 -> 盖戳 -> 关闭飞行模式 | 1. 断网时：盖戳动画正常执行 (乐观UI)<br>2. 联网后：Socket 自动重连，大屏随后收到粒子动画 | ☐ |

### 3.3 模块 C：幸运抽奖 (全流程)
**前置条件**：已导入名单，导播台切换至“幸运抽奖”面板。

| ID | 测试场景 | 操作步骤 | 预期结果 | 状态 |
| :--- | :--- | :--- | :--- | :--- |
| C01 | 筛选逻辑验证 | 导播选择“第四轮 (属马)” | 导播台显示“当前奖池人数：X人” (需核对 X 是否等于 Excel 中属马人数 - 已中奖人数) | ☐ |
| C02 | **阶段 1：聚气** | 导播点击【准备】 | 大屏进入“星河旋转”状态，仅高亮显示属马员工的名字 | ☐ |
| C03 | **阶段 2：风暴** | 导播点击【开始】 | 大屏名字汇聚成“红色风暴”高速旋转，背景音效激昂 | ☐ |
| C04 | **阶段 3：揭晓** | 导播点击【停止】 | 1. 风暴炸裂<br>2. 红色卷轴展开<br>3. 弹出中奖者头像与姓名 (防抖动，只弹一次) | ☐ |
| C05 | 去重验证 | 第一轮中奖者张三，在第四轮再次被抽中 | **严重Bug**。系统应确保张三不在第四轮奖池中 (除非配置允许重复) | ☐ |

### 3.4 模块 D：全局控制与稳定性
| ID | 测试场景 | 操作步骤 | 预期结果 | 状态 |
| :--- | :--- | :--- | :--- | :--- |
| D01 | 紧急重置 | 导播点击【重置大屏】 | 大屏立即强制刷新，回到待机主页 (用于动效卡死时自救) | ☐ |
| D02 | **高并发压测** | 使用脚本或组织 20 人，每人每秒点击 5 次 | 1. Redis 票数统计准确 (无丢票)<br>2. 大屏 FPS 保持在 30 以上，无崩溃<br>3. Node 服务内存无溢出 | ☐ |

---

## 4. 视觉与体验验收标准 (Design QA)

* **色值检查**：
    * 主红：`#C21F30` (丹砂红)
    * 主金：`#F0C239` (香槟金)
* **明信片质感**：
    * 背景是否有棉纸纹理噪点？
    * "From/To" 是否为手写体且微微倾斜？
* **印章效果**：
    * 印迹是否使用了 `mix-blend-mode: multiply` (正片叠底)？
    * 印迹是否有随机旋转角度？
    * 印迹中是否包含“当前用户昵称”？
* **大屏特效**：
    * 粒子背景是否深邃且有层次感 (3D 景深)？
    * 抽奖名字是否有动态模糊 (Motion Blur)？

---

## 5. 故障应急预案 (Emergency Plan)

如果在现场测试或实际活动中出现以下问题，按此方案执行：

1.  **大屏白屏/卡死**：
    * *动作*：导播台点击“重置大屏”；若无效，按 F5 刷新大屏 PC 浏览器。
    * *话术*：主持人：“看来我们的系统也被大家的热情冲晕了头脑，正在重启能量场...”
2.  **手机端无法投票**：
    * *动作*：导播台广播“切换为备用通道” (实际上是重启 Socket 服务)。
    * *降级*：如果网络彻底瘫痪，改用“分贝仪”App 测现场欢呼声大小来决定奖项。
3.  **抽奖名单出错**：
    * *动作*：导播台手动输入中奖者 (假装系统抽出)，或切换为“全员随机模式”。

---
