西藏巴青项目

AI诊断(兽医、机构)测试用例.md 20KB

AI 诊断(兽医、机构)— 测试用例

依据:AI诊断(兽医、机构)功能需求.md(v1.1)、AI诊断(兽医、机构)技术方案.md(v1.6)
后台 Base Path/diseaseTreatments/onlineConsult/ai移动端/app/consult/ai;鉴权与若依一致。

通用前置(无特殊说明)

  • 兽医账号 VA(角色 100)、机构账号 OA(角色 102);权限 diseaseTreatment:aiOnlineConsult:list|query|send|add|remove不要求绑定 biz_medical_resource)。
  • 普通后台账号 NB(有 AI 权限、无医疗资源绑定)、另一用户 VB(有 AI 会话)。
  • 牧民 U1 已登录移动端。
  • biz_consult_session / biz_consult_message / biz_consult_user 已执行 DDL(见 sql/biz_consult_user.sql);宜预置:
样本 说明 要点
AS0 VA 提问,consult_type=2 3 个月内;vet_visible=1session_title 有值;含提问+AI 消息
AS1 VA 另一条 AI 会话 用于列表排序/筛选
AS2 VA 超窗 AI 会话 last_message_time 早于 3 个月;默认列表不出现
ASX VB 的 AI 会话 VA/OA 不可见/不可操作
ASH VA 已 hide vet_visible=0
AV0 VA 的接诊会话 type=1 AI 列表不可见(隔离)
AS-EMPTY VA 新建未提问 session_title=新会话last_message_time=create_time

界面(UI)Playwright + Chromiumchannel: 'chrome');菜单「牧业疫病诊疗服务 → AI 诊断(兽医、机构)」;路由 diseaseTreatment/onlineConsult/ai/index


一、单元测试用例

用例编号 测试模块 测试项 测试类型 测试工具 测试目的 前置条件 测试步骤 预期结果
ZCZX-AIZD-UT-001 规则常量 AI 问诊类型 单元测试 JUnit5 §2.6、技术方案 §2.1 校验 CONSULT_TYPE_AI=2SENDER_ROLE_AI=3 与方案一致
ZCZX-AIZD-UT-005 参数校验 搜索关键字为空 单元测试 JUnit5 §5.4#3、§4.4 searchMode=truecontentKeyword 失败;「请输入筛选条件」
ZCZX-AIZD-UT-006 参数校验 发送校验复用 单元测试 JUnit5 §6.3 空文本/空媒体/非法后缀 同在线接诊校验文案
ZCZX-AIZD-UT-007 会话创建 receiver 全 NULL 单元测试 JUnit5+Mockito §3.1 审阅 insertAiSession 入参 consult_type=2receiver_* 均为 NULL
ZCZX-AIZD-UT-008 会话创建 新会话时间 单元测试 JUnit5+Mockito §3.5#1、AI-09 创建空会话 createSession session_title=新会话last_message_time 非空
ZCZX-AIZD-UT-009 Service 默认列表 scope 单元测试 JUnit5+Mockito §6.1 有 AS0、AS2、ASH、ASX VA selectAiSessionList 仅 AS0、AS1;consult_type=2asker_user_id=VA
ZCZX-AIZD-UT-010 Service 搜索超窗 单元测试 JUnit5+Mockito §5.3#1、AI-03 有 AS2 list(true, keyword命中) 含 AS2
ZCZX-AIZD-UT-011 Service 未搜索仍 3 个月 单元测试 JUnit5+Mockito §5.3#2 有 AS2 填 keyword 但 searchMode=false 不含 AS2
ZCZX-AIZD-UT-012 Service 首问更新标题 单元测试 JUnit5+Mockito §5.3#8 AS-EMPTY 首条文本提问成功 session_title 更新为摘要≤50 字
ZCZX-AIZD-UT-013 Service 提问+AI 回复 单元测试 JUnit5+Mockito §5、§4.3 Mock Gateway 返回文本 sendMessage 提问 role=1;AI role=3;摘要更新;推送 2 次
ZCZX-AIZD-UT-014 Gateway 视频固定文案 单元测试 JUnit5 §3.5#3、AI-07 reply(msgType=3) 返回「已收到视频,请补充文字描述症状。」
ZCZX-AIZD-UT-015 Gateway 语音固定文案 单元测试 JUnit5 §3.5#3 reply(msgType=4) 返回「已收到语音,请补充文字描述。」
ZCZX-AIZD-UT-016 Gateway 图片失败软回复 单元测试 JUnit5+Mockito §3.5#4、AI-11 Mock 识图失败 sendMessage 图片 仍插入 AI 消息;内容为图片识别暂不可用…
ZCZX-AIZD-UT-017 Gateway 单轮上下文 单元测试 JUnit5+Mockito §3.5#6 会话有多条历史 第二次 sendMessage Gateway 入参当前提问,不含历史
ZCZX-AIZD-UT-018 Service 处理中拒发 单元测试 JUnit5+Mockito §3.5#7、AI-10 第一次未释放锁 连续两次 sendMessage 第二次失败;「AI 正在回复中,请稍候」
ZCZX-AIZD-UT-019 Service 越权会话 单元测试 JUnit5+Mockito §3.6 VA 访问 ASX messages/send 「无权查看该会话」
ZCZX-AIZD-UT-020 Service hide 后会话 单元测试 JUnit5+Mockito §4.1.1、AI-04 ASH messages/send 「会话不存在或已删除」
ZCZX-AIZD-UT-021 Service 快捷模板 单元测试 JUnit5 §6 M1、AI-08 resolvePromptTemplate(2) 返回疾病诊疗预填模板非空
ZCZX-AIZD-UT-022 Mapper AI 列表 SQL 单元测试 JUnit5 §3.3 审阅 XML selectAiSessionList consult_type=2asker_user_idvet_visible=1COALESCE 时间窗
ZCZX-AIZD-UT-023 隔离 不进接诊列表 单元测试 JUnit5+Mockito AI-05 有 AV0 兽医接诊 list 无 AS0
ZCZX-AIZD-UT-024 隔离 接诊不进 AI 列表 单元测试 JUnit5+Mockito AI-05 有 AV0 VA ai list 无 AV0
ZCZX-AIZD-UT-025 约束 不校验预约 单元测试 JUnit5+Mockito §3.4 无预约单 create+send 成功;不查 biz_service_appointment
ZCZX-AIZD-UT-026 诊断用户 新建会话插入 单元测试 JUnit5+Mockito §3.0 biz_consult_user 无 VA createAiSession INSERT 一行;user_id=VAfirst_use_timelast_use_time 非空且相等
ZCZX-AIZD-UT-027 诊断用户 已存在不重复插 单元测试 JUnit5+Mockito §3.0 VA 已在用户表 createAiSession 不调用 insertBizConsultUser
ZCZX-AIZD-UT-028 诊断用户 发消息更新末次 单元测试 JUnit5+Mockito §3.0 有 AS0 sendAiMessage updateLastUseTime(VA, last_message_time) 至少 1 次

