西藏巴青项目

在线接诊(兽医)测试用例.md 20KB

在线接诊(兽医)— 测试用例

依据:在线接诊(兽医)功能需求.md(v1.1)、在线接诊(兽医)技术方案.md(v1.1)
兽医后台 Base Path/diseaseTreatments/onlineConsult/vet移动端/app/onlineConsult;鉴权与若依一致(Cookie / Token)。

通用前置(无特殊说明)

  • 兽医账号 A 已绑定兽医资源 R1biz_medical_resource.resource_type=1account_assigned=1sys_user_id=A),角色 100;权限 diseaseTreatment:vetOnlineConsult:list|query|send
  • 兽医账号 B 绑定 R2(另一兽医)。
  • 牧民账号 U1U2 可用于移动端造数。
  • biz_consult_session / biz_consult_message 已执行 DDL;宜预置:
样本 说明 要点
S0 U1↔R1,consult_type=1 last_message_time 在 3 个月内;vet_visible=1;有多条文本/图片消息
S1 U2↔R1 同上;用于筛选
S2 U1↔R1 超窗 last_message_time 早于 3 个月自然日边界;默认列表不出现
SX U1↔R2 账号 A 不可见/不可操作
SA A 本人 AI 会话 consult_type=2receiver_provider_id=NULL
SH U1↔R1 已 hide vet_visible=0

界面(UI)Playwright + Chromiumchannel: 'chrome' 使用本机 Google Chrome);菜单「牧业疫病诊疗服务 → 在线接诊(兽医)」;路由 diseaseTreatment/onlineConsult/vet/index


一、单元测试用例

用例编号 测试模块 测试项 测试类型 测试工具 测试目的 前置条件 测试步骤 预期结果
ZCZX-ZXJZYS-UT-001 规则常量 问诊类型/消息类型 单元测试 JUnit5 §2.5、技术方案 §2.1 校验 VET_ONLINE=1AI=2msgType 1~4 合法 常量与方案一致
ZCZX-ZXJZYS-UT-002 时间窗 3 个月边界计算 单元测试 JUnit5 §3.4#2、AC-02 固定「今日」2026-05-20 calcThreeMonthsAgo() 返回 2026-02-20 00:00:00(Asia/Shanghai 自然月)
ZCZX-ZXJZYS-UT-003 摘要 文本摘要截断 单元测试 JUnit5 §3.4#3 输入 60 字文本、msg_type=1 last_message_preview 最多 50 字
ZCZX-ZXJZYS-UT-004 摘要 媒体固定文案 单元测试 JUnit5 §3.4#3、§6.1 msg_type 2/3/4 分别为 [图片][视频][语音]
ZCZX-ZXJZYS-UT-005 参数校验 搜索条件为空 单元测试 JUnit5 §4.6 searchMode=trueaskerNamecontentKeyword 均为空 失败;msg「请输入筛选条件」
ZCZX-ZXJZYS-UT-006 参数校验 发送文本为空 单元测试 JUnit5 §6.3、§4.4 msgType=1content 空/空白 失败;「请输入消息内容」
ZCZX-ZXJZYS-UT-007 参数校验 媒体 content 为空 单元测试 JUnit5 §6.3 msgType=2/3/4content 失败;「请上传文件」
ZCZX-ZXJZYS-UT-008 参数校验 文件后缀白名单 单元测试 JUnit5 §3.4#7 图片 .exe;视频 .avi;合法 .png/.mp4 非法失败「文件格式或大小不符合要求」;合法通过
ZCZX-ZXJZYS-UT-009 范围解析 当前兽医 providerId 单元测试 JUnit5+Mockito §2.4 Mock 用户 A;库有 R1 resolveProviderId(A) 返回 R1.id
ZCZX-ZXJZYS-UT-010 范围解析 未绑定兽医 单元测试 JUnit5+Mockito §9 用户无资源绑定 resolveProviderId 空;列表/发送返回「未绑定兽医资源,无法接诊」
ZCZX-ZXJZYS-UT-011 Service 默认列表 scope 单元测试 JUnit5+Mockito §4.1、§6.1 有 S0、S2、SH、SX、SA list(searchMode=false) 账号 A 仅 S0、S1;无 S2/SX/SH/SA
ZCZX-ZXJZYS-UT-012 Service 搜索超窗 单元测试 JUnit5+Mockito §4.6、AC-03 有 S2 list(searchMode=true, contentKeyword=命中S2) 含 S2
ZCZX-ZXJZYS-UT-013 Service 有筛选项未搜索 单元测试 JUnit5+Mockito §3.4#1 有 S2 askerName 非空但 searchMode=false 仍不含 S2(仅 3 个月窗)
ZCZX-ZXJZYS-UT-014 Service 消息首次加载 单元测试 JUnit5+Mockito §3.4#5 S0 有 >50 条 listMessages(sessionId)beforeId 返回最新 50 条;send_time 升序
ZCZX-ZXJZYS-UT-015 Service 上拉更早消息 单元测试 JUnit5+Mockito §6.2 S0 有 60 条 beforeId=最小id 再取 50 条;与首批无重叠
ZCZX-ZXJZYS-UT-016 Service 兽医发送成功 单元测试 JUnit5+Mockito §6.3 Mock S0 sendText(sessionId, "回复") 入库 sender_role=2;更新 last_message_*;触发推送
ZCZX-ZXJZYS-UT-017 Service 越权-他兽医会话 单元测试 JUnit5+Mockito §2.4、AC-05 账号 A;目标 SX listMessages/send 失败;「无权查看该会话」
ZCZX-ZXJZYS-UT-018 Service 已 hide 会话 单元测试 JUnit5+Mockito §4.1.1、AC-04 Mock SH listMessages/send 失败;「会话不存在或已删除」
ZCZX-ZXJZYS-UT-019 Service open 会话唯一 单元测试 JUnit5+Mockito §4.1 已有 U1+R1 会话 移动端 open(vetResourceId=R1) 两次 返回同一 sessionId;库仅 1 条 consult_type=1
ZCZX-ZXJZYS-UT-020 Service hide 仅问诊人 单元测试 JUnit5+Mockito §4.1.1 S0 账号 A 调 hide;U1 调 hide A 失败或无权;U1 成功 vet_visible=0
ZCZX-ZXJZYS-UT-021 Mapper 列表 SQL 单元测试 JUnit5 技术方案 §3.3 审阅 XML 检查 selectSessionList consult_type=1receiver_provider_idvet_visible=1;条件性 3 个月;ORDER BY last_message_time DESC
ZCZX-ZXJZYS-UT-022 Mapper 内容搜索 SQL 单元测试 JUnit5 §3.3 审阅 XML searchMode=true 分支 匹配 preview/session_title/消息文本子查询
ZCZX-ZXJZYS-UT-023 推送 NEW_MESSAGE 载荷 单元测试 JUnit5 §5.1、AC-01 Mock 推送服务 发送后检查 payload 含 §4.2 字段 + lastMessagePreview + lastMessageTime
ZCZX-ZXJZYS-UT-024 约束 不校验预约 单元测试 JUnit5+Mockito §3.4、§5.3 U1 无预约单 open+send 成功;不访问 biz_service_appointment
ZCZX-ZXJZYS-UT-025 隔离 AI 不进兽医列表 单元测试 JUnit5+Mockito §3.6、AC-07 有 SA 账号 A list 无 SA;SQL 无 consult_type=2

