Files
gochat/docs/qa/2026-07-09-qa-report-round5.md
T
2026-07-09 18:14:45 +08:00

10 KiB
Raw Blame History

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 导航到收件箱创建页面:

  1. Dashboard → sidebar 点击「设置」→ 点击「收件箱」→ 点击「添加收件箱」
  2. 渠道选择页面渲染 11 个渠道卡片,包括 "Fake 测试平台" 卡片
  3. 卡片描述:"创建用于自动化测试的 Fake 消息渠道"
  4. 卡片可点击(非 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)
  • 提交按钮:"创建 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 浏览器中操作:

  1. 点击回复框(contenteditable div)
  2. 输入 "您好,有什么可以帮您?"
  3. 按 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/typing typing=true → GoChat 收到 typing.start 事件 ✓
  • POST /api/typing typing=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 的 isActive computed 中,最终的 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 ./... — ✓ —