0042519f66
【触发】 2026-08-12 09:00 早班巡检:jumpserver-V2 容器内 `python urllib` 绕开 nginx 直测 FastAPI(backend:8000): - /test-ping 200 pong - /test-error 200 "服务器内部错误" - /version 200 1.1.0(含 git hash) - /openapi.json 404(P0-NEW11 已闭环) 真实风险:公网 404 全部依赖 nginx 边缘层兜底;若 nginx 配置被误改 / 失效 / 容器间网络可达 backend:8000,攻击者可拿到 3 个调试端点。 【修复(v1.0 + v1.1 二次修复)】 1. 新建 src/backend/app/api/debug.py 集中 3 个调试端点(/api/debug/ping /error /version),加双重门控: - 模块级:main.py `if _is_dev_mode():` 块内 include_router(debug_router) - 端点级:每个端点内部 _is_dev_mode() 二次校验(防 fail-open) 2. 删除 main.py 散落的 /test-ping /test-error /version 3. debug.py 的 _is_dev_mode() 委托 main.py:48 单一真源(避免三处定义漂移) 4. 【v1.1 二次修复】_is_dev_mode() / _dev_mode_enabled() 改为 app_env 优先: - 优先级 1: app_env=="production" → 永远 False(即使 DEV_MODE=true) - 优先级 2: 非 production → 看 DEV_MODE / settings.dev_mode 同步修复 main.py + dev_auth.py(两个独立实现不能漏一处) 5. tests/conftest.py enable_dev_mode fixture 同步设 APP_ENV=development (避免 dev 测试 case 因 app_env 默认 production 而 fail) 【验证(公网 + 容器内)】 - 公网 12 端点:3 旧端点 404 + 3 新端点 404 + 3 dev 403(nginx IP 白名单)+ 1 health 200 + 3 P0-NEW11 404 ✅ - 容器内直连 backend:8000 6 端点:100% 4xx ✅(用户原话真实风险场景) - 回归测试 10 passed + 1 skipped(psutil 缺包) 【部署】 jumpserver-V2 PSFTP + sudo cp + chown admin:admin + 清理 __pycache__ + docker restart wecom_it_backend v1 部署:10:48 v2 部署:10:55(app_env 优先修复后) 【关联】 - 缺陷单:docs/03-测试文档/05-缺陷单/BUG-安全-005-调试端点无门控-001.md - 看板:项目状态看板 v1.9.7-DRAFT P0-NEW12 ✅ 已修复 - 工作日志:.workbuddy/memory/2026-08-12.md - MEMORY 铁律:.workbuddy/memory/MEMORY.md「调试端点铁律」5 条
测试质量文档分类索引
版本: v2.0 | 生效日期: 2026-08-05 | 维护人: Duckula
本目录包含 IT 智能服务台项目的所有测试相关文档。按类型分类,便于查阅和维护。
历史版本:v1.0(2026-07-14)已归档为
README.v1.archive.md
📁 文档分类结构
docs/03-测试文档/
├── 00-测试规范/ # 测试方法论、流程、规范
│ ├── 测试方法论指南.md # v1.0(2026-07-14)
│ └── 测试套件全景.md # v1.0(2026-08-05 新建)⭐
│
├── 01-综合报告/ # 合并汇总类报告
│ └── QA_COMPREHENSIVE_REPORT.md
│
├── 02-E2E测试/ # 端到端测试
│ ├── E2E-CHECKLIST-v0.7.0.md # v0.7.0 验收清单(扫码登录+MFA)
│ ├── 方案A-消息发送延时-E2E验证报告-20260708.md
│ └── e2e-screenshots/ # 截图证据
│
├── 03-功能测试用例/ # 按需求/功能分类
│ ├── TC-REQ-认证-统一认证与登录-v1.0.md
│ ├── TC-REQ-通用-005-选项选择持久化-v1.0.md
│ ├── TC-REQ-AI-004-AI回复来源标识.md
│ ├── TC-REQ-用户-007-自助诊断面板优化.md
│ ├── TC-通用-004-敏感词检测.md # 含 §10 鉴权章节(BUG-通用-004)
│ ├── TC-通用-002-快速回复规则后台管理.md
│ ├── TC-坐席-007-分诊排查系统.md
│ ├── TC-用户-006-智能推荐重构.md
│ ├── TC-用户-005-头像菜单退出.md
│ ├── TC-用户-008-H5结束会话失败回归-v1.0.md
│ ├── TC-集成-002-分配模式Tab收编.md
│ ├── TESTING_CALL_AGENT.md
│ ├── 测试/Token多IP异常检测测试用例.md
│ └── 会话存档功能-测试用例.md
│
├── 04-版本测试报告/ # 按日期/版本分类
│ ├── Tier0-测试报告-20260708.md
│ ├── Tier1-测试报告-20260708.md
│ ├── P0串联+P2可视化-测试报告-20260708.md
│ ├── OTP绑定-测试报告-20260708.md
│ ├── RBAC-BugFix-测试报告-20260707.md
│ ├── 看板验真-测试报告-20260707.md
│ └── 知识迭代Bug修复报告-20260711.md
│
├── 05-缺陷单/ # P0/P1/P2 缺陷归档
│ ├── README.md # 缺陷单索引
│ ├── BUG-通用-004-敏感词API无鉴权-001.md # 本次修复
│ ├── BUG-通用-快速回复规则-路由目标筛选500-002.md
│ ├── BUG-通用-用户角色分配表格看不清-001.md
│ ├── BUG-AI-打印机安装路由错误-001.md
│ ├── BUG-坐席-002-选项汇总标签缺失-001.md
│ ├── BUG-坐席-图片预览刷新-001.md
│ ├── BUG-用户-H5请求超时-002.md
│ ├── BUG-用户-H5结束会话失败-003.md
│ └── BUG-用户-坐席离线未限制呼叫人工-001.md
│
├── README.md # 本文件(v2.0)
└── README.v1.archive.md # 旧版归档
📋 测试统计汇总(v2.0 / 2026-08-05)
| 指标 | 数值 | 说明 |
|---|---|---|
| 测试文档总数 | 39 | 13 TC + 7 TR + 9 BUG + 4 索引/README + 1 测试方法论 + 1 测试套件全景 + 4 综合 |
| 测试文件总数 | 78 | src/backend/tests/ 下(含子目录) |
| 测试用例总数 | 1403 | pytest 收集,含 3 个 collection 错误文件 |
| 通过率 | 93.4% | 1311 passed / 88 failed / 4 xfailed(最近一次基线 2026-08-05) |
| TC | 13 | 按需求/功能分类 |
| TR | 7 | 按版本/日期分类 |
| BUG 单 | 9 | P0/P1/P2 归档 |
| 自动化生成 | ✅ | scripts/test_inventory.py(手动重跑 + CI 钩子待补) |
📈 与 v1.0 (2026-07-14) 对比:
- 测试文档:12 → 39(+225%)
- 测试用例:200+ → 1403(+602%)
- 通过率:~95% → 93.4%(-1.6pp,新增覆盖已暴露的 88 个 collection 错误)
📚 文档清单总览
| 分类 | 文档名称 | 测试范围 | 状态 |
|---|---|---|---|
| 测试规范 | 00-测试规范/测试方法论指南.md |
测试策略、流程、CI/CD | ✅ 生效中 |
| 测试规范 | ⭐ 00-测试规范/测试套件全景.md |
pytest 套件全景(78 文件 / 1403 用例) | ✅ v1.0(2026-08-05) |
| 综合报告 | 01-综合报告/QA_COMPREHENSIVE_REPORT.md |
P2/P3 + WebSocket + 坐席 v5.3 | ✅ 通过 |
| E2E 测试 | 02-E2E测试/E2E-CHECKLIST-v0.7.0.md |
扫码登录 + MFA + P0/P1 合规 | ✅ 通过 |
| E2E 测试 | 02-E2E测试/方案A-消息发送延时-E2E验证报告-20260708.md |
WS 打字机 + 发送即时性 | ✅ 通过 |
| TC | 03-功能测试用例/TC-REQ-认证-统一认证与登录-v1.0.md |
企微免密 + 账号密码 + MFA | 📋 待执行 |
| TC | 03-功能测试用例/TC-REQ-通用-005-选项选择持久化-v1.0.md |
选项选择持久化 | ✅ |
| TC | 03-功能测试用例/TC-REQ-AI-004-AI回复来源标识.md |
AI 回复来源标识 | ✅ |
| TC | 03-功能测试用例/TC-REQ-用户-007-自助诊断面板优化.md |
自助诊断面板 | ✅ |
| TC | 03-功能测试用例/TC-通用-004-敏感词检测.md |
敏感词(中台) + §10 鉴权 | ✅ |
| TC | 03-功能测试用例/TC-通用-002-快速回复规则后台管理.md |
快速回复规则 | ✅ |
| TC | 03-功能测试用例/TC-坐席-007-分诊排查系统.md |
分诊排查 | ✅ |
| TC | 03-功能测试用例/TC-用户-006-智能推荐重构.md |
智能推荐重构 | ✅ |
| TC | 03-功能测试用例/TC-用户-005-头像菜单退出.md |
头像菜单退出 | ✅ |
| TC | 03-功能测试用例/TC-用户-008-H5结束会话失败回归-v1.0.md |
结束会话失败回归 | ✅ |
| TC | 03-功能测试用例/TC-集成-002-分配模式Tab收编.md |
分配模式 Tab 收编 | ✅ |
| TC | 03-功能测试用例/TESTING_CALL_AGENT.md |
呼叫坐席(3 次 AI 回复后出现按钮) | ✅ |
| TC | 03-功能测试用例/Token多IP异常检测测试用例.md |
Token 多 IP 异常 | ✅ |
| TC | 03-功能测试用例/会话存档功能-测试用例.md |
会话存档 | ✅ |
| TR | 04-版本测试报告/OTP绑定-测试报告-20260708.md |
首次绑定 + 重置流程 | ✅ |
| TR | 04-版本测试报告/Tier0-测试报告-20260708.md |
知识库迭代基础设施 | ✅ |
| TR | 04-版本测试报告/Tier1-测试报告-20260708.md |
API 层 + 前端组件 | ✅ |
| TR | 04-版本测试报告/P0串联+P2可视化-测试报告-20260708.md |
会话关闭建议 + 知识图谱 | ✅ |
| TR | 04-版本测试报告/RBAC-BugFix-测试报告-20260707.md |
admin_users 装饰器修复 | ✅ |
| TR | 04-版本测试报告/看板验真-测试报告-20260707.md |
5 项存量功能验证 | ⚠️ 3/5 通过 |
| TR | 04-版本测试报告/知识迭代Bug修复报告-20260711.md |
POST /suggestions + Neo4j MERGE | ✅ |
| BUG 单 | 05-缺陷单/README.md |
缺陷单索引 | ✅ |
| BUG 单 | 05-缺陷单/BUG-通用-004-敏感词API无鉴权-001.md |
13 端点裸奔 P0(本次修复) | 🔄 已修复待关闭 |
| BUG 单 | 05-缺陷单/BUG-通用-快速回复规则-路由目标筛选500-002.md |
快速回复路由 500 | ✅ |
| BUG 单 | 05-缺陷单/BUG-通用-用户角色分配表格看不清-001.md |
用户角色表格 | ✅ |
| BUG 单 | 05-缺陷单/BUG-AI-打印机安装路由错误-001.md |
AI 路由 | ✅ |
| BUG 单 | 05-缺陷单/BUG-坐席-002-选项汇总标签缺失-001.md |
标签缺失 | ✅ |
| BUG 单 | 05-缺陷单/BUG-坐席-图片预览刷新-001.md |
图片预览 | ✅ |
| BUG 单 | 05-缺陷单/BUG-用户-H5请求超时-002.md |
H5 请求超时 | ✅ |
| BUG 单 | 05-缺陷单/BUG-用户-H5结束会话失败-003.md |
H5 结束会话失败 | ✅ |
| BUG 单 | 05-缺陷单/BUG-用户-坐席离线未限制呼叫人工-001.md |
坐席离线未限制 | ✅ |
🏷️ 按主题分类(v2.0)
身份认证 & 安全
00-测试规范/测试套件全景.md⭐ — pytest 鉴权专项 13 文件 / 212 用例E2E-CHECKLIST-v0.7.0.md— 扫码登录、MFA 绑定与验证TC-REQ-认证-统一认证与登录-v1.0.md— 企微免密、账号密码、OTPOTP绑定-测试报告-20260708.md— 首次绑定、管理员重置RBAC-BugFix-测试报告-20260707.md— 权限装饰器修复BUG-通用-004-敏感词API无鉴权-001.md— 13 端点鉴权补漏(本次)
消息 & WebSocket
方案A-消息发送延时-E2E验证报告-20260708.md— 发送即时返回 + WS 流式QA_COMPREHENSIVE_REPORT.md— WebSocket 实时推送功能
知识库 & AI
Tier0-测试报告-20260708.md— Neo4j、审批状态机、置信门控Tier1-测试报告-20260708.md— Vision、RAGFlow、审批队列、知识迭代知识迭代Bug修复报告-20260711.md— POST 端点、Neo4j MERGE、过期检查
业务功能
TESTING_CALL_AGENT.md— 呼叫坐席功能P0串联+P2可视化-测试报告-20260708.md— 会话关闭建议、知识图谱可视化看板验真-测试报告-20260707.md— 排队、AI Wingman、知识库、RBAC、敏感词
自动化 / pytest 套件
00-测试规范/测试套件全景.md⭐ — 78 文件 / 1403 用例 / 13 主题分类
⚠️ 已知遗留问题
| 问题 | 位置 | 状态 |
|---|---|---|
test_approval_detect_intent.py collection 错 |
src/backend/tests/ |
预存在(_call_dify_approval_intent 函数 v1.x 治理中移除) |
test_byod.py collection 错 |
src/backend/tests/ |
预存在(_keyword_prefilter 函数 v1.x 治理中移除) |
test_quick_rules.py collection 错 |
src/backend/tests/ |
预存在 |
test_routing_service.py 部分用例失败 |
src/backend/tests/ |
88 个 failed 全部与此 3 类相关(已分批 ignore) |
🚀 快速上手
# 1. 跑全部有效套件(跳过 3 个预损坏)
cd src/backend
python -m pytest tests/ -q \
--ignore=tests/test_approval_detect_intent.py \
--ignore=tests/test_byod.py \
--ignore=tests/test_quick_rules.py
# 2. 跑本次新增的鉴权回归(最关键)
python -m pytest tests/test_sensitive_words_auth.py -v
# 3. 重新生成测试套件全景
python ../../scripts/test_inventory.py --baseline 1311/88/4
🔗 关联文档
- 测试方法论指南:
./00-测试规范/测试方法论指南.md - 测试套件全景(⭐):
./00-测试规范/测试套件全景.md - 技术架构:
../02-技术架构/ - 产品需求:
../01-产品文档/ - 项目管理:
../07-项目管理/项目状态看板.md - 整改记录:
../04-运维文档/部署运维/00-文档规范化整改记录.md(#12)
最后更新:2026-08-05 | 整理人:Duckula v2.0