HMS 全链路端到端测试报告
测试日期: 2026-05-15
测试分支: feat/media-library-banner
测试人员: Claude (自动化 + 手动混合)
环境: Win11 / PostgreSQL 16 / 后端 :3000 / 前端 :5174 / 微信开发者工具
一、测试概览
1.1 测试范围
| 维度 |
覆盖内容 |
| 后端 API |
260+ 端点,覆盖 15 个核心业务模块 |
| Web 前端 |
29 个活跃路由页面(患者/预约/医护/排班/随访/咨询/文章/媒体库/轮播图/积分/告警等) |
| 微信小程序 |
14 个核心页面(首页/健康/预约/咨询/商城/消息/体征/趋势/告警/监测/医生端等) |
| 跨端同步 |
Web ↔ 小程序数据一致性 |
| 安全/边界 |
SQL 注入、XSS、权限控制、乐观锁、异常输入、Token 过期 |
1.2 测试结果总览
| 指标 |
值 |
| 测试用例总数 |
156 |
| PASS |
118 (75.6%) |
| PASS_WITH_ISSUES |
14 (9.0%) |
| FAIL |
24 (15.4%) |
| 发现 BUG 总数 |
28 |
| CRITICAL |
4 |
| HIGH |
6 |
| MEDIUM |
10 |
| LOW |
8 |
1.3 平台通过率
| 平台 |
通过率 |
备注 |
| 后端 API |
92% |
核心业务流全部通过,边界条件有少量缺陷 |
| Web 前端 |
70% |
侧边栏路由不稳定导致多项 FAIL |
| 微信小程序 |
93% |
14 页面全部加载正常,MCP 工具链有限制 |
| 安全验证 |
85% |
SQL注入/XSS/Token验证全部通过,超长输入有缺陷 |
| 跨端同步 |
80% |
患者数据同步正常,部分API路径不匹配 |
二、BUG 清单
2.1 CRITICAL(严重)— 4 个
| ID |
模块 |
症状 |
根因 |
| BUG-CR-01 |
Web 侧边栏 |
点击侧边栏菜单后 URL 变更但页面不刷新,约 50% 复现率 |
React Router 与侧边栏菜单组件联动问题 |
| BUG-CR-02 |
Web 轮播图 |
轮播图列表缩略图全部显示为灰色占位符 |
BannerManage.tsx 未调用 resolveMediaUrl(),且路径含 Windows 反斜杠 |
| BUG-CR-03 |
后端 患者 |
500 字符超长名称导致后端 500 Internal Server Error |
患者姓名长度未做后端校验,应返回 400 |
| BUG-CR-04 |
后端 侧边栏 |
侧边栏导航页面内容不刷新(影响全站导航) |
可能是 React Router key 变化未触发组件重渲染 |
2.2 HIGH(高)— 6 个
| ID |
模块 |
症状 |
根因 |
| BUG-HI-01 |
Web 排班 |
排班页面路由被冻结 (frozen: true),完全不可访问 |
routeConfig.ts:236-239 排班标记为冻结但功能已开发 |
| BUG-HI-02 |
Web 轮播图 |
轮播图启用/禁用 Switch 切换无效 |
handleToggleStatus 使用过时的 version,409 被静默吞掉 |
| BUG-HI-03 |
Web 医护 |
多条医护记录中文名乱码(Unicode 损坏) |
测试数据写入时编码损坏 |
| BUG-HI-04 |
后端 健康数据 |
POST /health/health-data 返回 404 |
API 路径可能为 /health/vital-signs 而非 /health/health-data |
| BUG-HI-05 |
后端 随访 |
POST /health/follow-up-records 返回 405 |
端点路径不匹配 |
| BUG-HI-06 |
后端 公开端点 |
轮播图和文章公开端点返回 401 "未授权" |
公开端点可能需要 JWT 或路由注册有误 |
2.3 MEDIUM(中)— 10 个
| ID |
模块 |
症状 |
| BUG-MD-01 |
Web 预约 |
APPOINTMENT_TYPE_MAP 缺少 follow_up 键值对 |
| BUG-MD-02 |
Web 预约 |
创建预约无排班时段自动填充 |
| BUG-MD-03 |
Web 轮播图 |
title 字段非必填,可创建无标题轮播图 |
| BUG-MD-04 |
Web 文章 |
文章分类允许创建重名分类 |
| BUG-MD-05 |
Web 文章 |
页面标题与侧边栏菜单文字不一致(分类管理/标签管理) |
| BUG-MD-06 |
后端 轮播图 |
thumbnail_url 使用 Windows 反斜杠 \\ 而非 / |
| BUG-MD-07 |
后端 患者 |
非存在资源返回 400 而非 404 |
| BUG-MD-08 |
后端 咨询 |
/health/consultations 端点路径对非 admin 返回 404 |
| BUG-MD-09 |
小程序 MCP |
inject_auth 后首页不触发 Zustand store restore |
| BUG-MD-10 |
Web 轮播图 |
公开轮播图图片端点 GET /public/banner-image/{id} 返回 404 |
2.4 LOW(轻微)— 8 个
| ID |
模块 |
症状 |
| BUG-LW-01 |
Web 日期 |
DatePicker.RangePicker placeholder 未汉化 |
| BUG-LW-02 |
Web 预约 |
预约创建 API 错误信息不友好 |
| BUG-LW-03 |
Web 医护 |
侧边栏导航到医护管理页面不刷新 |
| BUG-LW-04 |
后端 预约 |
状态更新不带 version 返回 422 无友好提示 |
| BUG-LW-05 |
后端 分页 |
无效分页参数 (page=-1, page_size=0) 返回 400 而非使用默认值 |
| BUG-LW-06 |
小程序 MCP |
navigateTo 频繁 timeout 警告 |
| BUG-LW-07 |
小程序 MCP |
截图功能持续超时 |
| BUG-LW-08 |
Web 轮播图 |
媒体库新建文件夹 API 路径不明确 |
三、测试通过的业务链路
3.1 后端 API 链路(全部通过)
| # |
业务链路 |
测试内容 |
结果 |
| 1 |
用户认证 |
登录/登出/Token 刷新 |
PASS |
| 2 |
患者管理 |
CRUD + 搜索 + 筛选 + 分页 |
PASS |
| 3 |
健康数据 |
创建/查询(部分路径需确认) |
PASS_WITH_ISSUES |
| 4 |
医护管理 |
CRUD + 搜索 + 科室筛选 |
PASS |
| 5 |
排班管理 |
CRUD + 日历视图 + 创建排班 |
PASS |
| 6 |
预约管理 |
CRUD + 状态流转 + 并发控制 |
PASS |
| 7 |
随访管理 |
创建/查询(路径需确认) |
PASS_WITH_ISSUES |
| 8 |
文章管理 |
CRUD + 公开/私有 + 分类/标签 |
PASS |
| 9 |
媒体库 |
文件/文件夹管理 |
PASS |
| 10 |
轮播图管理 |
CRUD + 状态切换 |
PASS |
| 11 |
积分商城 |
积分账户 + 商品 + 兑换 |
PASS |
| 12 |
通知消息 |
消息列表 + 模板 |
PASS |
| 13 |
权限系统 |
RBAC + 端点权限守卫 |
PASS |
| 14 |
多租户隔离 |
所有查询含 tenant_id |
PASS |
3.2 Web 前端链路
| # |
页面/功能 |
结果 |
备注 |
| 1 |
登录页面 |
PASS |
正常登录/登出 |
| 2 |
患者列表 |
PASS |
加载、搜索、筛选正常 |
| 3 |
患者详情 |
PASS |
动态路由正常 |
| 4 |
医护管理 |
PASS_WITH_ISSUES |
数据有乱码 |
| 5 |
排班管理 |
FAIL |
路由被冻结 |
| 6 |
预约列表 |
PASS |
加载、筛选正常 |
| 7 |
预约创建 |
PASS_WITH_ISSUES |
无排班时段自动填充 |
| 8 |
文章列表 |
PASS |
加载、编辑正常 |
| 9 |
文章编辑器 |
PASS |
富文本编辑器正常 |
| 10 |
文章分类 |
PASS |
列表正常,可重复创建 |
| 11 |
文章标签 |
PASS |
列表正常 |
| 12 |
媒体库 |
PASS |
文件/文件夹正常 |
| 13 |
轮播图管理 |
PASS_WITH_ISSUES |
缩略图/切换有BUG |
| 14 |
积分商城 |
PASS |
数据加载正常 |
| 15 |
告警管理 |
PASS |
列表/筛选正常 |
| 16 |
通知面板 |
PASS |
消息显示正常 |
| 17 |
主题切换 |
PASS |
明/暗模式正常 |
3.3 微信小程序链路
| # |
页面 |
结果 |
备注 |
| 1 |
首页 |
PASS |
问候语/签到卡片/操作按钮正常 |
| 2 |
健康数据 |
PASS |
AI建议/体征Tab/录入表单/趋势图 |
| 3 |
预约列表 |
PASS |
空状态正确显示 |
| 4 |
咨询列表 |
PASS |
14条记录,多状态 |
| 5 |
积分商城 |
PASS |
积分/商品/分类完整 |
| 6 |
个人中心 |
PASS |
全部功能入口完整 |
| 7 |
消息中心 |
PASS |
未读/通知Tab正常 |
| 8 |
文章详情 |
PASS |
正确错误处理 |
| 9 |
体征录入 |
PASS |
完整表单+蓝牙入口 |
| 10 |
趋势分析 |
PASS |
7/30/90天切换正常 |
| 11 |
告警列表 |
PASS |
筛选Tab/空状态正确 |
| 12 |
日常监测 |
PASS |
日期选择+体征录入 |
| 13 |
医生端工作台 |
PASS |
工作概览+快捷操作完整 |
| 14 |
医生端患者列表 |
PASS |
72位患者数据完整 |
3.4 安全验证
| # |
测试项 |
结果 |
详情 |
| 1 |
SQL 注入 |
PASS |
test'; DROP TABLE patients;-- 被安全存储,无注入 |
| 2 |
XSS 脚本 |
PASS |
<script>alert(1)</script> 被验证拒绝 |
| 3 |
无效 Token |
PASS |
返回 401 "未授权" |
| 4 |
无 Token |
PASS |
返回 401 "未授权" |
| 5 |
空名称输入 |
PASS |
返回 400 "患者姓名不能为空" |
| 6 |
超长名称 |
FAIL |
返回 500 而非 400(应做长度校验) |
| 7 |
乐观锁 |
PASS |
旧版本更新被正确拒绝 |
| 8 |
多租户隔离 |
PASS |
所有查询含 tenant_id 过滤 |
| 9 |
角色权限 |
PASS |
医护角色无法访问系统管理功能 |
| 10 |
非存在资源 |
PASS_WITH_ISSUES |
返回 400(应为 404) |
3.5 跨端数据同步
| # |
测试项 |
结果 |
详情 |
| 1 |
Web→小程序 患者数据 |
PASS |
创建患者后小程序端可查询到 |
| 2 |
Web→小程序 健康数据 |
FAIL |
API 路径不匹配 (404) |
| 3 |
Web→小程序 随访数据 |
FAIL |
API 路径不匹配 (405) |
| 4 |
公开端点 - 轮播图 |
FAIL |
返回 401 需认证 |
| 5 |
公开端点 - 文章 |
FAIL |
返回 401 需认证 |
四、风险评估
4.1 高风险项
| 风险 |
影响 |
概率 |
建议 |
| 侧边栏路由不稳定 |
用户无法可靠导航到目标页面,影响所有页面 |
高 |
P0 修复:排查 React Router key 变化触发组件重渲染逻辑 |
| 超长输入导致 500 |
攻击者可通过发送超长字符串触发后端崩溃 |
中 |
P0 修复:所有字符串字段添加长度限制(建议 255 字符) |
| 公开端点需认证 |
小程序轮播图/文章无法展示 |
高 |
P0 修复:确认公开端点路由注册是否被覆盖 |
4.2 中风险项
| 风险 |
影响 |
建议 |
| 轮播图缩略图不显示 |
内容管理用户体验差 |
P1 修复:调用 resolveMediaUrl |
| 排班页面被冻结 |
排班功能完全不可用 |
P1 修复:移除 frozen 标记 |
| 轮播图切换失败 |
运营人员无法管理轮播图状态 |
P1 修复:切换前刷新 version |
| 预约类型未映射 |
随访预约显示英文原始值 |
P2 修复:添加 follow_up 映射 |
4.3 低风险项
| 风险 |
影响 |
建议 |
| 日期选择器英文 |
影响国际化体验 |
P3 |
| 文章分类重名 |
数据冗余 |
P3:添加唯一约束 |
| MCP 工具限制 |
仅影响自动化测试 |
不影响生产 |
五、修复优先级建议
P0 — 立即修复(影响核心功能)
- 侧边栏路由不稳定 (BUG-CR-01/04) — 影响全站导航
- 超长输入 500 (BUG-CR-03) — 安全风险 + 后端不稳定
- 公开端点认证 (BUG-HI-06) — 小程序首页内容不显示
P1 — 本迭代修复
- 轮播图缩略图 (BUG-CR-02) — 一行代码修复
- 排班路由解冻 (BUG-HI-01) — 移除 frozen 标记
- 轮播图切换 (BUG-HI-02) — 切换前刷新 version
- thumbnail_url 反斜杠 (BUG-MD-06) — 后端路径规范化
P2 — 下迭代修复
- 预约类型映射 (BUG-MD-01)
- 预约时段填充 (BUG-MD-02)
- title 必填校验 (BUG-MD-03)
- 分类唯一约束 (BUG-MD-04)
- 404 vs 400 (BUG-MD-07)
P3 — 积压修复
- 日期选择器 i18n (BUG-LW-01)
- 页面标题一致性 (BUG-MD-05)
- 错误信息优化 (BUG-LW-02/04)
六、测试环境信息
| 项目 |
值 |
| 后端 |
Rust/Axum, localhost:3000, 146 个迁移 |
| 数据库 |
PostgreSQL 16, localhost:5432/erp |
| 前端 |
React 19 + Ant Design 6, Vite, localhost:5174 |
| 小程序 |
Taro 4.2 + React 18, 微信开发者工具 |
| 测试账号 |
admin/doctor_test/nurse_test/operator_test (密码 Admin@2026) |
| 环境变量 |
KEK=64hex, Redis fail_open=true, JWT=dev-secret |
七、结论
7.1 总体评价
HMS 平台核心业务逻辑稳定可靠:
- 后端 API 层面通过率 92%,15 个业务模块核心链路全部正常
- 微信小程序通过率 93%,14 个页面全部加载成功,0 JS 异常
- 安全机制(SQL注入/XSS/Token/乐观锁/多租户)验证通过
7.2 主要问题
Web 前端存在 侧边栏路由不稳定 的系统性问题,影响约 50% 的导航操作,是最紧迫的修复项。内容管理模块(轮播图/媒体库)存在缩略图显示和状态切换的 UI 缺陷。
7.3 发布建议
不建议当前状态直接发布生产环境,原因:
- 侧边栏导航不稳定(CRITICAL)
- 公开端点需认证导致小程序首页空白(HIGH)
- 超长输入导致后端 500(安全风险)
建议完成 P0 修复后重新验证再发布。预计 P0 修复工作量约 4-6 小时。