Files
EchoChat/.playwright-mcp/task16/manual-regression.md
bujinyuan 5ed14c2aac docs(meeting): Task 16 E2E 剧本落盘 + .gitignore 精细化
Playwright MCP 4 场景剧本(.playwright-mcp/task16/):
- README.md:总览 + 账号/环境/资源断言指南
- scenarios/01-create-and-join-by-code.md:创建→会议号加入→媒体打通→结束,含 Redis/MySQL/media-server 三维资源断言
- scenarios/02-invite-link-with-password.md:邀请链接带密码 + P0-4 "密码不走 URL query" 回归
- scenarios/03-notify-quickjoin.md:通知中心「立即加入」跳转 + 过期卡片降级
- scenarios/04-host-toolkit-and-transfer.md:主持人四件套 + 宽限期重连/到期自动转让(P1-1 原子性 + P1-7 处理锁验证)
- scenarios/05-reopen-5times-resource-cleanup.md:反复开关 5 次 + 前端 heap 快照/ Redis 累积对比/ media-server 观测端点对比,验证 Step A(f5ae095)资源清理修复

手工回归点(manual-regression.md):17 项 MCP 难以稳定覆盖的交互场景
(HTTPS 自签 / 跨网段 iOS / 网络抖动 / 物理返回 / 跨 tab 并发 / 摄像头抢占 等)

.gitignore 调整:
- 放行 .playwright-mcp/task16/ 下的 Markdown 剧本文档进入版本控制
- 仍忽略运行时产物(*.log/*.png/*.yml/截图)
- task15/ 保持未跟踪状态,避免历史截图噪声入库

Made-with: Cursor
2026-04-23 17:21:42 +08:00

40 lines
4.3 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.

# Task 16 手动回归点清单
> Playwright MCP 难以稳定覆盖的交互场景,由开发者手工在 HTTPS 环境过一遍并记录结论。
> 状态列:✅ 通过 / ❌ 失败 / ⏳ 待跑 / 不适用
| # | 场景 | 操作步骤 | 期望 | 状态 | 备注 |
|---|---|---|---|---|---|
| M1 | HTTPS 自签证书首次允许 | Chromium 打开 `https://localhost:5173/` → 点「高级」→「继续访问」→ 依次放行摄像头/麦克风 | uni-app 首页正常渲染;控制台无 Mixed Content 告警 | ⏳ | Playwright 多 context 需预注入证书信任 |
| M2 | iOS Safari 真机跨网段入会 | 手机浏览器Safari / 微信内置)访问 `https://<局域网 IP>:5173` → 扫码加入会议 | 音视频双向打通;`NetworkBadge` 显示 3 条绿波浪 | ⏳ | iOS Safari `srcObject` 行为与 Chromium 存在差异 |
| M3 | 网络抖动WS 断开 20s 后恢复 | 会议中开发者工具切到 Offline等 20s 后恢复 Online | 无声无画面约 5s 后自动 resume`remoteConsumers` 索引无漂移;不重复出现「其他用户」 | ⏳ | 关联 Task 14 `reconnect` 路径 |
| M4 | 网络抖动WS 断开 > 2 分钟 | Offline 维持 130s 后 Online | 被服务端视为宽限到期Alice主持人转让给 Bob本地 UI 跳回首页 | ⏳ | 场景 04 路径 B 的手工版 |
| M5 | 物理返回按钮离会 | 会议进行中按浏览器 / 手机物理返回 | `onUnload` 触发 `leave()` → REST `leaveRoom` 成功 → 本地资源释放 | ⏳ | 关注 `pages/meeting/room.vue` onUnload |
| M6 | 结束页停留久后返回 | 主持人结束 → 停在「会议已结束」提示页 5 分钟 → 再点返回 | `exitEndedRoom` 触发pinia state 重置;再次入会无残留 | ⏳ | **Step A F1 核心回归** |
| M7 | 跨 tab 并发入同一会议 | Alice tab 入会后复制 URL 到新 tab 再次打开 | 新 tab 命中"已在此会议中"保护;点提示按 `cleanupStaleMeetings` 自动清理后重试入会 | ⏳ | 关联 Task 11 `ErrAlreadyInMeeting` |
| M8 | 摄像头被系统抢占 | 入会后用其他应用抢占摄像头(如 FaceTime | UI 显示占位封面 + 「摄像头被占用」toast会议不崩溃释放后可重新开摄像头 | ⏳ | `NotReadableError` 分支 |
| M9 | 浏览器关闭/崩溃恢复 | 入会后直接 kill 浏览器进程,重启后重新登录并入同会 | 残留 participant 通过 `cleanupStaleMeetings` + 自动重试加入恢复 | ⏳ | 与 M7 互补 |
| M10 | Chat 面板 - 长消息发送 | 在会议中聊天面板发送 5000 字消息 | 服务端拒绝 `msg too long`(期望 P2 新增限制)或前端提前拦截 | ⏳ | 对应 P2-7 |
| M11 | 邀请 token 超时但会议仍存在 | 手工 SQL 将 `meeting_invites.expired_at` 改为过去时间 → 访问邀请链接 | 预览页显示「邀请已过期」,不允许加入;点「重新申请」可弹窗 | ⏳ | 对应 §6.4 |
| M12 | 主持人关闭摄像头但麦克风保留 | 会议中点视频开关 → 仅摄像头关闭 | 自己画面占位 + 工具栏视频按钮变灰;音频仍正常;其他成员成员面板图标同步 | ⏳ | 对应 Task 15 状态 |
| M13 | 静音氛围色 | Alice + Bob + Carol 全员关麦 | 工具栏背景切蓝色渐变;有任何一人开麦则复位 | ⏳ | Task 15 原创特色 4 |
| M14 | 说话者流光轮廓 | Bob 说话 ≥0.5s | Bob 视频 tile 出现流光边框;停 1s 后消失 | ⏳ | Task 15 原创特色 1 |
| M15 | 图钉 / 浮窗切换 | 桌面端点自视频浮窗的图钉图标 | 自视频从浮窗切回 2×2 宫格格子;再点一次返回浮窗 | ⏳ | Task 15 原创特色 3 |
| M16 | 无网情况下直接访问会议 | 断网后访问会议首页 | 友好错误提示Retry 可恢复 | ⏳ | 通用容错 |
| M17 | 高延迟网络150ms+ + 1% 丢包) | DevTools Throttling 选 `Slow 3G`;入会并说话 | 音视频可连通(降级);不崩溃;`NetworkBadge` 波浪数降为 1-2 | ⏳ | 生产近似网络 |
## 手工验证数据记录模板
每次跑完某一条,在 `docs/reports/test-report-phase2e-2-meeting.md` 填入:
```md
### M<编号> 验证记录
- 执行时间2026-04-xx HH:MM
- 环境Chromium 126 / macOS 25.3.0 / HTTPS 自签
- 结论:✅/❌
- 截图证据:`.playwright-mcp/task16/manual/M<编号>.png`
- 异常描述(若 ❌):...
- 修复动作:...
```