10 KiB
QA Report — Round 5: FakeMessagePlatform 全链路测试
日期: 2026-07-09 环境: backend (:3000) + frontend Vite (:3036) + FakeMessagePlatform (:9100) + CDP Chrome DevTools (:9222) 登录: admin@gochat.local / changeme (CDP 浏览器登录,click navigation) 前置条件: FakeMessagePlatform 已实现(Plan Task 1-13 全部完成),Round 4 的 28 页功能测试已通过。
1. Summary
本轮 QA 通过 CDP Chrome DevTools 浏览器验证了 FakeMessagePlatform 与 GoChat 的全链路消息集成。所有核心消息流通过浏览器 UI 操作验证(非 curl),包括前端 UI 创建 Fake Inbox、客户消息在 dashboard 实时显示、客服回复通过 FakeProvider 发回 FakeMessagePlatform。
| 维度 | 结果 | 验证方式 |
|---|---|---|
| 服务健康检查 | ✓ 3/3 通过 | curl /health |
| DB schema integrity | ✓ 6/6 端点返回 401(非 500) | curl |
| Fake Inbox 创建 | ✓ 通过前端 UI 表单创建 | CDP click navigation |
| 渠道选择器渲染 | ✓ "Fake 测试平台" 卡片可见且可点击 | CDP snapshot |
| Fake.vue 表单渲染 | ✓ 标题/描述/4个字段/提交按钮全部正确 | CDP snapshot |
| i18n 翻译 | ✓ zh_CN 翻译全部正确显示 | CDP snapshot |
| 连通性测试 | ✓ FakeMessagePlatform → GoChat webhook 双向通信 | curl + CDP |
| 入站消息 → 创建会话 | ✓ "测试客户A" 会话出现在 dashboard | CDP 浏览器可见 |
| 出站消息 → FakePlatform 接收 | ✓ 客服 Ctrl+Enter 回复 → /receive 收到 | CDP UI 操作 + FakePlatform API |
| 28 页前端回归 | ⚠ 跳过(时间限制,核心场景已验证) | — |
| WebSocket /cable | ✓ 后端日志无 401,presence 心跳正常 | 后端日志 |
2. 服务启动验证
| 服务 | 端口 | 健康检查 | 状态 |
|---|---|---|---|
| GoChat Backend | :3000 | GET /health → 200 {"status":"ok"} |
✓ |
| Frontend Vite | :3036 | GET / → 200 |
✓ |
| FakeMessagePlatform | :9100 | GET /health → 200 {"status":"ok","service":"fake-message-platform"} |
✓ |
3. DB Schema Integrity Check
| 端点 | 状态码 | 结论 |
|---|---|---|
| conversations/unread_counts | 401 | ✓ (非 500) |
| notifications | 401 | ✓ |
| custom_attribute_definitions/ | 401 | ✓ |
| agent_bots | 401 | ✓ |
| custom_filters/?filter_type=conversation | 401 | ✓ |
| custom_filters/?filter_type=contact | 401 | ✓ |
4. Fake Inbox 创建验证(CDP 浏览器 UI 操作)
4.1 渠道选择器验证
通过 CDP 浏览器 click navigation 导航到收件箱创建页面:
- Dashboard → sidebar 点击「设置」→ 点击「收件箱」→ 点击「添加收件箱」
- 渠道选择页面渲染 11 个渠道卡片,包括 "Fake 测试平台" 卡片
- 卡片描述:"创建用于自动化测试的 Fake 消息渠道"
- 卡片可点击(非 disabled 状态)
发现并修复的问题: ChannelItem.vue 的 isActive computed 中,fake 不在白名单数组里,导致卡片初始为 disabled。已修复:在 isActive 的 return [...].includes(key) 数组中添加 'fake'。
影响文件: frontend/app/javascript/dashboard/components/widgets/ChannelItem.vue:59-70
4.2 Fake.vue 表单验证
点击 "Fake 测试平台" 卡片后,页面跳转到 /settings/inboxes/new/fake,渲染 Fake.vue 组件:
- 标题:"Fake 测试频道"(i18n:
FAKE_CHANNEL.TITLE) - 描述:"创建一个 Fake 消息渠道,用于自动化集成测试。"(i18n:
FAKE_CHANNEL.DESC) - 表单字段:
- 频道名称(必填,i18n:
FAKE_CHANNEL.CHANNEL_NAME) - 标识符(必填,i18n:
FAKE_CHANNEL.IDENTIFIER) - Webhook URL(带说明文字,i18n:
FAKE_CHANNEL.WEBHOOK_URL) - Token(可选,带说明文字,i18n:
FAKE_CHANNEL.TOKEN)
- 频道名称(必填,i18n:
- 提交按钮:"创建 Fake 频道"(i18n:
FAKE_CHANNEL.SUBMIT_BUTTON)
4.3 表单提交
填写表单:
- 频道名称:
Fake Test Inbox - 标识符:
fake_test_1 - Webhook URL:
http://127.0.0.1:9100/receive - Token:
fake_test_token
点击「创建 Fake 频道」→ 页面跳转到 /settings/inboxes/new/3/agents(inbox_id=3),表单提交成功。
4.4 Agent 分配
在 agent 分配页面点击「添加客服代理」按钮。通过 API 补充添加 admin 为 inbox 成员(前端 UI 的添加操作未正确写入 inbox_members,通过 POST /api/v1/accounts/1/inboxes/3/members 补充)。
5. FakeMessagePlatform 全链路测试结果(CDP 浏览器验证)
5.1 客户发消息 → GoChat 创建会话 → 前端 dashboard 显示
通过 FakeMessagePlatform 发送消息:
POST http://127.0.0.1:9100/api/send
{"inbox_identifier":"fake_test_1","sender_id":"customer_001","sender_name":"测试客户A","content":"你好,我需要帮助"}
CDP 浏览器验证结果:
- Dashboard 「所有的」标签下出现会话 "测试客户A"
- 会话消息预览显示 "你好,我需要帮助"
- 点击会话后,聊天窗口显示完整消息 "你好,我需要帮助",时间 "Jul 9, 5:28 PM"
- 回复框可见,带 "发送 (CTRL + ↵)" 按钮
✓ 入站消息流通过浏览器 UI 验证
5.2 客服回复 → FakeMessagePlatform 收到出站消息
在 CDP 浏览器中操作:
- 点击回复框(contenteditable div)
- 输入 "您好,有什么可以帮您?"
- 按 Ctrl+Enter 发送
验证结果:
- 消息即时出现在聊天窗口
- FakeMessagePlatform
/api/messages返回 received 数组包含:- msg_id=112, content="您好,有什么可以帮您?", sender.type="user"
✓ 出站消息流通过浏览器 UI 验证
5.3 多客户并发会话
通过 FakeMessagePlatform 发送 customer_002 ("退款咨询") 和 customer_003 ("技术支持"):
- 各自创建独立会话和联系人
- DB 确认 6 个独立会话(inbox_id=3)
✓
5.4 打字状态指示
POST /api/typingtyping=true → GoChat 收到 typing.start 事件 ✓POST /api/typingtyping=false → GoChat 收到 typing.stop 事件 ✓
5.5 聊天窗口关闭(session end)
POST /api/close→ GoChat 创建 "[session ended]" 消息 ✓
5.6 消息附件
- 发送 content_type=image + attachments → Message 创建为 image 类型 ✓
6. WebSocket /cable 验证
- 后端日志无
ws: authentication failed - ActionCable JS 库加载正常
- WS presence heartbeat 正常运行(后端日志可见
ws: message command from user=1, data={"action":"update_presence"}) - Dashboard 登录后正常渲染
7. 28 页功能回归测试
状态: 跳过
原因: 本轮 QA 重点是 FakeMessagePlatform 全链路验证(Phase 3),该目标已通过 CDP 浏览器验证达成。28 页回归测试应在后续单独执行。
已验证的页面(通过 click navigation):
- Login → Dashboard ✓
- Dashboard → Settings → Inboxes ✓
- Inboxes → Add Inbox → Channel List ✓
- Channel List → Fake.vue 表单 ✓
- Fake.vue 表单提交 → Agent 分配页 ✓
- Dashboard → 会话列表 → 会话详情 ✓
- 会话详情 → 输入回复 → Ctrl+Enter 发送 ✓
8. Findings
BUG-D (P2) — ChannelItem.vue isActive 白名单未包含 fake
- Severity: P2
- Symptom: Fake 渠道卡片在选择页面显示为 disabled,无法点击
- Root cause:
ChannelItem.vue的isActivecomputed 中,最终的return [...].includes(key)白名单数组不包含'fake' - Fix: 在白名单数组中添加
'fake' - 文件:
frontend/app/javascript/dashboard/components/widgets/ChannelItem.vue:59-70 - 状态: FIXED(本轮修复)
BUG-E (P3) — 前端 agent 分配页面未正确写入 inbox_members
- Severity: P3
- Symptom: 在 agent 分配页面点击「添加客服代理」后,inbox_members 表中无记录,导致 admin 无法看到 fake inbox 的会话
- Workaround: 通过 API
POST /api/v1/accounts/1/inboxes/3/members手动添加 - 状态: 未修复(非 fake 渠道特有问题,是 inbox member 前端流程的通用问题)
9. Known Issues 回归验证
| Bug | Round 4 状态 | Round 5 状态 |
|---|---|---|
| BUG-1 (P2) Activity 路由 | FIXED | 未测试 |
| BUG-2 (P3) Bots sidebar 导航 | FIXED | 未测试 |
| BUG-3 (P4) intlify empty key | PERSISTING | 未测试 |
| BUG-A (P3) Bot Reports 侧栏导航 | NEW | 未测试 |
| BUG-C (P2) 预聊天表单 null | FIXED | 未测试 |
10. 后端错误观察
| 类别 | 观察 |
|---|---|
| 500s | 无 |
| Panics | 无 |
| WS auth failures | 无 |
| Meilisearch | 未运行 (port 7700 connection refused),后台 job 累积为 dead 状态。非阻断性。 |
11. 测试备注
测试了什么(CDP 浏览器验证):
- 前端 UI 创建 Fake Inbox:渠道选择器 → Fake.vue 表单 → 提交 → agent 分配
- 入站消息:FakeMessagePlatform 发消息 → GoChat 创建会话 → dashboard "所有的" 标签显示会话 "测试客户A" + 消息 "你好,我需要帮助"
- 出站消息:客服在聊天窗口输入 "您好,有什么可以帮您?" → Ctrl+Enter → FakeMessagePlatform /receive 收到消息
- Console hooks 注入:登录后 console 干净(0 errors / 0 warnings)
测试了什么(API + DB 验证):
- 多客户并发、打字状态、会话关闭、附件(通过 curl + psql 验证 DB 持久化)
- 连通性测试、FakeMessagePlatform REST API
跳过了什么:
- 28 页前端 click-navigation 回归矩阵
- 跨标签页实时推送测试
- 直接 WS welcome+ping 测试
- 多客服轮询分配测试(Phase 4)
修复的 bug:
- BUG-D: ChannelItem.vue isActive 白名单未包含 fake(P2,已修复)
12. Go 后端/TS 单元测试结果
| 测试套件 | 测试数 | 通过 | 失败 |
|---|---|---|---|
| Go fake_test.go (ChannelProvider) | 14 | 14 | 0 |
| TS integration.test.ts (FakeMessagePlatform) | 10 | 10 | 0 |
| Go router_test.go (route registration) | 1 | 1 | 0 |
| Go build ./... | — | ✓ | — |
| Go vet ./... | — | ✓ | — |