二、接口测试用例

用例编号 测试模块 测试项 测试类型 测试工具 测试目的 前置条件 测试步骤 预期结果
ZCZX-ZXJZYS-API-001 列表 默认分页排序 接口测试 Postman §6.1、AC-02 账号 A;S0、S1 GET /session/list code=200;仅 3 个月内;last_message_time 倒序;含 askerAvatar
ZCZX-ZXJZYS-API-002 列表 超窗默认不出现 接口测试 Postman AC-02 有 S2 GET /session/listsearchMode=false 无 S2
ZCZX-ZXJZYS-API-003 列表 搜索命中超窗 接口测试 Postman §4.6、AC-03 有 S2 searchMode=true+contentKeyword 命中 含 S2
ZCZX-ZXJZYS-API-004 列表 重置等价默认 接口测试 Postman §4.6 曾搜出 S2 searchMode=false;筛选项空 无 S2
ZCZX-ZXJZYS-API-005 列表 问诊人模糊 接口测试 Postman §6.1 S0 问诊人含「扎西」 searchMode=true&askerName=扎 含 S0
ZCZX-ZXJZYS-API-006 列表 仅填筛选项未搜索 接口测试 Postman §3.4#1 有 S2 askerName=扎不传 searchMode=true 仍无 S2
ZCZX-ZXJZYS-API-007 列表 搜索条件全空 接口测试 Postman §4.6 已登录 searchMode=true 无筛选项 code≠200;「请输入筛选条件」
ZCZX-ZXJZYS-API-008 列表 空列表提示数据 接口测试 Postman §6.1 账号 A 无会话 GET /session/list rows=[]
ZCZX-ZXJZYS-API-009 列表 数据隔离-他兽医 接口测试 Postman §2.4、AC-05 有 SX 账号 A 列表 无 SX
ZCZX-ZXJZYS-API-010 列表 数据隔离-AI 会话 接口测试 Postman §3.6、AC-07 有 SA 账号 A 列表 无 SA
ZCZX-ZXJZYS-API-011 列表 已 hide 不可见 接口测试 Postman AC-04 有 SH 账号 A 列表 无 SH
ZCZX-ZXJZYS-API-012 列表 未绑定兽医 接口测试 Postman §9 无绑定账号 GET /session/list 空列表或「未绑定兽医资源,无法接诊」
ZCZX-ZXJZYS-API-013 列表 禁止伪造 providerId 接口测试 Postman §4.1 已登录 receiverProviderId=伪造 仍以服务端 R1 为准
ZCZX-ZXJZYS-API-014 消息 加载历史升序 接口测试 Postman §6.2、§3.4#5 有 S0 GET /session/{S0}/messages rows≤50;send_time 升序;含双方气泡字段
ZCZX-ZXJZYS-API-015 消息 超窗会话全历史 接口测试 Postman §6.2 S2 有 3 个月外消息 GET /session/{S2}/messagessearchMode 搜出后) 可返回全部历史,不受列表 3 个月限制
ZCZX-ZXJZYS-API-016 消息 上拉 beforeId 接口测试 Postman §3.4#5 S0 >50 条 首次 GET;再 beforeId=最小messageId 第二批更早;无重复
ZCZX-ZXJZYS-API-017 消息 越权 sessionId 接口测试 Postman AC-05 有 SX 账号 A GET /session/{SX}/messages 失败;「无权查看该会话」
ZCZX-ZXJZYS-API-018 消息 hide 后不可查 接口测试 Postman AC-04 SH GET /session/{SH}/messages 失败;「会话不存在或已删除」
ZCZX-ZXJZYS-API-019 发送 文本成功 接口测试 Postman §6.3、AC-01 S0 POST /session/{id}/message Body msgType=1 code=200;库有新消息;摘要更新
ZCZX-ZXJZYS-API-020 发送 图片/视频/语音 接口测试 Postman §4.2、AC-06 /common/upload msgType=2/3/4+url 成功;preview 为 [图片]
ZCZX-ZXJZYS-API-021 发送 文本为空 接口测试 Postman §6.3 S0 msgType=1content="" 失败;「请输入消息内容」
ZCZX-ZXJZYS-API-022 发送 非法后缀 接口测试 Postman §3.4#7 S0 msgType=2content 为非法 url 失败;格式或大小不符合要求
ZCZX-ZXJZYS-API-023 发送 hide 后会话 接口测试 Postman AC-04 SH POST .../message 失败;会话不存在或已删除
ZCZX-ZXJZYS-API-024 发送 越权发送 接口测试 Postman AC-05 SX 账号 A POST 失败;无权
ZCZX-ZXJZYS-API-025 本期范围 无后台新建会话 接口测试 Postman §5.2 已登录 POST /session(若暴露) 404 或未实现
ZCZX-ZXJZYS-API-026 鉴权 未登录 接口测试 curl 安全 无 Token GET /session/list 401
ZCZX-ZXJZYS-API-027 权限 无 list 接口测试 Postman §7 无 list 权限 GET /session/list 无权限
ZCZX-ZXJZYS-API-028 权限 无 send 接口测试 Postman §7 仅 list/query POST .../message 无权限
ZCZX-ZXJZYS-API-029 移动端 open 新建 接口测试 Postman §7.2、M1 U1 首次问 R1 POST /app/.../open Body vetResourceId=R1 返回 sessionIdconsult_type=1
ZCZX-ZXJZYS-API-030 移动端 open 续聊唯一 接口测试 Postman §4.1 U1 已有会话 再次 open 同一 sessionId
ZCZX-ZXJZYS-API-031 移动端 牧民发消息 接口测试 Postman §7.2、AC-01 S0;U1 Token POST /app/.../message 成功;兽医 GET messages 可见
ZCZX-ZXJZYS-API-032 移动端 hide 会话 接口测试 Postman AC-04 S0 U1 POST .../hide vet_visible=0;兽医 API-011
ZCZX-ZXJZYS-API-033 移动端 hide 越权 接口测试 Postman §4.1.1 S0 U2 调 hide 失败;无权
ZCZX-ZXJZYS-API-034 端到端 接诊主流程 接口测试 Postman §7.1 U1 open→发消息;A 登录 A listmessagessend→U1 收 双向可见;列表摘要更新
ZCZX-ZXJZYS-API-035 端到端 搜索重置流程 接口测试 Postman AC-03 有 S2 默认 list→search 出 S2→reset 与 API-002~004 一致
ZCZX-ZXJZYS-API-036 约束 无预约可问诊 接口测试 Postman §3.4 U1 无 biz_service_appointment open+send 成功
ZCZX-ZXJZYS-API-037 近实时 推送延迟 接口测试 Postman+WS 客户端 AC-01 双端在线 U1 发文本;A 订阅 WS A ≤1s 收到 NEW_MESSAGE
ZCZX-ZXJZYS-API-038 响应 失败 msg 一致 接口测试 Postman §9 已登录 触发越权、空文本、hide msg 与 §4.4/§9 一致

