Files
wecom_it_smart_desk/docs/03-测试文档/03-功能测试用例/TC-通用-002-快速回复规则后台管理.md
T
Simon 44e77dcb0e chore(docs): docs/ 目录全面重新编号 + 重组
**重构前**(旧编号 02-11):
- docs/02-产品需求/      → 00 产品规划/PRD
- docs/03-技术架构/      → 01-05 子目录散落
- docs/04-原型设计/      → 01-02 产品设计(HTML 原型)
- docs/05-原型设计/      → screens/
- docs/06-测试素材/      → 02-E2E / 03-功能 / 04-版本测试
- docs/07-项目管理/      → 任务说明书/日报/计划
- docs/08-安全审计/      → 审计报告
- docs/09-堡垒运维/      → toolbox / deploy
- docs/10-项目管理/      → 任务说明书(重复)
- docs/11-历史归档/      → deploy-nas-archived

**重构后**(新编号 00-07,语义化):
- docs/00-产品开发流程与文档管理规范.md
- docs/00-版本迭代总览.md
- docs/01-产品文档/      (PRD/原型/认证/会话/AI 服务/坐席/集成)
- docs/02-技术文档/      (技术方案/架构图/重构记录/前端改造/实现配置)
- docs/03-测试文档/      (E2E/功能用例/版本报告/缺陷单)
- docs/04-运维文档/      (部署运维/运维指南)
- docs/05-运营文档/      (品牌推广/用户手册)
- docs/06-安全审计/      (审计报告)
- docs/07-项目管理/      (任务说明书/日报/计划/看板)

**净收益**:
- 目录编号与产品文档管理规范对齐(按文档阶段 01-07 编号)
- 消除 02-产品需求 与 10-项目管理 的编号重叠
- 子目录按文档类型分组(如 01-产品文档/00-产品规划、01-产品文档/01-认证与登录)
- 把运维/安全/项目管理从 0X 散落改为 04/06/07

合计 494 文件 + 78495 行 / - 14076 行
2026-08-03 18:46:55 +08:00

17 KiB
Raw Blame History

测试用例 - 快速回复规则后台管理

REQ编号: REQ-通用-002 版本: v1.2 日期: 2026-07-28 作者: 宋献 关联文档:

  • PRD01-产品文档/00-产品规划/PRD-REQ-通用-002-快速回复规则后台管理-v1.2.md
  • 技术方案:02-技术文档/技术方案-REQ-通用-002-快速回复规则后台管理.md
  • 原型图:01-产品文档/01-02产品设计/快速回复规则后台管理-原型图.html
  • 部署文档:04-运维文档/快速回复规则后台管理-部署文档-v1.0.md (按命名规范存量豁免条款保留历史文件名及根目录位置)

一、用例汇总

类别 用例数 通过 失败 阻塞
功能测试(规则 CRUD 6 0 0 0
功能测试(审计日志) 4 0 0 0
功能测试(置信度三档) 3 0 0 0
功能测试(降级兜底) 2 0 0 0
功能测试(灰度开关) 2 0 0 0
功能测试(启动加载) 2 0 0 0
功能测试(前端集成) 3 0 0 0
功能测试(v1.2 UI 整理) 3 0 0 0
接口测试 4 0 0 0
总计 29 0 0 0

二、功能测试用例

2.1 规则 CRUD

TC-ID TC-001
用例名称 列表查询 - 按规则类型筛选
前置条件 1) 登录管理后台(账号 X
2) 数据库有 12 条 greeting + 33 条 routing_prefilter + 6 条 routing_target + 2 条已停用 规则
测试步骤 1. 进入"快速回复规则 > 规则列表"
2. 类型筛选取 greeting
3. 检查列表展示数
预期结果 列表展示 12 条 greeting 规则,关键词、优先级、状态、最后修改时间字段完整
测试结果 待测试

TC-ID TC-002
用例名称 单条查询 - 通过 ID
前置条件 已知数据库存在 id=1 的 greeting 规则
测试步骤 1. 进入"规则详情"
2. 输入 id=1
3. 检查返回字段
预期结果 返回规则完整字段(rule_type/category/keyword/priority/response_template/extra_data/is_active/created_at/updated_at
测试结果 待测试

TC-ID TC-003
用例名称 创建规则 - 合法参数
前置条件 1) 数据库无 rule_type=greeting, keyword="您好呀" 记录
2) 管理员账号权限完整
测试步骤 1. 进入"新建规则"
2. rule_type=greeting, keyword="您好呀", priority=10, response_template="您好,我是智能助手..."
3. 提交
预期结果 1. 数据库新增 1 条记录
2. 审计日志表新增 1 条 action=create, operator=当前账号
3. 前端 toast "创建成功"
4. 列表自动刷新
测试结果 待测试

