分布式直播 WebSocket 测试验证清单
1. 测试目标
验证直播 WebSocket 在多节点部署场景下,用户端、主播端、在线态、广播、踢线、房间下线、商品讲解状态、房间状态是否保持一致。
2. 测试环境建议
- 至少 2 个
joolun-live-admin实例 - 所有实例共享同一个 Redis
- 所有实例共享同一个数据库
- 网关或负载均衡可将不同连接分发到不同实例
建议标记为:
- 节点 A
- 节点 B
3. 构建检查
执行以下命令确认工程可正常编译:
mvn -pl joolun-live/joolun-live-admin -am -DskipTests package
预期结果:
BUILD SUCCESS
4. 基础可用性验证
4.1 单节点基础能力
- 主播连接成功
- 用户连接成功
- 弹幕发送正常
- 房间上下线正常
- 商品讲解状态变更正常
4.2 双节点同时在线
- 主播连接到节点 A
- 用户 1 连接到节点 A
- 用户 2 连接到节点 B
- 确认两个节点都能正常收发消息
预期结果:
- 不同节点上的连接都能进入同一房间
- 房间消息和状态更新对两个节点均可见
5. 在线态验证
5.1 房间在线人数
- 用户 1 在节点 A 进入房间
- 用户 2 在节点 B 进入房间
预期结果:
- 房间在线人数显示为 2
- 两个节点看到的人数一致
- Redis 房间用户集合成员数正确
5.2 全局连接数限制
- 分别向不同节点持续建立用户连接
- 观察是否命中全局连接限制
预期结果:
- 超出上限后的新连接被拒绝
- 限流依据是全局总量,不是单节点局部数量
6. 跨节点广播验证
6.1 用户弹幕广播
- 用户 A 在节点 A 发送弹幕
- 用户 B 在节点 B 观察是否收到
- 主播端观察是否收到
预期结果:
- 同一房间所有在线用户和主播都能收到消息
6.2 主播消息广播
- 主播在任一节点发送房间消息、讲解消息或状态消息
- 观察另一节点用户是否收到
预期结果:
- 两个节点上的消息表现一致
7. 跨节点踢线验证
7.1 用户重复登录
- 同一个用户先连接节点 A
- 再使用同一账号连接节点 B
预期结果:
- 节点 A 上旧连接被踢下线
- 节点 B 上新连接保留
- Redis 中仅保留新连接信息
7.2 主播重复登录
- 主播先连接节点 A
- 主播再次连接节点 B
预期结果:
- 节点 A 上旧主播连接被踢下线
- 节点 B 上新主播连接接管成功
8. 房间状态验证
8.1 开播状态
- 主播在任一节点建立连接并满足开播条件
预期结果:
- 房间状态切换为
LIVING - Redis 房间状态被同步更新
8.2 停播状态
- 直播间处于直播中
- 所有主播连接断开
预期结果:
- 房间状态切换为
STOP - 不同节点看到的状态一致
8.3 结束状态
- 模拟直播结束时间已到或后台结束直播
预期结果:
- 房间状态切换为
FINISHED - 后续新主播连接被拒绝
9. 房间下线验证
9.1 管理端强制下线
- 房间用户分布在节点 A 和节点 B
- 主播也处于在线状态
- 调用
/liveroom/offline
预期结果:
- 所有用户和主播都收到房间下线消息
- 两个节点上的本地连接全部被清理
- Redis 在线态被同步清理
10. 商品讲解状态验证
10.1 跨节点讲解同步
- 主播在节点 A 开启某商品讲解
- 节点 B 用户观察讲解状态
预期结果:
- 节点 B 立即看到讲解状态变化
- Redis 讲解状态 Key 被同步更新
10.2 重复讲解指令去重
- 连续两次发送相同讲解状态指令
预期结果:
- 第二次不会产生无意义重复更新
11. 异常场景验证
11.1 节点异常重启
- 用户和主播分别连接在不同节点
- 重启其中一个节点
预期结果:
- 失效节点相关连接在超时后从 Redis 清理
- 其他节点连接不受影响
11.2 Redis 残留脏数据
- 人工制造过期或失效连接 Key
预期结果:
- 在线人数统计时可自动剔除失效成员
- 不会因为脏数据导致全局人数长期失真
12. 观测项
测试时建议同时观察以下内容:
- 应用日志
- Redis Key 变化
- 数据库直播间状态字段
- 前端连接状态
- 房间在线人数显示