三、界面测试用例(UI)

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

用例编号 测试模块 测试项 测试类型 测试工具 测试目的 前置条件 测试步骤 预期结果
ZCZX-ZXJZYS-UI-001 布局 左右分栏 UI 测试 Playwright+Chrome §6、原型 账号 A;有 S0 进入「在线接诊(兽医)」 左「接诊会话」列表;右聊天区;标题区
ZCZX-ZXJZYS-UI-002 列表 列表项字段 UI 测试 Playwright+Chrome §6.1 有 S0 查看左侧项 头像/占位、问诊人姓名、摘要、日期「M月D日」
ZCZX-ZXJZYS-UI-003 列表 默认仅 3 个月 UI 测试 Playwright+Chrome AC-02 有 S0、S2 进入页不点搜索 见 S0;不见 S2
ZCZX-ZXJZYS-UI-004 列表 搜索超窗 UI 测试 Playwright+Chrome AC-03 有 S2 填会话内容→点搜索 出现 S2
ZCZX-ZXJZYS-UI-005 列表 重置恢复默认 UI 测试 Playwright+Chrome §6.1 已搜出 S2 重置 筛选项清空;S2 消失
ZCZX-ZXJZYS-UI-006 列表 未点搜索仍 3 个月 UI 测试 Playwright+Chrome §3.4#1 有 S2 仅输入问诊人→不点搜索 仍无 S2
ZCZX-ZXJZYS-UI-007 列表 搜索无结果 UI 测试 Playwright+Chrome §9 已登录 搜索不存在关键字 提示「未找到匹配的接诊会话」或空态
ZCZX-ZXJZYS-UI-008 列表 空列表 UI 测试 Playwright+Chrome §6.1 无会话 进入页 「暂无接诊会话」
ZCZX-ZXJZYS-UI-009 聊天 未选会话空态 UI 测试 Playwright+Chrome §6.2 有列表 不点左侧项 右侧「请选择接诊会话」
ZCZX-ZXJZYS-UI-010 聊天 选中加载历史 UI 测试 Playwright+Chrome §6.2 有 S0 点击 S0 顶部问诊人姓名;气泡左右分布;按日期分组
ZCZX-ZXJZYS-UI-011 聊天 上拉更早 UI 测试 Playwright+Chrome §6.2 S0>50 条 滚至顶部触发加载 更早消息追加;顺序正确
ZCZX-ZXJZYS-UI-012 发送 文本成功 UI 测试 Playwright+Chrome §6.3 选中 S0 输入文本→发送 右侧立即出现气泡;左侧摘要更新
ZCZX-ZXJZYS-UI-013 发送 文本为空 UI 测试 Playwright+Chrome §6.3 选中 S0 空内容点发送 「请输入消息内容」;无假成功气泡
ZCZX-ZXJZYS-UI-014 发送 图片文件上传 UI 测试 Playwright+Chrome §4.2 选中 S0 选本地 jpg≤10MB→发送 聊天区缩略图;列表摘要「[图片]」
ZCZX-ZXJZYS-UI-015 发送 视频/语音文件 UI 测试 Playwright+Chrome §4.2、§5.3 选中 S0 选 mp4/mp3 合法文件发送 占位/播放控件;摘要「[视频]」「[语音]」
ZCZX-ZXJZYS-UI-016 发送 非法/超大文件 UI 测试 Playwright+Chrome §6.3 选中 S0 选超大或非法后缀 提示文件不合规;不插入成功气泡
ZCZX-ZXJZYS-UI-017 近实时 收到牧民消息 UI 集成 Playwright+Chrome AC-01、§4.3 A 页打开 S0;U1 移动端发 观察 A 页 ≤1s 新气泡与列表摘要自动出现(WS,非仅 F5)
ZCZX-ZXJZYS-UI-018 本期范围 无新建会话按钮 UI 测试 Playwright+Chrome §5.2 已登录 扫描工具栏/页头 「新建会话」
ZCZX-ZXJZYS-UI-019 本期范围 无删除/结束会话 UI 测试 Playwright+Chrome §5.2 选中 S0 扫描会话操作 删除/结束;牧民 hide 后项消失
ZCZX-ZXJZYS-UI-020 本期范围 无 RTC/内嵌录播 UI 测试 Playwright+Chrome §4.2 已登录 检查输入区图标 视频/语音为选文件;无通话/录音控件
ZCZX-ZXJZYS-UI-021 权限 无 send 仅查看 UI 测试 Playwright+Chrome §7 仅 list/query 角色 进入页选会话 无发送框或发送禁用
ZCZX-ZXJZYS-UI-022 权限 未绑定账号 UI 测试 Playwright+Chrome §9 无兽医绑定 进入菜单 无菜单或空列表+友好提示
ZCZX-ZXJZYS-UI-023 隔离 菜单不含 AI 诊断混表 UI 测试 Playwright+Chrome §6.4 有 SA 数据 本页列表 不出现 AI 问答标题/「AI 助手」会话
ZCZX-ZXJZYS-UI-024 端到端 筛选聊天闭环 UI 集成 Playwright+Chrome §7.1 S0、S1 问诊人筛选→搜索→选会话→发回复 列表过滤正确;发送成功
ZCZX-ZXJZYS-UI-025 端到端 hide 后不可见 UI 集成 Playwright+Chrome AC-04 S0 U1 移动端删除会话→A 刷新列表 S0 从列表消失;无法再发

