diff --git a/CDP_TESTING_HANDOFF.md b/CDP_TESTING_HANDOFF.md new file mode 100644 index 00000000..9a7e93ba --- /dev/null +++ b/CDP_TESTING_HANDOFF.md @@ -0,0 +1,373 @@ +# CDP Testing Handoff + +更新日期:2026-07-27 + +权威文件: + +- 测试计划:`/home/rogee/Projects/gochat/docs/qa/2026-07-15-cdp-user-function-test-plan.md` +- 测试报告:`/home/rogee/Projects/gochat/docs/qa/reports/2026-07-15-cdp-user-function-report.md` + +当前环境基线: + +- backend:`http://127.0.0.1:3000` +- frontend:`http://127.0.0.1:3036` +- fake:`http://127.0.0.1:9100` +- 当前可用管理员账号:`admin@gochat.local / changeme` +- 当前常用 Playwright 会话名:`gochat_qa` + +## 1. 已经做完的测试任务和测试进度 + +当前这轮 click-only CDP 验收,最新报告已追加到: + +- `11.840` + +本轮已完成的主要测试批次如下。 + +### 1.1 Captain 子链路:本批次已完成 + +报告范围: + +- `11.785` - `11.799` + +已覆盖内容: + +- Captain 收件箱连接 +- 工具页进入、创建弹窗、空校验、`Test connection` +- 自定义工具创建成功 +- Captain 设置页进入 +- 基础设置更新 +- 系统设置更新 +- 删除确认弹窗取消链路 +- Guardrails 页面进入与保存 +- Response guidelines 页面进入与保存 + +本批次 Captain 结论: + +- 页面主链路可达; +- 已发现若干真实问题,主要是: + - 首次列表请求 `301` + - 中英混杂 + - 删除确认文案对象错误 + +### 1.2 Reports:本批次已完成 + +报告范围: + +- `11.800` - `11.827` + +已覆盖内容: + +- Overview +- Conversations +- Agents overview / detail +- Labels overview / detail +- Inboxes overview / detail +- Teams overview / detail +- CSAT +- SLA +- Bot report + +本批次 Reports 结论: + +- 9 个可见报表页都已通过真实点击进入并留证据; +- 已确认的主要缺陷: + - `标签明细` 多项接口 `500`:见 `11.812` + - `团队明细` 多项接口 `500`:见 `11.823` + - 多个报告页仍有英文残留:`11.800`、`11.804`、`11.813`、`11.816`、`11.821`、`11.824` + - `机器人报告` 可正常加载并切换日期范围:`11.826`、`11.827` + +### 1.3 Activities / Campaigns:进行中 + +报告范围: + +- `11.828` - `11.840` + +已覆盖内容: + +- `活动 -> 在线聊天` +- `活动 -> 短信` +- `活动 -> WhatsApp` +- 三个页面的 `创建活动` 入口 +- WhatsApp 创建表单的收件箱/模板空结果 +- 在线聊天创建表单的: + - 收件箱选择 + - 发送者下拉 + - `仅在工作时间触发` 开关 + - `取消` 返回列表 + +本批次 Activities 当前结论: + +- 三个活动页都能通过真实点击进入; +- 共有问题: + - 页面同时渲染“示例活动卡片 + 空态” +- WhatsApp 特有问题: + - 页头和空态仍有英文 + - 收件箱、模板下拉都只返回 `未找到结果。` +- 在线聊天创建表单目前已经证明: + - `Test Website Inbox1` 可真实选中 + - 选中后会触发 `GET /api/v1/accounts/1/inbox_members/1 -> 200` + - 发送者下拉可展开,候选项有 `Bot / Super Admin / User01` + +### 1.4 进度总览 + +| 模块 | 当前状态 | 说明 | +|---|---|---| +| Captain | 本批次完成 | 见 `11.785` - `11.799` | +| Reports | 本批次完成 | 见 `11.800` - `11.827` | +| Activities / Campaigns | 进行中 | 见 `11.828` - `11.840` | +| Help Center | 未在本批次续测 | 旧报告有覆盖,当前可继续回到计划顺序 | +| Widget / public 入口 | 未在本批次续测 | 仍按高风险项处理 | +| 权限用户回归 | 未在本批次续测 | 仍属于后续待完成项 | +| `fake:ai` 相关链路 | 未完成 | 仍缺本地假服务支撑 | + +## 2. 未完成的测试任务 + +### 2.1 Activities / Campaigns 剩余任务 + +优先继续下面这些。 + +1. `在线聊天 -> 创建活动` + - 验证最小必填是否能解锁 `创建` + - 验证真实提交成功/失败链路 + - 验证创建后列表是否新增、状态是否正确 + +2. `短信 -> 创建活动` + - 继续测: + - 空校验 + - 最小必填解锁 + - 提交成功/失败 + - `取消` + +3. `WhatsApp -> 创建活动` + - 目前被表单数据缺口卡住: + - inbox 下拉无结果 + - template 下拉无结果 + - 若后续补齐数据或修复页面,需要继续测: + - 选择收件箱 + - 选择模板 + - 提交成功/失败 + +### 2.2 全量计划剩余任务 + +按计划文件第 9 节执行顺序,当前还没收尾的主要块: + +1. Help Center / Widget / public 入口 +2. Captain / Copilot 的真实 AI 效果链路 + - 需要 `fake:ai` +3. 权限用户回归 + - agent + - custom role + +### 2.3 当前已知高风险 / 预期阻断 + +这些不是“数据空态”,而是已经应按产品缺陷记录的问题: + +- Help Center 后台三页空白主区 +- super admin 入口失效 +- widget / public 稳定点击入口缺失 +- `标签明细` 报表多接口 `500` +- `团队明细` 报表多接口 `500` +- Activities 页“示例卡片 + 空态并存” +- `fake:ai` 尚未落地,Captain / Copilot 成功链路不能算完成 + +### 2.4 还需要补充的数据 / 测试支撑 + +下面这些没补齐时,很多页面只能做 `render-only` 或“入口可达”级别验证,不能算完整功能验收。 + +| 优先级 | 数据或支撑 | 当前作用 | +|---|---|---| +| P0 | 2 个可登录 agent | 分配、协作、在线状态、权限回归 | +| P0 | `fake_01` inbox 持续可收发 | 会话主链路、实时消息、fake 回流 | +| P0 | 1 个 website inbox(已带 `website_token`) | widget、campaign、public 入口 | +| P0 | 至少 6 个 conversations,且每个 3 条 messages | 列表、详情、筛选、报表 | +| P1 | labels 5 个、teams 2 个 | 标签/团队筛选、报表、自动化 | +| P1 | contacts 8+、companies 3+ | CRM 列表、搜索、关联、详情 | +| P1 | canned responses 3 条、macros 3 条、automation rules 3 条 | 设置页 CRUD、回复提效、规则链路 | +| P1 | custom attributes(contact / conversation / company 各 2 个) | 详情表单、筛选器、自动化条件 | +| P1 | Copilot fake provider | Copilot / Captain 页面联调 | +| P2 | Help Center portal/category/article 多条样本 | help center 后台/portal/public 完整验收 | +| P2 | campaigns 样本:live chat / sms / whatsapp 各至少 1 条 | 活动列表、编辑、启停、触发条件 | +| P2 | CSAT 5 条、SLA 2 条、notifications 5 条、audit logs 5 条 | 报表、通知、审计页 | +| P0 | `fake:ai` | Captain / Copilot 的成功 / 失败 / 超时 / 429 全链路断言 | + +## 3. 如何进行功能测试 + +### 3.1 环境初始化 + +当前默认启动方式: + +```bash +pnpm dev:backend +pnpm dev:frontend +GOCHAT_WEBHOOK_URL=http://127.0.0.1:3000/webhooks/fake/fake_01 FAKE_AUTO_REPLY=true pnpm fake:start +``` + +启动后至少确认: + +```bash +lsof -iTCP:3000 -sTCP:LISTEN -n -P +lsof -iTCP:3036 -sTCP:LISTEN -n -P +lsof -iTCP:9100 -sTCP:LISTEN -n -P +``` + +通过标准: + +- `3000` backend 在监听 +- `3036` frontend 在监听 +- `9100` fake 在监听 + +### 3.2 每回合测试前固定动作 + +每次继续浏览器测试前都做下面几件事: + +1. 检查 `npx` + +```bash +command -v npx +``` + +2. 重读技能文件 + +- `/home/rogee/.codex/skills/playwright/SKILL.md` +- `/home/rogee/.agents/skills/dogfood/SKILL.md` +- `/home/rogee/.agents/skills/dogfood/references/issue-taxonomy.md` + +3. 确认 Playwright 浏览器会话是否还活着 + +```bash +export CODEX_HOME="${CODEX_HOME:-$HOME/.codex}" +export PWCLI="$CODEX_HOME/skills/playwright/scripts/playwright_cli.sh" +"$PWCLI" list +``` + +4. 确认基础健康状态 + +```bash +curl -fsS http://127.0.0.1:3000/health +curl -fsS http://127.0.0.1:9100/health +``` + +### 3.3 测试约束限制 + +必须遵守的约束: + +1. 所有 dashboard 内部页面一律通过真实 UI 点击进入。 +2. 不允许直接打开: + - `/app/accounts/:id/...` 深层内部 URL +3. 允许直接打开的例外只有: + - `/app/login` + - widget/public 根入口 + - 必要的 fake / fake:ai 观察接口 +4. 页面能否“通过”必须以: + - 前端真实请求成功 + - UI 真实可用 + 为准,不是只看路由存在。 +5. 证据必须持续追加到同一份报告,不新开分散文档: + - `/home/rogee/Projects/gochat/docs/qa/reports/2026-07-15-cdp-user-function-report.md` + +### 3.4 浏览器上下文丢失时的恢复方式 + +如果页面脏了、会话句柄失效、或者 tab 已不可信,恢复方法是: + +1. 先确认 `3000 / 3036 / 9100` 都还活着。 +2. 不直接跳内部深链。 +3. 只允许重新打开: + - `/app/login` +4. 用已知管理员账号重新登录: + - `admin@gochat.local / changeme` +5. 登录后再通过真实点击链路回到目标页面。 + +当前这条恢复路径已经被多次证明可用。 + +### 3.4.1 环境脏了时允许直接重置 + +这轮测试不要求“硬扛脏环境”。如果出现下面任一情况,应该先重置再继续: + +- dashboard 持续出现 `正在重连...` +- `/cable` 持续断开或 401/403 +- 同一页面连续刷出大量 `429` +- fake 平台残留旧消息,导致新链路证据混淆 +- 浏览器 tab 已明显失真,无法判断是真 bug 还是脏状态 + +推荐重置顺序: + +1. 先重置 fake,不动前后端: + +```bash +curl -fsS -X POST http://127.0.0.1:9100/api/reset +curl -fsS http://127.0.0.1:9100/health +``` + +2. 如果 dashboard 仍持续抖动,再重启 backend: + +```bash +pnpm dev:backend +``` + +3. 只有在 Vite 白屏、热更新异常、或静态资源 5xx 时,才重启 frontend: + +```bash +pnpm dev:frontend +``` + +重置后恢复标准: + +- `http://127.0.0.1:3000/health` 返回 200 +- `http://127.0.0.1:9100/health` 返回 `{"status":"ok"}` +- 登录后不再持续出现 `/cable` 重连抖动 +- 当前目标页面可以重新通过点击链路进入 + +### 3.5 页面级留证要求 + +每个页面至少记录: + +- `page.url` +- `document.title` +- 关键文案 / 按钮存在性 +- console `error` / `warning` +- 关键 API 请求和状态码 +- 操作前后快照路径 +- 如果失败,要有: + - 复现路径 + - 请求 + - 响应 + - console + - 影响等级 + +### 3.6 推荐续测起点 + +如果下一位接手人要马上继续,不要重新选模块,直接从这里继续最省: + +1. 登录进入 dashboard +2. 点击: + - `活动 -> 在线聊天` +3. 点击: + - `创建活动` +4. 继续验证: + - 标题 / 消息 / 网址 的最小必填是否会解锁 `创建` + - 真实提交是否成功 + - 新建后是否回到列表并新增活动 +5. 若接手时当前页已脏,先走: + - fake reset + - `/app/login` + - 重新登录 + - 再点击回 `活动 -> 在线聊天 -> 创建活动` + +### 3.7 `fake:ai` 说明 + +当前 Captain / Copilot 的页面可渲染、列表/表单/设置链路已能测到一部分; +但真正的 AI 成功/失败/超时/429 链路,仍依赖本地 `fake:ai`。 + +在 `fake:ai` 没落地前: + +- Captain / Copilot 不要宣称“全量完成” +- 只能算页面级、表单级、请求级部分验收 + +## 4. 交接结论 + +当前最有价值的交接点不是“重新从头跑”,而是: + +1. 继续沿现有报告 `11.840` 往后追加; +2. 先把 `在线聊天 / 短信 / WhatsApp` 的创建链路彻底打完; +3. 再回到计划顺序,处理 Help Center / Widget / 权限用户回归; +4. 单独补 `fake:ai`,否则 Captain / Copilot 只能停在半验收状态。