TC-ID TC-004
用例名称 创建规则 - 关键词重复被唯一约束拒绝
前置条件 数据库已有 rule_type=greeting, keyword="你好" 记录
测试步骤 1. 新建规则,rule_type=greeting, keyword="你好"
2. 提交
预期结果 1. 后端返回 400 错误 IntegrityError / quick_rules_type_keyword_unique
2. 前端 toast "该规则类型下已存在相同关键词"
3. 不写入数据库
测试结果 待测试

TC-ID TC-005
用例名称 更新规则 - 修改 priority 与 response_template
前置条件 数据库存在 id=1 的 greeting 规则(priority=10
测试步骤 1. 编辑规则
2. 修改 priority=20、response_template="新模板"
3. 提交
预期结果 1. 数据库字段更新
2. 审计日志表新增 1 条 action=update, before={"priority":10,...}, after={"priority":20,...}
3. 缓存自动失效(下次查询读 DB 新值)
测试结果 待测试

TC-ID TC-006
用例名称 删除规则 - 二次确认
前置条件 数据库存在 id=5 的 routing_prefilter 规则
测试步骤 1. 行操作菜单点"删除"
2. 二次确认弹窗点"确定删除"
预期结果 1. 数据库删除该行(硬删或软删需在 PRD 中明确,本用例假设硬删)
2. 审计日志表新增 1 条 action=delete, before=完整快照
3. 前端列表自动消失该行
测试结果 待测试

2.2 审计日志

TC-ID TC-007
用例名称 创建规则自动写审计
前置条件 满足 TC-003 前置条件
测试步骤 1. 完成 TC-003 创建
2. 切换到"审计日志"页
3. 筛选 action=create
预期结果 1. 最新一条审计记录 operator=管理员账号、action=create、target_id=新规则 id、after=规则完整快照
2. created_at 与规则创建时间一致
测试结果 待测试

TC-ID TC-008
用例名称 更新规则自动写审计(保留 before/after
前置条件 完成 TC-005
测试步骤 1. 完成 TC-005 更新
2. 切换到"审计日志"页
3. 筛选 action=update
预期结果 审计记录含 before/after 两个 JSON,差异字段 priority 和 response_template
测试结果 待测试

TC-ID TC-009
用例名称 删除规则自动写审计(after=null)
前置条件 完成 TC-006
测试步骤 1. 完成 TC-006 删除
2. 切换到"审计日志"页
3. 筛选 action=delete
预期结果 审计记录含 before=完整快照、after=null
测试结果 待测试

TC-ID TC-010
用例名称 审计日志列表分页与筛选
前置条件 审计日志表有 ≥100 条记录
测试步骤 1. 进入"审计日志"页
2. 按 operator 筛选、按时间倒序
3. 翻页至第二页
预期结果 1. 倒序展示
2. 第二页数据正确(无重复、无缺失)
3. 筛选生效(仅显示指定 operator 的记录)
测试结果 待测试

2.3 置信度阈值三档

TC-ID TC-011
用例名称 置信度 ≥0.85 — 自动应用规则
前置条件 1) AI 引擎对用户消息"重置密码"返回 routing_confidence=0.92
2) routing_target 规则已配置"IT支持"分类,kfid 可用
测试步骤 1. 用户发送"重置密码"
2. 等待 3 秒
3. 检查 WS 双通道推送
预期结果 1. 收到 action=route_recommend 消息,含 target 信息
2. messages.reply_source 字段包含 "quick_rule" 标识
3. 前端路由卡片自动展示
测试结果 待测试

TC-ID TC-012
用例名称 置信度 0.5~0.85 — 进入待审核
前置条件 AI 引擎 routing_confidence=0.72(落在待审核区间)
测试步骤 1. 用户发送对应消息
2. 后端日志确认收到 AI 响应
3. 检查是否触发路由卡片
预期结果 1. 后端写 audit log action=pending_review, confidence=0.72
2. 前端自动展示路由卡片
3. 管理员后台"待审核列表"展示该条
测试结果 待测试

TC-ID TC-013
用例名称 置信度 <0.5 — 直接拒绝
前置条件 AI 引擎 routing_confidence=0.32
测试步骤 1. 用户发送对应消息
2. 等待 3 秒
预期结果 1. 走正常 AI 回复流程,触发任何快速规则相关推送
2. 后端 debug 日志标记 quick_rule.skipped: low_confidence=0.32
3. 审计日志表无该记录
测试结果 待测试