四、覆盖对照

类别 单元 UT 接口 API 界面 UI
正常主流程 UT-011~016、019 API-001、014~016、019~020、029~034 UI-001~002、010~012、014~015、024
3 个月窗/搜索重置 UT-002、012~013 API-002~007、035 UI-003~006
近实时 ≤1s UT-023 API-037 UI-017
发送校验/媒体 UT-003~008、006~007 API-020~022 UI-013~016
hide/可见性 UT-018、020 API-011、018、032~033 UI-019、025
越权/隔离 UT-017、025 API-009~010、017、024、010 UI-023
AI/预约约束 UT-024~025 API-010、036、025 UI-018~020、023
权限/鉴权 UT-010 API-026~028 UI-021~022
本期不做 API-025 UI-018~020

五、功能需求与技术方案追溯

需求/方案章节 要点 主要用例
§4.1 时间窗与搜索 默认 3 月;搜索超窗;重置 UT-011~013;API-002~007、035;UI-003~006
§4.1.1 hide 牧民删除兽医不可见 UT-018、020;API-011、018、032;UI-019、025
§4.2 消息类型 文本/图/视/音文件 UT-003~008;API-020;UI-014~016
§4.3 近实时 ≤1 秒 UT-023;API-037;UI-017
§5.3 产品确认五项 见技术方案 §3.4 UT-002~013;API-001~007、037;UI-003~017
§6.1 列表 筛选、字段、空态 API-001~008;UI-001~008
§6.2 详情 全历史、气泡、未选 API-014~016;UI-009~011
§6.3 发送 校验、失败不假成功 UT-006~007;API-019~023;UI-012~016
§6.4 与 AI 互斥 分列表 UT-025;API-010;UI-023
§3.4 不绑定预约 无预约可聊 UT-024;API-036
技术方案 AC-01~07 验收 API-037;各节对应用例编号

