facc04aa65
本提交为 .git 对象库损坏后的重建提交,内容等价于原先三个本地提交 (5e2fd4c2 / 57a53c98 / 5d7e1873)的累积结果,未做任何额外改动。 一、docs 结构整改(整改 #14) 根因:重构时新结构为 untracked 文件,执行 git stash(未带 -u)未纳入, 随后 git reset 拉回 HEAD 旧 tracked 树,导致旧树复活、新旧两棵目录 树并存于 docs/,共 791 文件、双分类体系冲突。 修复动作: - b2 同名异主题文件改名迁移保全 9 个 - C 类 39 个孤立文件按主题正确归类 - A/B1 类 222 个重复文件删除(新结构已有内容副本) - 9 个旧独有空目录删除 - 270 处内部引用按 verified 映射改写 - 整改记录 #14 登记于 04-运维文档/部署运维 结果:docs 791 → 569 文件,顶层仅规范 8 类 + 治理文件,单树恢复。 残留:约 20 处指向从未存在文件的陈旧死链,归入独立文档卫生任务。 二、compose 双目录对齐(消除踩坑 A) - docker-compose.yml:nginx 前端挂载全部由根目录 frontend-*/dist 改为 src/frontend-*/dist(h5 / agent / admin / terminal) - docker-compose.dev.yml:dev 服务 build context 与卷同步改 src/ - 效果:本地 docker compose up 不再把根目录 stale dist 挂回, 与线上一致,分叉隐患消除(已 docker compose config 校验通过) 防复发铁律: - 重构须提交;仓库修复须 git stash -u 或先 commit - 新结构须 git add 并提交,避免再次 untracked 复活 - H5 改动只动 src/frontend-h5/,禁改根目录遗留 frontend-*/
28 KiB
28 KiB
测试用例 - 分诊排查系统(排查流程图管理)
REQ编号: REQ-坐席-007 版本: v1.0 日期: 2026-07-28 作者: 宋献 关联文档:
- PRD:
01-产品文档/04-坐席工作台/PRD-REQ-坐席-007-分诊排查系统-v1.0.md(内容版本 v1.3,文件名存量保留 v1.0)- 原型:
01-产品文档/04-坐席工作台/原型-REQ-坐席-007-分诊排查系统-v1.0.html(v1.3)- 技术方案:
../../../02-技术文档/技术架构/技术方案-REQ-坐席-007-分诊排查系统-v1.0.md(v1.1,部分章节待补全)测试以 PRD v1.3 为权威验收源;技术方案 v1.1 当前仅完成 §3.1
purpose字段扩展,§3.2/§3.3/§4.1/§5.1/§6.2/§11 等章节待补齐(见文件末变更记录与第六章说明)。
一、用例汇总
| 类别 | 用例数 | 通过 | 失败 | 阻塞 |
|---|---|---|---|---|
| 功能测试(模板管理 CRUD 与预览) | 6 | 0 | 0 | 0 |
| 功能测试(节点编辑与 JSON 高级模式) | 2 | 0 | 0 | 0 |
| 功能测试(结构校验 · 按 purpose 区分) | 2 | 0 | 0 | 0 |
| 功能测试(草稿/发布/版本/回滚/停用) | 4 | 0 | 0 | 0 |
| 功能测试(导入导出) | 3 | 0 | 0 | 0 |
| 功能测试(操作审计) | 2 | 0 | 0 | 0 |
| 功能测试(purpose 字段管理) | 3 | 0 | 0 | 0 |
| 功能测试(问诊模板统一管理 · triage) | 1 | 0 | 0 | 0 |
| 功能测试(坐席执行:实例/推进/同步/暂停/结束) | 7 | 0 | 0 | 0 |
| 功能测试(模板选择策略:路由/兜底/切换/单实例) | 8 | 0 | 0 | 0 |
| 功能测试(员工自助与转人工) | 2 | 0 | 0 | 0 |
| 功能测试(权限矩阵) | 4 | 0 | 0 | 0 |
| 接口测试 | 8 | 0 | 0 | 0 |
| 回归测试 | 2 | 0 | 0 | 0 |
| 总计 | 54 | 0 | 0 | 0 |
二、功能测试用例
2.1 模板管理 CRUD 与预览(FR-01 / FR-02)
| TC-ID | TC-001 |
|---|---|
| 用例名称 | 列表搜索 · 名称/分类/状态组合筛选 |
| 前置条件 | 1) 登录管理后台(管理员账号) 2) 数据库已有 ≥5 条模板:含 troubleshooting/triage 两类 purpose、多个分类、含已发布/草稿/停用状态 |
| 测试步骤 | 1. 进入"运营配置 / 分诊排查管理"列表页 2. 在名称框输入关键词、分类下拉选一个值、状态选"已发布" 3. 观察返回集合 |
| 预期结果 | 1. 列表仅展示同时满足三个条件的模板 2. 空结果有引导文案,不报错 3. 列表按 purpose 分 Tab,当前 Tab 为 Troubleshooting 时只显示 troubleshooting 模板 |
| 测试结果 | ⬜ 待测试 |
| TC-ID | TC-002 |
|---|---|
| 用例名称 | 新建模板 · 必填基本信息与 purpose |
| 前置条件 | 管理员账号 |
| 测试步骤 | 1. 点击"新建模板" 2. 编辑器顶部"模板用途"不选择,直接填名称后提交 |
| 预期结果 | 1. 前端提示"请选择模板用途(排查流程/问诊对话)" 2. 后端返回 400 purpose required3. 不写入数据库 |
| 测试结果 | ⬜ 待测试 |
| TC-ID | TC-003 |
|---|---|
| 用例名称 | 复制模板 · 生成新草稿 |
| 前置条件 | 存在已发布 troubleshooting 模板 T1(v1.0) |
| 测试步骤 | 1. 在 T1 行操作点"复制" 2. 确认复制 |
| 预期结果 | 1. 生成一条状态=草稿的新模板 T2 2. T2 复制 T1 的 nodes、分类、说明,version=1 草稿 3. 审计日志新增 action=copy,target_id=T2 |
| 测试结果 | ⬜ 待测试 |
| TC-ID | TC-004 |
|---|---|
| 用例名称 | 编辑模板 · 修改基本信息 |
| 前置条件 | 存在草稿模板 T3 |
| 测试步骤 | 1. 编辑 T3,修改名称、分类、负责人、说明 2. 保存 |
| 预期结果 | 1. 数据库草稿字段更新 2. 审计日志新增 action=update,before/after 含变更字段 3. 不影响任何已发布版本快照 |
| 测试结果 | ⬜ 待测试 |
| TC-ID | TC-005 |
|---|---|
| 用例名称 | 双端预览 · 坐席端/员工端呈现 |
| 前置条件 | 存在含节点树的草稿模板 |
| 测试步骤 | 1. 点击"预览" 2. 切换"坐席端"/"员工端"视图 |
| 预期结果 | 1. 坐席端显示完整节点、分支、内部运维说明 2. 员工端隐藏敏感内部说明,只展示易懂步骤 3. 预览不影响草稿内容 |
| 测试结果 | ⬜ 待测试 |
| TC-ID | TC-006 |
|---|---|
| 用例名称 | 归档/停用 · 操作权与可见性 |
| 前置条件 | 存在已发布模板 T4 |
| 测试步骤 | 1. 行操作点"归档"(或"停用") 2. 确认 |
| 预期结果 | 1. 状态变更为归档/停用 2. 执行端不再返回该模板用于新启动 3. 审计日志新增 action=archive/disable 4. 历史执行实例仍可关联原版本快照 |
| 测试结果 | ⬜ 待测试 |
2.2 节点编辑与 JSON 高级模式(FR-03)
| TC-ID | TC-007 |
|---|---|
| 用例名称 | 节点树编辑 · 增删改节点与分支 |
| 前置条件 | 进入草稿模板节点编辑器 |
| 测试步骤 | 1. 新增一个 step 节点,连接前一个节点 2. 新增一个 decision 节点,配置是/否两个分支 3. 保存 |
| 预期结果 | 1. nodes[] 正确生成 root_node_id 与节点 ID 链条 2. 分支连线保存在节点 next 字段 3. 切换 JSON 模式能看到对应结构 |
| 测试结果 | ⬜ 待测试 |
| TC-ID | TC-008 |
|---|---|
| 用例名称 | JSON 高级模式 · 切换不丢数据 |
| 前置条件 | 已用节点树编辑生成 ≥3 个节点 |
| 测试步骤 | 1. 切到"JSON 高级模式" 2. 确认 JSON 与节点树结构一致 3. 在 JSON 中改一个节点文案,切回节点树 |
| 预期结果 | 1. 两种模式使用同一 Schema 2. 切换不丢数据、不篡改结构 3. 修改在双向同步 |
| 测试结果 | ⬜ 待测试 |
2.3 结构校验 · 按 purpose 区分(FR-04)
| TC-ID | TC-009 |
|---|---|
| 用例名称 | troubleshooting 校验 · 五类违例拒绝发布 |
| 前置条件 | purpose=troubleshooting 草稿 |
| 测试步骤 | 逐一构造:①无根节点 ②重复节点 ID ③缺失"否"分支 ④存在环路 ⑤无结束节点;每次点击发布 |
| 预期结果 | 1. 每种违例均拒绝发布并定位问题节点/连线 2. 后台返回 422 且 detail 指出具体规则 3. 节点数 ≤100、深度 ≤20 的限制同时校验 |
| 测试结果 | ⬜ 待测试 |
| TC-ID | TC-010 |
|---|---|
| 用例名称 | triage 校验 · 短结构强约束 |
| 前置条件 | purpose=triage 草稿 |
| 测试步骤 | 1. 构造节点数=12(超 10)尝试发布 2. 构造深度=5(超 4)尝试发布 3. 构造无结束节点或结束节点 result≠redirect 4. 构造标签不含 triage/intake |
| 预期结果 | 1. 节点数 >10 拒绝 2. 深度 >4 拒绝 3. 必须含结束节点且 result=redirect 否则拒绝 4. 标签必须包含 triage 或 intake,否则拒绝 5. 校验规则集与 troubleshooting 不同(按 purpose 加载) |
| 测试结果 | ⬜ 待测试 |
2.4 草稿/发布/版本/回滚/停用(FR-05)
| TC-ID | TC-011 |
|---|---|
| 用例名称 | 发布 · 生成不可变版本快照 |
| 前置条件 | 草稿结构校验通过 |
| 测试步骤 | 1. 点击"发布",填写版本说明 2. 确认 |
| 预期结果 | 1. 生成新版本快照(version=N),状态=已发布 2. 快照不可变,后续修改只能基于它复制新草稿 3. 执行端仅读取已发布且启用版本 |
| 测试结果 | ⬜ 待测试 |
| TC-ID | TC-012 |
|---|---|
| 用例名称 | 回滚 · 历史版本回滚为新草稿 |
| 前置条件 | 模板已有 v1.0、v1.1 两个版本 |
| 测试步骤 | 1. 进入版本历史,对 v1.0 点"回滚" 2. 确认 |
| 预期结果 | 1. 生成新草稿,内容复制自 v1.0 2. 原 v1.0/v1.1 版本仍保留不可变 3. 新草稿发布后产生新版本号(不覆盖历史) |
| 测试结果 | ⬜ 待测试 |
| TC-ID | TC-013 |
|---|---|
| 用例名称 | 停用 · 禁新启动但老实例可完成 |
| 前置条件 | 已发布模板 T5 有 1 个进行中执行实例 |
| 测试步骤 | 1. 停用 T5 2. 新会话搜模板 T5 |
| 预期结果 | 1. 搜索不返回 T5 2. 进行中实例仍可继续推进至结束 3. 审计日志新增 action=disable |
| 测试结果 | ⬜ 待测试 |
| TC-ID | TC-014 |
|---|---|
| 用例名称 | 版本隔离 · 执行中会话绑定原版本 |
| 前置条件 | 会话 S1 正在执行 T6 v1.0 |
| 测试步骤 | 1. 管理员发布 T6 v1.1 2. 观察 S1 与新会话 S2 |
| 预期结果 | 1. S1 继续执行 v1.0(实例固定绑定版本快照) 2. S2 新启动使用 v1.1 3. 历史路径不随发布失真 |
| 测试结果 | ⬜ 待测试 |
2.5 导入导出(FR-06)
| TC-ID | TC-015 |
|---|---|
| 用例名称 | 单条/全部导出 · 统一 JSON Schema |
| 前置条件 | 已有已发布模板 |
| 测试步骤 | 1. 单条模板点"导出" 2. 列表页点"全部导出" |
| 预期结果 | 1. 导出文件符合统一 Schema(nodes[] 扁平结构,非 root_node 旧结构) 2. 不含员工个人数据、真实凭据、生产密钥 3. 文件可被重新导入 |
| 测试结果 | ⬜ 待测试 |
| TC-ID | TC-016 |
|---|---|
| 用例名称 | 导入校验 · 错误定位到字段/节点 |
| 前置条件 | 准备一个含结构错误的 JSON(如缺失分支、重复 ID) |
| 测试步骤 | 1. 点"导入",选择该文件 2. 确认 |
| 预期结果 | 1. 导入失败,错误信息定位到具体字段/节点 ID 2. 不得静默丢弃字段后进入草稿 3. 前端提示可修正后重试 |
| 测试结果 | ⬜ 待测试 |
| TC-ID | TC-017 |
|---|---|
| 用例名称 | 导入缺省 purpose · 默认 troubleshooting |
| 前置条件 | 准备一个未声明 purpose 的合法模板 JSON |
| 测试步骤 | 1. 导入该文件 |
| 预期结果 | 1. 系统默认赋 purpose=troubleshooting 进入草稿 2. 草稿编辑器顶部"模板用途"显示"排查流程" 3. 不报错、不静默丢失 |
| 测试结果 | ⬜ 待测试 |
2.6 操作审计(FR-07)
| TC-ID | TC-018 |
|---|---|
| 用例名称 | 操作审计 · 全动作留痕 |
| 前置条件 | 完成 TC-002 |
| 测试步骤 | 1. 进入"操作审计"页 2. 按模板、操作者、动作、日期筛选 |
| 预期结果 | 1. 创建/修改/发布/停用/回滚/删除均留痕 2. 每条含 operator、action、target_id、before/after、created_at 3. 可按四维组合查询 |
| 测试结果 | ⬜ 待测试 |
| TC-ID | TC-019 |
|---|---|
| 用例名称 | purpose 变更审计 · 仅复制场景发生 |
| 前置条件 | 通过 TC-003 复制 troubleshooting 模板并改 purpose=triage |
| 测试步骤 | 1. 复制后修改用途为新草稿 2. 查看审计 |
| 预期结果 | 1. 审计含 purpose 由 troubleshooting→triage 的变更记录 2. 直接编辑已存在模板试图改 purpose 不产生审计(因为被 400 拒绝,见 TC-021) 3. 审计明确标注"通过复制新建改变用途" |
| 测试结果 | ⬜ 待测试 |
2.7 purpose 字段管理(FR-13)
| TC-ID | TC-020 |
|---|---|
| 用例名称 | 新建强制选 purpose |
| 前置条件 | 管理员进入新建流程 |
| 测试步骤 | 1. 不选择用途直接提交基本信息 |
| 预期结果 | 1. 前端/后端均拒绝,提示必选 2. 用途选项仅 troubleshooting / triage 两值 3. 默认不预选任何值 |
| 测试结果 | ⬜ 待测试 |
| TC-ID | TC-021 |
|---|---|
| 用例名称 | 事后不可修改 purpose · 返回 400 |
| 前置条件 | 已存在 purpose=troubleshooting 模板 T7 |
| 测试步骤 | 1. 调用编辑接口尝试将 T7.purpose 改为 triage 2. 提交 |
| 预期结果 | 1. 后端返回 400 purpose immutable2. 提示"请基于此模板复制为另一种用途" 3. 数据库字段不变 |
| 测试结果 | ⬜ 待测试 |
| TC-ID | TC-022 |
|---|---|
| 用例名称 | 列表按 purpose 分 Tab 与筛选 |
| 前置条件 | 同时存在 troubleshooting 与 triage 模板 |
| 测试步骤 | 1. 查看列表 Tab(Troubleshooting / Triage) 2. 切换 Tab |
| 预期结果 | 1. Troubleshooting Tab 仅显示 troubleshooting 模板 2. Triage Tab 仅显示 triage 模板 3. 表头显示当前模板 purpose 标识,避免误编辑 |
| 测试结果 | ⬜ 待测试 |
2.8 问诊模板统一管理(FR-14 / §5.4.8)
| TC-ID | TC-023 |
|---|---|
| 用例名称 | 问诊模板复用同一系统 · 无独立表/页/API |
| 前置条件 | 系统存在 code=triage_intake 的问诊模板 |
| 测试步骤 | 1. 检查数据库是否存在独立 triage 表 2. 检查前端是否新增"问诊模板管理"独立页面 3. 检查后端是否新增独立问诊 API |
| 预期结果 | 1. 无独立表,triage 与 troubleshooting 共用模板主表(靠 purpose 区分) 2. 无独立页面,triage 在分诊排查管理内 Triage Tab 维护 3. 无独立 API,复用同一套 CRUD/版本/执行/审计接口 |
| 测试结果 | ⬜ 待测试 |
2.9 坐席执行:实例/推进/同步/暂停/结束(FR-08~FR-12)
| TC-ID | TC-024 |
|---|---|
| 用例名称 | 创建会话级执行实例 |
| 前置条件 | 存在已发布启用模板,坐席在会话 S3 中 |
| 测试步骤 | 1. 坐席启动模板 2. 查看实例 |
| 预期结果 | 1. 生成执行实例,绑定 conversation_id、employee_id、agent_id、template_version_id、source 2. 实例状态=running,起始时间记录 3. 状态持久化(非纯前端本地态) |
| 测试结果 | ⬜ 待测试 |
| TC-ID | TC-025 |
|---|---|
| 用例名称 | 暂停 / 恢复 · 跨班次延续 |
| 前置条件 | S3 实例 running 在第 3 节点 |
| 测试步骤 | 1. 坐席点"暂停" 2. 重新进入会话点"恢复" |
| 预期结果 | 1. 实例状态=paused 时可被恢复 2. 恢复后回到第 3 节点,路径完整 3. 跨班次/断线后恢复同一实例 |
| 测试结果 | ⬜ 待测试 |
| TC-ID | TC-026 |
|---|---|
| 用例名称 | 服务端推进合法节点 |
| 前置条件 | S3 实例在 decision 节点 |
| 测试步骤 | 1. 坐席选择"是"分支 |
| 预期结果 | 1. 后端计算下一个合法节点并推进 2. 分支结果可追溯(写入节点执行日志) 3. 前端展示下一节点 |
| 测试结果 | ⬜ 待测试 |
| TC-ID | TC-027 |
|---|---|
| 用例名称 | 客户端不可跳至非法节点 |
| 前置条件 | S3 实例在节点 A |
| 测试步骤 | 1. 尝试直接请求跳到不连通的节点 Z |
| 预期结果 | 1. 后端拒绝非法跳转(节点 Z 非 A 的合法后继) 2. 返回 400/422,状态不前进 3. 不以客户端本地态为准 |
| 测试结果 | ⬜ 待测试 |
| TC-ID | TC-028 |
|---|---|
| 用例名称 | 双端实时同步 · P95 ≤ 2 秒 |
| 前置条件 | 坐席与员工处于同一执行实例 |
| 测试步骤 | 1. 坐席完成一个节点 2. 测量员工端显示相同进度的时间 |
| 预期结果 | 1. 正常网络下员工端 ≤2 秒内显示相同进度 2. 进度来自服务端推送(WebSocket 双通道) |
| 测试结果 | ⬜ 待测试 |
| TC-ID | TC-029 |
|---|---|
| 用例名称 | 断线重连 · 从服务端恢复 |
| 前置条件 | S3 实例在第 4 节点,客户端断线 |
| 测试步骤 | 1. 客户端断线后重连 |
| 预期结果 | 1. 从服务端恢复至第 4 节点 2. 历史路径完整,无重复或跳步 3. 状态以服务端为唯一事实源 |
| 测试结果 | ⬜ 待测试 |
| TC-ID | TC-030 |
|---|---|
| 用例名称 | 结束结果采集 · 必填 + 异常标记 |
| 前置条件 | S3 实例到达结束节点 |
| 测试步骤 | 1. 不填解决结果直接点结束 2. 正常填"已解决/未解决/转其他流程"结束 3. 异常退出时标记原因 |
| 预期结果 | 1. 未填解决结果时被拒绝(必填) 2. 正常结束写入结果、耗时、备注、终止原因 3. 异常退出可标记原因(如 client_crash) |
| 测试结果 | ⬜ 待测试 |
2.10 模板选择策略:路由/兜底/切换/单实例(§5.4)
| TC-ID | TC-031 |
|---|---|
| 用例名称 | 路由推荐直接启动 · 无二次确认 |
| 前置条件 | 路由层对会话 S4 输出高置信度默认模板 |
| 测试步骤 | 1. 路由给出推荐 2. 观察坐席端 |
| 预期结果 | 1. 默认模板直接启动,不弹"是否确认启动"二次确认 2. 排查栏立即出现(模板名/版本/当前节点/换其他模板入口) 3. 实例 source=ai_recommend |
| 测试结果 | ⬜ 待测试 |
| TC-ID | TC-032 |
|---|---|
| 用例名称 | 路由低置信度 · 显示提示 |
| 前置条件 | 路由层输出低置信度推荐 |
| 测试步骤 | 1. 路由给出低置信度默认模板 |
| 预期结果 | 1. 默认模板仍直接启动 2. 排查栏顶部显示"推荐置信度低,是否换其他模板?"提示 3. 手动覆盖入口可用 |
| 测试结果 | ⬜ 待测试 |
| TC-ID | TC-033 |
|---|---|
| 用例名称 | 路由无匹配 · 自动启动问诊模板(兜底 B) |
| 前置条件 | 路由层对会话 S5 无任何排查匹配 |
| 测试步骤 | 1. 路由层触发兜底 2. 观察坐席端 |
| 预期结果 | 1. 后端自动创建 source=triage_fallback 的 triage_intake 实例 2. 排查栏顶部显示"问诊中"标识 3. 问诊模板内容为标准短问题/是-否分支,帮助收敛方向 |
| 测试结果 | ⬜ 待测试 |
| TC-ID | TC-034 |
|---|---|
| 用例名称 | 手动切换模板 · 确认并结束当前实例 |
| 前置条件 | S4 已有 running 实例(ai_recommend) |
| 测试步骤 | 1. 坐席点"换其他模板" 2. 在确认弹窗点"确定切换" |
| 预期结果 | 1. 弹窗提示"切换模板将结束当前排查实例并开始新的实例,是否继续?" 2. 旧实例置 cancelled,reason=agent_switched_template 3. 新模板创建新实例,旧路径摘要保留在会话归档 4. 取消则保留当前实例 |
| 测试结果 | ⬜ 待测试 |
| TC-ID | TC-035 |
|---|---|
| 用例名称 | 单实例约束 · 同会话拒绝第二个 running |
| 前置条件 | S4 已有 running 实例 |
| 测试步骤 | 1. 路由层再次尝试自动启动 ai_recommend 实例 2. 坐席同时尝试手动启动 agent 实例 |
| 预期结果 | 1. 后端校验同一会话存在 running 实例,拒绝新的自动/手动启动(409 或 400) 2. 同一时刻仅一个活跃实例 3. 指标不被多实例污染 |
| 测试结果 | ⬜ 待测试 |
| TC-ID | TC-036 |
|---|---|
| 用例名称 | 问诊结束 · 回到标准模板选择(双轨复位) |
| 前置条件 | S5 的 triage_fallback 实例正常结束 |
| 测试步骤 | 1. 坐席结束问诊实例 2. 回到会话区 |
| 预期结果 | 1. 排查栏消失并恢复路由+手动双轨状态 2. 服务端复位路由状态,会话不被卡在兜底分支 3. 路由层可再次推荐新模板 |
| 测试结果 | ⬜ 待测试 |
| TC-ID | TC-037 |
|---|---|
| 用例名称 | 问诊不计入排查指标 · 仅计转化率 |
| 前置条件 | 系统有若干 triage_fallback 实例结束 |
| 测试步骤 | 1. 查询指标 troubleshooting_template_complete_total 与 resolved_total 2. 查询 troubleshooting_template_start_total{source=triage_conversion} |
| 预期结果 | 1. triage 实例不计入 complete_total 与 resolved_total 2. 仅计入 triage_conversion 转化率指标 3. 指标服务层硬编码 source=triage_fallback 排除逻辑生效 |
| 测试结果 | ⬜ 待测试 |
| TC-ID | TC-038 |
|---|---|
| 用例名称 | 跨模板跳转 · 仅坐席发起 |
| 前置条件 | S4 在 VPN 模板实例中 |
| 测试步骤 | 1. 路由层尝试自动从 VPN 跳到网络模板 2. 坐席手动从 VPN 切到网络模板 |
| 预期结果 | 1. 路由层不自动跨模板跳转(被禁止) 2. 坐席手动切换合法(走 TC-034 确认流程) 3. 跨模板跳转不污染原实例指标 |
| 测试结果 | ⬜ 待测试 |
2.11 员工自助与转人工(FR-11 / §6.3 #12)
| TC-ID | TC-039 |
|---|---|
| 用例名称 | 员工转人工 · 携带完整上下文 |
| 前置条件 | 员工在 H5 已完成 3 个节点仍未解决 |
| 测试步骤 | 1. 员工点"转人工" 2. 坐席接入查看 |
| 预期结果 | 1. 坐席收到执行摘要:模板版本、已完成节点、选择路径、员工备注 2. 不要求员工重复已完成步骤 3. 坐席可从当前节点继续或重新选模板 |
| 测试结果 | ⬜ 待测试 |
| TC-ID | TC-040 |
|---|---|
| 用例名称 | Triage 模板员工始终可见 · 不受部门/角色过滤 |
| 前置条件 | 员工登录 H5,其部门/角色不在任何排查可见范围 |
| 测试步骤 | 1. 员工查询可用模板列表 2. 检查 triage 模板是否在列 |
| 预期结果 | 1. purpose=triage 的模板始终在列表首位可见 2. 不受部门/角色/外部标签过滤影响 3. 作为路由无匹配时的兜底入口始终可用 |
| 测试结果 | ⬜ 待测试 |
2.12 权限矩阵(§8.2)
| TC-ID | TC-041 |
|---|---|
| 用例名称 | 越权保护 · 坐席调用创建/发布接口返回 403 |
| 前置条件 | 普通呼叫坐席账号登录 |
| 测试步骤 | 1. 坐席直接调用创建模板 / 发布模板接口 |
| 预期结果 | 1. 返回 403 Forbidden 2. 写入安全日志 3. 不创建/不发布任何内容 |
| 测试结果 | ⬜ 待测试 |
| TC-ID | TC-042 |
|---|---|
| 用例名称 | 并发编辑同草稿 · 后提交者 409 |
| 前置条件 | 两管理员 A、B 同时打开同一草稿 |
| 测试步骤 | 1. A 保存(携带旧 version 号) 2. B 在 A 之后保存(携带同一旧 version 号) |
| 预期结果 | 1. B 返回 409 Conflict 2. 提示"版本已变更,请刷新或比较差异" 3. 不覆盖 A 的提交 |
| 测试结果 | ⬜ 待测试 |
| TC-ID | TC-043 |
|---|---|
| 用例名称 | 员工可见范围 · 仅已发布 + triage 始终可见 |
| 前置条件 | 员工账号登录 |
| 测试步骤 | 1. 员工查询模板列表(管理端/H5) 2. 检查草稿、停用、归档模板是否可见 |
| 预期结果 | 1. 员工只见已发布且启用的 troubleshooting 模板(受可见范围过滤) 2. 但 purpose=triage 模板始终可见(不受过滤) 3. 草稿/停用/归档对员工不可见 |
| 测试结果 | ⬜ 待测试 |
| TC-ID | TC-044 |
|---|---|
| 用例名称 | 审计员查看审计日志 |
| 前置条件 | 审计员账号登录 |
| 测试步骤 | 1. 审计员进入操作审计页 |
| 预期结果 | 1. 可查看全部审计记录 2. 无创建/编辑/发布等操作权限 3. 可按要求按操作者/动作/模板/日期导出 |
| 测试结果 | ⬜ 待测试 |
三、接口测试
| TC-ID | IT-001 |
|---|---|
| 端点 | GET /api/admin/troubleshooting-templates?purpose=troubleshooting&status=published |
| 测试步骤 | 1. curl 调用(带管理员 token 与 X-Forwarded-For 白名单头) 2. 检查响应结构 |
| 预期结果 | 1. 200 OK 2. 响应为 {items:[...], total:N}(非裸数组,统一契约)3. items 仅含 troubleshooting 且已发布 |
| 测试结果 | ⬜ 待测试 |
| TC-ID | IT-002 |
|---|---|
| 端点 | POST /api/admin/troubleshooting-templates |
| 测试步骤 | 1. curl 创建未选 purpose 的模板 |
| 预期结果 | 1. 400 purpose required2. 不入库 |
| 测试结果 | ⬜ 待测试 |
| TC-ID | IT-003 |
|---|---|
| 端点 | PUT /api/admin/troubleshooting-templates/{id}/publish |
| 测试步骤 | 1. 对结构校验未通过的草稿调用发布 |
| 预期结果 | 1. 422,detail 指出具体结构违例 2. 不生成版本 |
| 测试结果 | ⬜ 待测试 |
| TC-ID | IT-004 |
|---|---|
| 端点 | GET /api/admin/troubleshooting-templates/{id}/versions |
| 测试步骤 | 1. 对已发布模板查版本历史 |
| 预期结果 | 1. 200,返回不可变版本快照列表(含 version/说明/发布人/时间) 2. 历史版本不可变 |
| 测试结果 | ⬜ 待测试 |
| TC-ID | IT-005 |
|---|---|
| 端点 | POST /api/admin/troubleshooting-templates/import |
| 测试步骤 | 1. 上传含重复节点 ID 的 JSON |
| 预期结果 | 1. 400/422,错误定位到节点 ID 2. 不静默丢字段进入草稿 |
| 测试结果 | ⬜ 待测试 |
| TC-ID | IT-006 |
|---|---|
| 端点 | DELETE /api/admin/troubleshooting-templates/{id} |
| 测试步骤 | 1. 删除已发布模板 |
| 预期结果 | 1. 按产品决策执行归档或硬删(以 PRD §11 开放问题"建议仅归档"为准) 2. 若归档,状态变更而非物理删除 3. 写审计 |
| 测试结果 | ⬜ 待测试 |
| TC-ID | IT-007 |
|---|---|
| 端点 | GET /api/troubleshooting-templates/available(员工/H5) |
| 测试步骤 | 1. 员工 token 调用可用模板列表 |
| 预期结果 | 1. 200,返回已发布 troubleshooting(受可见范围)+ 始终包含 triage 2. triage 不受部门/角色过滤 |
| 测试结果 | ⬜ 待测试 |
| TC-ID | IT-008 |
|---|---|
| 端点 | POST /api/troubleshooting-instances/start |
| 测试步骤 | 1. 对同一会话已存在 running 实例时再次发起启动 |
| 预期结果 | 1. 409(或 400)单实例约束拒绝 2. 不创建第二个活跃实例 |
| 测试结果 | ⬜ 待测试 |
四、回归测试
| TC-ID | RT-001 |
|---|---|
| 用例名称 | 深色表格可读性回归 |
| 前置条件 | 主题 = dark |
| 测试步骤 | 1. 打开模板列表、版本历史、操作审计等 el-table 视图 2. 检查偶数行、固定列、hover |
| 预期结果 | 1. 不复现 BUG-通用-001(白底白字) 2. 固定列与普通列底色一致,文字可读 |
| 测试结果 | ⬜ 待测试 |
| TC-ID | RT-002 |
|---|---|
| 用例名称 | 接口契约统一回归({items,total}) |
| 前置条件 | 管理端列表代码已统一消费分页结构 |
| 测试步骤 | 1. 浏览器 console 打开模板列表、版本历史、审计页 2. 检查是否仍把响应当数组 .map() |
| 预期结果 | 1. 不复现"后端返回 {items,total} 被前端当数组 .map()"的 TypeError 2. 列表正常渲染分页 |
| 测试结果 | ⬜ 待测试 |
五、测试完成判定
| 标准 | 要求 |
|---|---|
| 通过率 | 功能测试 44 条 + 接口测试 8 条 + 回归 2 条 = 54 条核心用例,100% 通过 |
| 阻塞 | 0 |
| 回归 | RT-001 / RT-002 必须通过 |
| 验收 | TC-033(兜底 B)/ TC-036(问诊结束复位)/ TC-037(问诊独立指标)/ TC-040(triage 可见性)必须覆盖,验证"一体两面"模型落地 |
| 验收 | TC-035(单实例约束)/ TC-034(手动切换确认)必须覆盖,验证指标防污染 |
| 备注 | 当前代码为演示型/半成品(后端 Mock、无 DB 持久化、H5 未注册路由、无 RBAC 鉴权),上述用例为目标态验收基线,需阶段 A~D 开发完成后执行 |
六、变更记录
| 日期 | 版本 | 变更内容 | 变更人 | 变更原因 | 影响范围 |
|---|---|---|---|---|---|
| 2026-07-28 | v1.0 | 初版 54 条用例:覆盖模板管理 CRUD/节点编辑/结构校验/purpose 区分/发布版本/导入导出/审计/坐席执行/路由策略(直接启动·兜底 B·手动切换·单实例)/员工自助/权限矩阵/接口/回归 | 宋献 | 配合 PRD v1.3、原型 v1.3 评审通过,补齐独立功能测试用例 | 分诊排查系统(REQ-坐席-007)全 P0 范围 |
待办提示:
- 技术方案 v1.1 仍有 §3.2 节点类型、§3.3 按 purpose 校验、§4.1 DB 表 purpose 列、§5.1 API purpose 过滤、§6.2 状态机 triage_fallback、§11 指标 triage_conversion、变更记录等章节待补全(上次 429 中断)。
- 本测试用例以 PRD v1.3 为权威验收源;技术方案补全后,接口用例(IT-*)的端点路径/字段以技术方案为准做一致性复核。
- 管理后台菜单"排查流程图管理"建议更名为"分诊排查管理"(PRD §1.2、§7.1),菜单改造属独立任务。