2.4 降级兜底

TC-ID TC-014
用例名称 quick_rules 表为空 — 业务不中断
前置条件 1) TRUNCATE quick_rules RESTART IDENTITY
2) 重启后端(load_all 重新加载)
测试步骤 1. 用户发送"打印机没墨"
2. 观察是否触发路由推荐
预期结果 1. 后端日志 "QuickRuleService 加载完成: greeting=0, routing_keywords=0, routing_targets=0"
2. 上层 routing_service 走 ROUTING_TARGETS 硬编码兜底
3. 用户仍收到 6 类业务路由卡片,业务不中断
测试结果 待测试

TC-ID TC-015
用例名称 routing_target 字段未配置 — 走硬编码兜底
前置条件 quick_rules.routing_target 表为空,但 greeting 和 routing_prefilter 有数据
测试步骤 1. 用户发送"想订机票"
2. Dify 命中 routing_prefilter 关键词 → business_category="行政"
3. 检查是否返回路由卡片
预期结果 1. 上层 routing_service 检测到 routing_targets={} 为空
2. 自动降级到 ROUTING_TARGETS["行政"] = 机票酒店前台
3. 用户收到正确的路由卡片
测试结果 待测试

2.5 灰度开关(QUICK_RULE_ENABLEDv1.1 新增)

TC-ID TC-016
用例名称 开关 = true — check_* 方法生效
前置条件 1) .envQUICK_RULE_ENABLED=true
2) 重启后端,确认 settings.quick_rule_enabled=True
3) greeting 规则存在关键词"你好呀"
测试步骤 1. 用户发送"你好呀"
2. 检查后端日志与前端回复
预期结果 1. check_greeting("你好呀") = True
2. 命中后直接返回规则 response_template
3. messages.reply_source"quick_rule"
测试结果 待测试

TC-ID TC-017
用例名称 开关 = false — check_* 全员旁路(秒级回退)
前置条件 1) .envQUICK_RULE_ENABLED=false
2) docker compose up -d backend 重启后端容器
3) greeting 规则存在关键词"你好呀"
测试步骤 1. 用户发送"你好呀"
2. 检查后端日志与前端回复
预期结果 1. check_greeting("你好呀") = False(旁路)
2. check_routing_keyword(...) = False(旁路)
3. 走正常 AI 回复流程(Dify 主对话)
4. 用户收到的回复不再是规则的固定模板
5. 业务不中断(仅失去快速规则拦截)
6. routing_target 仍由 routing_service 自带的 ROUTING_TARGETS 兜底
测试结果 待测试

2.6 启动加载

TC-ID TC-018
用例名称 lifespan 阶段 load_all 调通
前置条件 数据库初始化数据完整(53 条)
测试步骤 1. 冷启动后端容器
2. 等待 health check 通过
3. 读取启动日志
预期结果 1. 启动日志含 "QuickRuleService 加载完成: greeting=12, routing_keywords=33, routing_targets=6"
2. 数字与初始 SQL 完全一致
3. 无异常堆栈
测试结果 待测试

TC-ID TC-019
用例名称 QuickRuleAuditLog 表已注册到 models/__init__.py
前置条件 Alembic 已 upgrade 到 055 迁移
测试步骤 1. 启动后端
2. 用 psql 检查表结构
预期结果 1. quick_rule_audit_logs 表存在
2. 含 id/rule_id/action/operator/before/after/created_at 字段
3. (回归 BUG-REQ-002-A)若 models/__init__.py 未注册,该表将不创建,本用例为该 BUG 的回归保险
测试结果 待测试

2.7 前端集成

TC-ID TC-020
用例名称 列表页正确展示规则
前置条件 后端 quick_rules API 返回 12 条 greeting 规则
测试步骤 1. 使用 agent-browser 技能加载管理后台 URL /quick-rules
2. 输入账号密码登录
3. 等待列表渲染
预期结果 1. 表格展示 12 条记录
2. 复现 BUG-通用-001(深色表格白底白字)
3. 类型筛选、关键词搜索均可用
测试结果 待测试

TC-ID TC-021
用例名称 表单提交不报 .data undefined
前置条件 前端项目已 build 到 disthash 包含 2026-07-28 修复)
测试步骤 1. 进入"新建规则"
2. 填写表单,提交
预期结果 1. 复现 BUG-20260728-01sr.data undefined TypeError,拦截器已返回 inner data 时多取一层)
2. 提交成功 toast "创建成功"
测试结果 待测试

