Files
fastapi/docs/06_demo_testing_guide.md
T
2026-06-01 10:39:07 +08:00

5.9 KiB

Demo 前端测试指南

本文档用于本地演示和前后端联调。前端页面覆盖当前第一版 Demo 的完整训练闭环。

1. 启动服务

后端:

cd D:\Code\newfounder\medical-consultation-agent\backend
.\.venv\Scripts\activate
uvicorn app.main:app --reload --host 127.0.0.1 --port 8000

前端:

cd D:\Code\newfounder\medical-consultation-agent\frontend
npm.cmd run dev -- --host 127.0.0.1 --port 5173

访问:

http://127.0.0.1:5173

2. 初始化数据库

cd D:\Code\newfounder\medical-consultation-agent\backend
.\.venv\Scripts\python.exe scripts\migrate_to_new_schema.py

当前数据库为 medical_consultation_agent

3. 入口页测试

  1. 打开前端首页。
  2. 确认 user_iddemo_user_001
  3. 确认 API Base 为 http://127.0.0.1:8000/api/v1
  4. 点击连接或进入 Agent。

预期结果:

  • 页面显示后端地址、当前 user_id、入口场景和最近连接时间。
  • “已连接”只在 GET /api/v1/agent/hello 成功后显示。
  • 功能卡片显示流式问诊、PDF 导出、知识检索、评分类型、LLM mock/fallback 状态。

4. 病例 SQL 导入测试

进入:

http://127.0.0.1:5173/#/import

步骤:

  1. 选择接口解析后的 .sql 文件。
  2. 点击“解析检查”。
  3. 查看识别到的表、病例预览、警告和错误。
  4. can_import=true 后点击“确认导入”。
  5. 导入成功后刷新病例库。

预期结果:

  • 预检阶段不写数据库。
  • 后端只解析 case_basetraditional_caseteaching_casescoring_rule
  • 源 SQL 中的 DROP TABLECREATE TABLEALTER TABLELOCK TABLES 不会执行。
  • 缺少 case_exam_item 时,后端按当前业务规则生成基础检查项。
  • 新病例出现在病例列表中,可继续创建训练会话。

5. 病例列表与详情测试

  1. 进入病例页。
  2. 点击病例卡片。
  3. 查看病例详情。
  4. 点击“开始训练”。

预期结果:

  • 点击病例卡片只选中病例,不直接创建会话。
  • 详情展示科室、年龄、性别、主诉、训练类型、教学资源和可申请检查类型。
  • 详情不展示标准答案、隐藏病史和评分细则。

6. 删除病例测试

该功能用于联调阶段清理导入错误或不再需要的病例。

步骤:

  1. 在病例详情中点击“删除病例”。
  2. 弹窗中查看删除影响范围。
  3. 输入 确认删除
  4. 点击“确认删除”。
  5. 删除成功后刷新病例列表。

预期结果:

  • 前端先调用 GET /api/v1/cases/{case_id}/delete-preview
  • 确认后调用 DELETE /api/v1/cases/{case_id}
  • 后端删除病例主表、扩展表、评分规则、检查项、训练会话、检查申请、提交内容和训练评价记录。
  • audit_logs 只记录删除操作,不被反删。
  • 删除后访问病例详情返回 CASE_NOT_FOUND

7. 创建训练会话

  1. 选择训练模式:练习模式教学互动模式
  2. 选择评分类型:百分制五分制
  3. 点击“创建训练会话”。

预期结果:

  • 后端创建 training_session
  • Redis 或进程内 memory 生成短期记忆。
  • Chat 页显示 AI 病人开场白。

8. 多轮问诊测试

推荐问题:

孩子发热几天了?最高体温多少?
咳嗽有没有痰?有没有喘息或呼吸困难?
精神状态和食欲怎么样?
以前有没有喘息、哮喘或过敏史?
最近有没有接触感冒、肺炎或发热的人?

预期结果:

  • 流式模式下逐步显示 AI 病人回复。
  • 收到 message_done 后停止“正在生成”。
  • 出错时显示错误,不会无限 pending。

9. 查看提示测试

练习模式中点击“查看提示”。

预期结果:

  • 调用 POST /api/v1/sessions/{session_id}/hints
  • 展示缺失问诊维度、下一步问题和推荐检查。
  • 提示不自动弹出,不写入长期历史。

10. 检查/检验申请测试

建议申请:

  • 血常规
  • CRP
  • 胸片
  • 血氧饱和度
  • 肺部体格检查

预期结果:

  • 检查结果来自 case_exam_item
  • 同一 item_code 重复点击不会重复写入。
  • 页面提示检查结果已写入本次会话上下文和评分依据。

11. 诊断与治疗提交测试

  1. 点击“完成问诊”。
  2. 填写诊断。
  3. 点击“提交诊断”。
  4. 填写治疗方案。
  5. 点击“提交治疗方案”。

演示时可以点击“填入演示模板”,正常测试时表单默认为空。

预期结果:

  • 完成问诊要求至少一轮医生提问。
  • 诊断提交后进入治疗阶段。
  • 治疗提交后进入评价阶段。

12. 评价、PDF 与历史记录测试

  1. 点击“生成 AI 评价报告”。
  2. 查看维度评分、证据摘要、扣分点和改进计划。
  3. 点击“导出 PDF”。
  4. 进入历史记录页刷新。

预期结果:

  • 评价写入 training_record
  • runtime memory 释放。
  • PDF 路径写入 training_record.pdf_file_path
  • 历史记录按当前 user_id 查询。

13. LLM 测试

进入 LLM 测试页:

  • 点击“测试 Fast”。
  • 点击“测试 Reason”。

预期结果:

  • 页面展示模型名、总耗时、是否流式、是否 mock、是否 fallback。
  • 真实模型异常时显示错误,不静默伪装为真实响应。

14. 常见问题

问题 排查
页面显示未连接 检查后端是否在 127.0.0.1:8000 启动。
缺少 X-User-Id 入口页填写 user_id 后重新进入。
病例为空 运行 scripts\migrate_to_new_schema.py 或导入病例 SQL。
Chat 卡在生成中 查看浏览器控制台 SSE 是否收到 message_doneerror
检查重复出现 刷新页面后复测,同一 item_code 应只出现一次。
评价无法生成 确认已完成问诊、提交诊断、提交治疗。
Redis 中有 TTL 正常行为,短期 memory 使用 TTL 自动过期。