Files
hms/docs/qa/e2e-test-report-2026-05-15.md

12 KiB
Raw Blame History

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 使用过时的 version409 被静默吞掉
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 — 立即修复(影响核心功能)

  1. 侧边栏路由不稳定 (BUG-CR-01/04) — 影响全站导航
  2. 超长输入 500 (BUG-CR-03) — 安全风险 + 后端不稳定
  3. 公开端点认证 (BUG-HI-06) — 小程序首页内容不显示

P1 — 本迭代修复

  1. 轮播图缩略图 (BUG-CR-02) — 一行代码修复
  2. 排班路由解冻 (BUG-HI-01) — 移除 frozen 标记
  3. 轮播图切换 (BUG-HI-02) — 切换前刷新 version
  4. thumbnail_url 反斜杠 (BUG-MD-06) — 后端路径规范化

P2 — 下迭代修复

  1. 预约类型映射 (BUG-MD-01)
  2. 预约时段填充 (BUG-MD-02)
  3. title 必填校验 (BUG-MD-03)
  4. 分类唯一约束 (BUG-MD-04)
  5. 404 vs 400 (BUG-MD-07)

P3 — 积压修复

  1. 日期选择器 i18n (BUG-LW-01)
  2. 页面标题一致性 (BUG-MD-05)
  3. 错误信息优化 (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 发布建议

不建议当前状态直接发布生产环境,原因:

  1. 侧边栏导航不稳定CRITICAL
  2. 公开端点需认证导致小程序首页空白HIGH
  3. 超长输入导致后端 500安全风险

建议完成 P0 修复后重新验证再发布。预计 P0 修复工作量约 4-6 小时。