六、Playwright 实施提示

  • 安装:npm i -D @playwright/testnpx playwright install chrome
  • 配置:use: { channel: 'chrome', locale: 'zh-CN', baseURL: 'http://localhost:80' }storageState 复用兽医账号 A。
  • 路由:page.goto('/diseaseTreatment/onlineConsult/vet')(与菜单 component 一致)。
  • 定位示例:page.getByPlaceholder('请输入问诊人')page.getByPlaceholder('请输入会话内容')page.getByRole('button', { name: '搜索' })page.getByRole('button', { name: '重置' })page.locator('.session-list .session-item').first().click()page.getByRole('button', { name: '发送' })page.locator('input[type=file]').setInputFiles('fixtures/sample.jpg')
  • 近实时(UI-017):page.waitForEvent 监听 WS 帧,或 expect(locator).toBeVisible({ timeout: 1000 })
  • 数据准备:移动端 POST /app/onlineConsult/session/open + message 造 S0;SQL 直接插 S2(last_message_time 超窗)、SH(vet_visible=0)、SA(consult_type=2)。

七、修订记录

版本 说明
1.0 初版:单元 25、接口 38、UI 25;覆盖列表/消息/发送、3 个月与搜索、hide、近实时、AI 隔离、预约解耦、移动端 M1/M2/M4;Playwright+Chrome