TC-ID TC-022
用例名称 选项点击只发 WS,不再本地立即加消息
前置条件 1) 前端 dist 已部署
2) 用户发"重置密码",AI 返回一组路由选项
测试步骤 1. 点击其中一个选项(如"行政-物业"
2. 观察消息流
预期结果 1. 前端本地立即添加消息
2. WS 收到对端推送后才添加到列表
3. processedMessageIds Set 去重生效(轮询补集不会重复)
测试结果 待测试

2.8 v1.2 UI 整理

TC-ID TC-027
用例名称 页面加载后顶部无 .stats-row 卡片
前置条件 管理后台 v1.2 前端页面已部署,管理员已登录
测试步骤 1. 打开 /itadmin/quick-rules
2. 等待页面和规则列表加载完成
3. 检查标签导航上方 DOM
预期结果 页面顶部不存在 .stats-row 及其 3 张规则统计卡片;筛选区和表格布局正常
测试结果 待测试

TC-ID TC-028
用例名称 标签导航徽标数字正确显示
前置条件 stats 接口返回 greeting=12、routing_prefilter=35、routing_target=6
测试步骤 1. 打开 /itadmin/quick-rules
2. 检查打招呼规则、路由关键词、路由目标三个标签的 count 徽标
预期结果 三个标签徽标依次正确显示 12 / 35 / 6,规则计数信息仅由标签导航徽标呈现
测试结果 待测试

TC-ID TC-029
用例名称 删除卡片后管理功能完整回归
前置条件 管理后台 v1.2 前端页面已部署,后端 quick-rules API 可用
测试步骤 1. 依次点击三个规则标签并检查表格加载
2. 执行筛选、搜索和分页
3. 验证批量删除、编辑、启停开关
预期结果 标签切换、表格加载、筛选、搜索、分页、批量删除、编辑和启停开关全部正常,无控制台错误
测试结果 待测试

三、接口测试

TC-ID IT-001
端点 GET /api/admin/quick-rules?type=greeting
测试步骤 1. 用 curl 调用
2. 检查响应
预期结果 200 OKitems.length=12,每项含 to_dict 全部字段
测试结果 待测试

TC-ID IT-002
端点 POST /api/admin/quick-rules
测试步骤 1. 用 curl 创建重复关键词规则(与 TC-004 同)
2. 检查响应
预期结果 400 BadRequestdetail 含 IntegrityError 描述
测试结果 待测试

TC-ID IT-003
端点 DELETE /api/admin/quick-rules/{id}
测试步骤 1. 用 curl 删除已删除的 ID
2. 检查响应
预期结果 404 NotFounddetail="规则不存在"
测试结果 待测试

TC-ID IT-004
端点 GET /api/admin/quick-rules/audit?operator=admin&page=2
测试步骤 1. 查询第二页审计日志(≥100 条假设)
2. 检查响应
预期结果 200 OKitems 含完整审计字段,total/page/size 正确
测试结果 待测试

四、回归测试

TC-ID RT-001
用例名称 深色表格可读性回归
前置条件 主题 = dark
测试步骤 1. 打开规则列表、审计日志、配置历史等所有 el-table 视图
2. 滚动检查偶数行、固定列、hover 状态
预期结果 不复现 BUG-通用-001(白底白字),固定列与普通列底色一致
测试结果 待测试

TC-ID RT-002
用例名称 拦截器 .data 层数一致性回归
前置条件 全部列表/详情接口
测试步骤 1. 浏览 8 个 quick_rules 相关视图(list/edit/audit/welcome/通用规则)
2. 浏览器 console 无 TypeError: Cannot read properties of undefined (reading 'data')
预期结果 不复现 BUG-20260728-01(已修复 7 处 .data 重复取数)
测试结果 待测试

五、测试完成判定

标准 要求
通过率 功能测试 25 条 + 接口测试 4 条 = 29 条核心用例,100% 通过
阻塞 0
回归 RT-001 / RT-002 必须通过
验收 TC-016 / TC-017(灰度开关)必须双跑:true / false 各一次

六、变更记录

日期 版本 变更内容 变更人 变更原因 影响范围
2026-07-28 v1.2 新增 TC-027~TC-029,覆盖顶部统计卡片移除、标签徽标计数及管理功能回归;核心用例由 26 条增至 29 条 宋献 验证 v1.2 UI 去重不影响既有功能 管理后台 /quick-rules 页面
2026-07-28 v1.1 新增 §2.5 灰度开关、§2.7 前端集成及第四章回归测试 9 条用例 宋献 配合部署文档 v1.1 同步发布 CRUD、审计、置信度、降级、灰度、启动及前端
2026-07-27 v1.0 初版基础 22 条用例 宋献 配合部署文档 v1.0 发布 快速回复规则后台管理基础功能