二、接口测试用例

用例编号 测试模块 测试项 测试类型 测试工具 测试目的 前置条件 测试步骤 预期结果
ZCZX-AIZD-API-001 列表 默认分页 接口测试 Postman §6.1、AI-03 VA;AS0、AS1 GET /session/list code=200;仅 3 个月内;含 sessionTitle
ZCZX-AIZD-API-002 列表 超窗默认不出现 接口测试 Postman AI-03 有 AS2 searchMode=false 无 AS2
ZCZX-AIZD-API-003 列表 搜索超窗 接口测试 Postman §5.3#2 有 AS2 searchMode=true&contentKeyword=命中 含 AS2
ZCZX-AIZD-API-004 列表 重置 接口测试 Postman §6.1 曾搜出 AS2 searchMode=false 清空条件 无 AS2
ZCZX-AIZD-API-005 列表 仅填关键字未搜索 接口测试 Postman §5.3#2 有 AS2 传 keyword 无 searchMode=true 仍无 AS2
ZCZX-AIZD-API-006 列表 搜索关键字空 接口测试 Postman §4.4 已登录 searchMode=true 无 keyword 「请输入筛选条件」
ZCZX-AIZD-API-007 列表 含 disclaimer 接口测试 Postman §3.5#8 VA 已登录 GET /session/list 响应含 disclaimer 非空
ZCZX-AIZD-API-008 列表 机构账号 接口测试 Postman §3.5、AI-06 OA 已登录有权限 GET /session/list code=200
ZCZX-AIZD-API-009 列表 无医疗资源绑定 接口测试 Postman §5.4#7 NB 有 AI 权限、未绑定资源 GET /session/list code=200;按 NB 本人会话返回(可为空)
ZCZX-AIZD-API-010 列表 越权隔离 接口测试 Postman AI-05 有 ASX VA 列表 无 ASX
ZCZX-AIZD-API-011 列表 已 hide 接口测试 Postman AI-04 ASH VA 列表 无 ASH
ZCZX-AIZD-API-012 新建 空会话 接口测试 Postman §4.2、AI-01、AI-09 VA POST /session 返回 sessionIddisclaimer;再 list 含「新会话」
ZCZX-AIZD-API-013 消息 历史升序 接口测试 Postman §6.2 AS0 GET /session/{id}/messages ≤50 条;senderRole 1/3;升序
ZCZX-AIZD-API-014 消息 越权 接口测试 Postman §3.6 ASX VA GET messages 无权
ZCZX-AIZD-API-015 消息 hide 后 接口测试 Postman AI-04 ASH GET messages 会话不存在或已删除
ZCZX-AIZD-API-016 提问 文本+AI 回复 接口测试 Postman §4.4、AI-02 AS0 或新建 POST .../message msgType=1 datauserMessageaiMessageaiMessage.senderRole=3
ZCZX-AIZD-API-017 提问 首问更新标题 接口测试 Postman §5.3#8 AS-EMPTY 发首条文本 list 中标题非「新会话」
ZCZX-AIZD-API-018 提问 图片 接口测试 Postman §5.4#8 先 upload msgType=2+url 成功;有 AI 回复
ZCZX-AIZD-API-019 提问 视频固定回复 接口测试 Postman AI-07、§3.5#3 AS0 msgType=3+mp4 url AI content 含「已收到视频」
ZCZX-AIZD-API-020 提问 语音固定回复 接口测试 Postman AI-07 AS0 msgType=4+mp3 url AI content 含「已收到语音」
ZCZX-AIZD-API-021 提问 文本为空 接口测试 Postman §6.3 AS0 content="" 「请输入消息内容」
ZCZX-AIZD-API-022 提问 处理中拒发 接口测试 Postman AI-10、§4.4 首条未返回前 连续两次 POST message 第二次「AI 正在回复中,请稍候」
ZCZX-AIZD-API-023 提问 Gateway 硬失败 接口测试 Postman §5 步骤13 Mock/断网 AI POST message 无 AI 消息入库;「AI 回复失败/超时」
ZCZX-AIZD-API-024 鉴权 未登录 接口测试 curl 安全 无 Token GET /session/list 401
ZCZX-AIZD-API-025 权限 无 add 接口测试 Postman §7 无 add 权限 POST /session 无权限
ZCZX-AIZD-API-026 权限 无 send 接口测试 Postman §7 仅 list/query POST .../message 无权限
ZCZX-AIZD-API-027 隔离 接诊列表无 AI 接口测试 Postman AI-05 有 AS0、AV0 VA 调 .../vet/session/list 无 AS0
ZCZX-AIZD-API-028 移动端 新建+模板 接口测试 Postman M1、AI-08 U1 POST /app/.../session Body category=2 sessionIdpromptTemplate 含疾病诊疗
ZCZX-AIZD-API-029 移动端 牧民提问 接口测试 Postman M4 U1 会话 POST /app/.../message 成功;sender_role=1+AI
ZCZX-AIZD-API-030 移动端 隐藏会话 接口测试 Postman M5、AI-04 U1 会话 POST /app/consult/ai/session/{id}/hide vet_visible=0;管理端列表不可见
ZCZX-AIZD-API-031 移动端 隐藏越权 接口测试 Postman §4.1.1 U1 会话 U2 hide 失败
ZCZX-AIZD-API-032 移动端 列表搜索 接口测试 Postman §3.5#5 U1 有超窗会话 GET /app/.../list?searchMode=true 可命中超窗
ZCZX-AIZD-API-033 新建 不要求医疗资源 接口测试 Postman §5.4#7 NB 或 U1 无绑定 POST /session/app/.../session 成功(不校验 biz_medical_resource
ZCZX-AIZD-API-034 端到端 后台主流程 接口测试 Postman §7.1 VA POST sessionmessagelist 新会话、问答、摘要更新
ZCZX-AIZD-API-035 端到端 搜索重置 接口测试 Postman AI-03 有 AS2 list→search→reset 与 API-002~004 一致
ZCZX-AIZD-API-036 近实时 AI 推送 接口测试 Postman+WS §5.1、AI-02 订阅 /topic/consult/ai/{VA} POST message AI 消息 ≤1s 收到 NEW_MESSAGE
ZCZX-AIZD-API-037 响应 失败文案 接口测试 Postman §9 已登录 触发越权、空搜索、处理中 msg 与 §4.4 一致
ZCZX-AIZD-API-038 管理端 隐藏会话 接口测试 Postman §4.5、AI-04 VA;AS0 POST /diseaseTreatment/onlineConsult/ai/session/{id}/hide code=200;列表无该会话
ZCZX-AIZD-API-039 管理端 隐藏越权 接口测试 Postman §4.1.1 ASX 属 VB VA POST .../hide 「会话不存在或已删除」
ZCZX-AIZD-API-040 权限 无 remove 接口测试 Postman §4.5 仅 list/query/add POST .../hide 无权限
ZCZX-AIZD-API-041 落库 realSessionId 接口测试 Postman §4.3、§5 VA;AS0 POST .../message Body 含 aiReplyContent + realSessionId code=200data.realSessionId 与库 real_session_id 一致
ZCZX-AIZD-API-042 落库 aiCategory 接口测试 Postman §3.2、§4.3 VA;AS0 POST .../message Body aiCategory=2 + aiReplyContent userMessage.aiCategory=2aiMessage.aiCategory 为空
ZCZX-AIZD-API-043 校验 aiCategory 无效 接口测试 Postman §4.4 VA;AS0 aiCategory=99(纯数字超范围) 失败;「AI提问分类无效」
ZCZX-AIZD-API-044 诊断用户 新建写入用户表 接口测试 Postman/SQL §3.0 VA;biz_consult_user 无 VA POST /session 后查库 新增 1 行;first_use_timelast_use_time≈会话 create_time
ZCZX-AIZD-API-045 诊断用户 提问更新末次 接口测试 Postman/SQL §3.0 VA;AS0;记下提问前 last_use_time POST .../message 成功后查库 biz_consult_user.last_use_timebiz_consult_session.last_message_time 一致(或晚于提问前)

