# 测试用例 - 分诊排查系统(排查流程图管理) > **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 required`
3. 不写入数据库 | | 测试结果 | ⬜ 待测试 | --- | 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~TC-006、TC-011~TC-013 部分操作 | | 测试步骤 | 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 immutable`
2. 提示"请基于此模板复制为另一种用途"
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 required`
2. 不入库 | | 测试结果 | ⬜ 待测试 | --- | 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 范围 | > **待办提示**: > 1. 技术方案 v1.1 仍有 §3.2 节点类型、§3.3 按 purpose 校验、§4.1 DB 表 purpose 列、§5.1 API purpose 过滤、§6.2 状态机 triage_fallback、§11 指标 triage_conversion、变更记录等章节待补全(上次 429 中断)。 > 2. 本测试用例以 PRD v1.3 为权威验收源;技术方案补全后,接口用例(IT-*)的端点路径/字段以技术方案为准做一致性复核。 > 3. 管理后台菜单"排查流程图管理"建议更名为"分诊排查管理"(PRD §1.2、§7.1),菜单改造属独立任务。