三、界面测试用例(UI)

测试工具Playwright + Chromiumchannel: 'chrome' 使用本机 Google Chrome)。

用例编号 测试模块 测试项 测试类型 测试工具 测试目的 前置条件 测试步骤 预期结果
ZCZX-AIZD-UI-001 布局 左右分栏 UI 测试 Playwright+Chrome §6、原型 VA 登录 进入「AI 诊断(兽医、机构)」 左「历史会话」;右「AI 助手」
ZCZX-AIZD-UI-002 列表 列表字段 UI 测试 Playwright+Chrome §6.1 有 AS0 查看左侧项 问答标题、摘要、M月D日
ZCZX-AIZD-UI-003 列表 默认 3 个月 UI 测试 Playwright+Chrome AI-03 AS0、AS2 进入不搜索 见 AS0;不见 AS2
ZCZX-AIZD-UI-004 列表 搜索超窗 UI 测试 Playwright+Chrome AI-03 有 AS2 填会话内容→搜索 出现 AS2
ZCZX-AIZD-UI-005 列表 重置 UI 测试 Playwright+Chrome §6.1 已搜出 AS2 重置 条件清空;AS2 消失
ZCZX-AIZD-UI-006 列表 未点搜索 UI 测试 Playwright+Chrome §5.3#2 有 AS2 仅输入关键字不点搜索 仍无 AS2
ZCZX-AIZD-UI-007 列表 搜索无结果 UI 测试 Playwright+Chrome §9 已登录 搜索不存在内容 「未找到匹配的 AI 诊断会话」或空态
ZCZX-AIZD-UI-008 新建 新增会话 UI 测试 Playwright+Chrome §6.1、AI-01 VA 登录 新增会话 右侧空态/引导;左侧出现「新会话」
ZCZX-AIZD-UI-009 新建 免责声明 UI 测试 Playwright+Chrome §5.4#6、§3.5#8 首次进入或新建后 观察页面 展示免责声明文案
ZCZX-AIZD-UI-010 聊天 未选会话 UI 测试 Playwright+Chrome §6.2 有列表 不点左侧 「请选择历史会话或新增会话」
ZCZX-AIZD-UI-011 聊天 加载历史 UI 测试 Playwright+Chrome §6.2 有 AS0 点击 AS0 标题「AI 助手」;左提问右 AI 气泡
ZCZX-AIZD-UI-012 提问 文本与等待态 UI 测试 Playwright+Chrome §4.3、§6.3 选中会话 输入问题→发送 提问立即出现;「AI 正在思考…」;随后 AI 回复
ZCZX-AIZD-UI-013 提问 文本为空 UI 测试 Playwright+Chrome §6.3 选中会话 空内容发送 「请输入消息内容」
ZCZX-AIZD-UI-014 提问 图片上传 UI 测试 Playwright+Chrome §6.3 选中会话 选 jpg 上传发送 图片气泡;AI 有回复或引导文案
ZCZX-AIZD-UI-015 提问 视频/语音文件 UI 测试 Playwright+Chrome §4.2 选中会话 发 mp4/mp3 AI 回复为补文字引导(§3.5#3)
ZCZX-AIZD-UI-016 提问 处理中拒发 UI 测试 Playwright+Chrome AI-10 已点发送 AI 未返回前再次点发送 「AI 正在回复中,请稍候」
ZCZX-AIZD-UI-017 本期范围 不改前端 UI 测试 Playwright+Chrome §4.1.1 已登录 扫描页面 隐藏按钮;接口 API-038 可 Postman 验证
ZCZX-AIZD-UI-018 本期范围 无接诊混用 UI 测试 Playwright+Chrome §6.4、AI-05 有接诊数据 本页列表 无问诊人姓名式接诊项
ZCZX-AIZD-UI-019 权限 机构账号 UI 测试 Playwright+Chrome §3.5 OA 登录 进入同菜单 可新建、提问
ZCZX-AIZD-UI-020 权限 无资源绑定可用 UI 测试 Playwright+Chrome §5.4#7 NB 有菜单与 AI 权限 进入 AI 诊断→新增会话 可正常使用;无「未绑定医疗资源」阻断
ZCZX-AIZD-UI-021 权限 无 send UI 测试 Playwright+Chrome §7 仅 list/query 选中会话 无发送区或发送禁用
ZCZX-AIZD-UI-022 端到端 新建问答闭环 UI 集成 Playwright+Chrome §7.1 VA 权限齐 新增会话→提问→看 AI 回复→列表摘要更新 全流程成功
ZCZX-AIZD-UI-023 端到端 hide 同步 UI 集成 Playwright+Chrome AI-04 U1 移动端 hide VA 刷新列表 该会话消失

四、覆盖对照

类别 单元 UT 接口 API 界面 UI
正常主流程 UT-008~013、021 API-012~018、034 UI-008、011~012、022
列表/搜索/重置 UT-009~011 API-001~006、035 UI-003~006
新建会话/空会话 UT-008、012 API-012、017 UI-008、009
AI 回复/网关 UT-013~017 API-016~020、023、036 UI-012、014~015
处理中/超时 UT-018 API-022、023 UI-016
隐藏 hide UT-020 API-030~031、038~040 UI-017、023
越权/隔离 UT-019、023~024 API-010、014、027 UI-018
机构/兽医/无绑定 API-008~009 UI-019~020
移动端/牧民 UT-021 API-028~033
快捷入口 UT-021 API-028 (移动端 UI 可另补)
免责声明 API-007 UI-009
预约解耦 UT-025

五、功能需求追溯

需求章节 要点 主要用例
§5.3 产品确认 八项已确认 API-001~012;UI-003~009
§5.4 补充约定 十二条 UT-014~018;API-019~022;§3.5
§6.1 列表 搜索、新增、3 个月 API-001~012;UI-001~008
§6.2 对话 全历史、AI 助手标题 API-013;UI-010~011
§6.3 发送 多媒体、等待、失败 API-016~023;UI-012~016
§6.4 与接诊互斥 隔离 UT-023~024;API-027;UI-018
§7 流程 后台/移动/时序 API-034~036;UI-022
技术方案 AI-01~11 验收 API/UI 对应编号

六、Playwright 实施提示

  • 安装:npm i -D @playwright/testnpx playwright install chrome
  • 配置:use: { channel: 'chrome', locale: 'zh-CN', baseURL: 'http://localhost:80' }storageState 复用兽医 VA、机构 OA。
  • 路由:page.goto('/diseaseTreatment/onlineConsult/ai')
  • 定位示例:page.getByPlaceholder('请输入会话内容')page.getByRole('button', { name: '搜索' })page.getByRole('button', { name: '重置' })page.getByRole('button', { name: '新增会话' })page.getByRole('button', { name: '发送' });右侧标题 page.getByText('AI 助手')
  • AI 等待:发送后对 text=AI 正在思考 断言可见,再 expect(aiBubble).toBeVisible({ timeout: 65000 })(覆盖 60s AI 超时)。
  • 造数:POST /diseaseTreatment/onlineConsult/ai/sessionPOST .../message;隐藏:POST .../session/{id}/hide(管理端或移动端)。

七、修订记录

版本 说明
1.0 初版:单元 25、接口 37、UI 23;覆盖列表/新建/提问/AI 回复/搜索/hide/隔离/机构/移动/网关/免责声明;Playwright+Chrome
1.1 补充 biz_consult_user:UT-026~028、API-044~045;前置 DDL 含 sql/biz_consult_user.sql