依据:
畜牧科技资源管理功能需求.md、畜牧科技资源管理技术方案.md
接口 Base Path:/techServices/techResource;鉴权与若依一致(Cookie / Token)。
通用前置(无特殊说明):具备本模块全套权限的账号已登录(techService:techResource:list|query|add|edit|remove|publish|offline|assignAccount)。biz_tech_resource 宜预置(del_flag=0):
| 样本 | 类型 | 名称 | 发布态要点 |
|---|---|---|---|
| Z1 | 004005 专家 |
张专家 | 未发布;未分配账号 |
| Z2 | 004005 专家 |
李专家 | 已发布 |
| C1 | 004006 技术成果 |
育种新技术 | 未发布 |
| Y1 | 004007 共享仪器 |
显微镜01 | 已发布 |
| Y2 | 004007 共享仪器 |
离心机02 | 已下架(offline_time 非空) |
| K1 | 004008 视频课程 |
基础养殖入门 | 未发布 |
专家合法 Body 片段:resourceType=004005,resourceName=测试专家,introduction=专家简介,contactPhone=13800138000,affiliatedUnit=县畜牧局,detailAddress=科技路1号,serviceArea=全县,feeStandard=100,serviceStartTime=08:00,serviceEndTime=18:00,serviceWeekdays=[1,2,3,4,5],photoFileUrl/photoFilePath 来自上传。
技术成果 Body 片段:resourceType=004006,resourceName=测试成果,researchDirection=繁育,achievementSummary=摘要,keyTechPrinciple=原理,techAdvantage=优势,completionUnit=县农科院。
共享仪器 Body 片段:resourceType=004007,resourceName=测试仪,instrumentModel=A1,introduction=介绍,affiliatedUnit=县实验室,storageLocation=3号楼,reservationProcess=提前预约,personInCharge=王工,contactPhone=13800138001,borrowFee=50,serviceStartTime=09:00,serviceEndTime=17:00,serviceWeekdays=[1,2,3,4,5],photoFileUrl/photoFilePath 已上传。
视频课程 Body 片段:resourceType=004008,resourceName=测试课程,introduction=课程简介,courseTopic=005001,videoFileUrl/videoFilePath 已上传(mp4)。
界面(UI)测试:Playwright + Chromium(channel: 'chrome' 使用本机 Google Chrome)。
| 用例编号 | 测试模块 | 测试项 | 测试类型 | 测试工具 | 测试目的 | 前置条件 | 测试步骤 | 预期结果 |
|---|---|---|---|---|---|---|---|---|
| ZCZX-KJZYGL-UT-001 | 参数校验 | 服务时段 | 单元测试 | JUnit5 | §5.4、§5.6 | 无 | 结束早于开始;合法 08:00~18:00 |
非法失败;合法通过 |
| ZCZX-KJZYGL-UT-002 | 参数校验 | 手机号 | 单元测试 | JUnit5 | §5.2 | 无 | 123;13800138000 |
非法失败;合法通过 |
| ZCZX-KJZYGL-UT-003 | 参数校验 | 名称长度 | 单元测试 | JUnit5 | §5.4~5.7 | 无 | 专家名 11 字;成果名 21 字;仪器名 10 字 | 超限失败;合法通过 |
| ZCZX-KJZYGL-UT-004 | 参数校验 | 收费标准/借用金额 | 单元测试 | JUnit5 | §5.4、§5.6 | 无 | feeStandard/borrowFee 为 0、负数、正数 |
非正数失败;正数通过 |
| ZCZX-KJZYGL-UT-005 | 参数校验 | 服务周日 | 单元测试 | JUnit5 | §5.4 | 无 | required=true 时空数组失败;required=false 时通过 |
与必填开关一致 |
| ZCZX-KJZYGL-UT-006 | 参数校验 | 技术成果三项长文本 | 单元测试 | JUnit5 | §5.5 | 无 | 摘要/原理/优势 501 字;合法 500 字 | 超长失败;通过 |
| ZCZX-KJZYGL-UT-006a | 参数校验 | 成果缺研究方向 | 单元测试 | JUnit5 | §5.5 | 无 | 仅成果名称 | 失败 |
| ZCZX-KJZYGL-UT-006a2 | 参数校验 | 成果名称与方向 | 单元测试 | JUnit5 | §5.5 | 无 | 成果名称+研究方向 | 通过 |
| ZCZX-KJZYGL-UT-006b | 参数校验 | 专家资料选填 | 单元测试 | JUnit5 | §5.4 | 无 | 仅专家姓名 | 通过 |
| ZCZX-KJZYGL-UT-006c | 参数校验 | 仪器资料选填 | 单元测试 | JUnit5 | §5.6 | 无 | 仅仪器名称 | 通过 |
| ZCZX-KJZYGL-UT-006d | 参数校验 | 课程简介选填 | 单元测试 | JUnit5 | §5.7 | 无 | 标题+主题+视频;无简介 | 通过 |
| ZCZX-KJZYGL-UT-007 | 参数校验 | 类型字段矩阵 | 单元测试 | JUnit5 | §5.3、§2.1 | 无 | 成果带 contactPhone;专家缺 feeStandard;课程缺 videoFilePath |
专家/成果通过;课程缺视频失败 |
| ZCZX-KJZYGL-UT-008 | 参数校验 | 图片/视频路径 | 单元测试 | JUnit5 | §5.2 | 无 | 非 /profile;jpg 图;mp4 视频 |
非法失败;合法通过 |
| ZCZX-KJZYGL-UT-009 | 发布态 | 已发布不可改 | 单元测试 | JUnit5 | §5.8、§6 | publish_status=1 |
validateForUpdate |
失败 |
| ZCZX-KJZYGL-UT-010 | 发布态 | 仅已发布可下架 | 单元测试 | JUnit5 | §5.11 | 未发布/已发布 | validateOffline |
仅已发布通过 |
| ZCZX-KJZYGL-UT-011 | 发布态 | 三态解析 | 单元测试 | JUnit5 | §2.1 | 三组记录 | 解析展示状态 | 未发布/已发布/已下架与 offline_time 一致 |
| ZCZX-KJZYGL-UT-012 | 分配账号 | 类型与次数 | 单元测试 | JUnit5 | §5.12 | 成果 004006;仪器 004007;已分配专家 |
validateAssignAccount |
非专家失败;已分配失败 |
| ZCZX-KJZYGL-UT-012a | 资源类型 | 资讯类别校验 | 单元测试 | JUnit5+Mockito | §2.2 | Mock children | TechResourceTypeValidator.assertAllowed |
合法 004006 通过;非法编码失败 |
| ZCZX-KJZYGL-UT-013 | Service | 新增落库 | 单元测试 | JUnit5+Mockito | §5.2 | Mock Mapper | insert 合法专家 |
publish_status=0;offline_time 空;account_assigned=0 |
| ZCZX-KJZYGL-UT-014 | Service | 发布清空下架时间 | 单元测试 | JUnit5+Mockito | §5.11 | 已下架样本 | publish(id) |
publish_status=1;offline_time 空 |
| ZCZX-KJZYGL-UT-015 | Service | 下架保留发布时间 | 单元测试 | JUnit5+Mockito | §5.11 | 已发布 Z2 | offline(id) |
publish_status=0;offline_time 有值;publish_time 保留 |
| ZCZX-KJZYGL-UT-016 | Service | 逻辑删除 | 单元测试 | JUnit5+Mockito | §5.10 | 未发布 | remove(id) |
del_flag=2 |
| ZCZX-KJZYGL-UT-017 | Service | 删除有关联 | 单元测试 | JUnit5+Mockito | §2.5 | hasReference=true |
remove |
抛 ServiceException |
| ZCZX-KJZYGL-UT-018 | Service | 删除联动删账号 | 单元测试 | JUnit5+Mockito | §5.10、草稿 §10 | 未发布已分配专家;sys_user_id 非空 |
deleteByIds |
调用 deleteLinkedAccount;del_flag=2 |
| ZCZX-KJZYGL-UT-019 | Service | 专家分配账号 | 单元测试 | JUnit5+Mockito | §5.12、草稿 §11 | 未发布 Z1;Mock 用户服务 | assignAccount(id) |
account_assigned=1;绑定 role_key=**exp** |
| ZCZX-KJZYGL-UT-019a | 登录名 | 拼音首字母+id | 单元测试 | JUnit5 | §2.6 | 无 | generate("张专家",12L) |
zzj12 |
| ZCZX-KJZYGL-UT-020 | 分配账号 | 专家角色权限字符 | 单元测试 | JUnit5 | §5.12 | 无 | ROLE_KEY_EXPERT |
值为 exp |
| ZCZX-KJZYGL-UT-021 | Mapper | 列表筛选 SQL | 单元测试 | JUnit5 | §3.1 | 无 | 检查 XML | del_flag=0;resource_type=;resource_name LIKE;create_time DESC |
| ZCZX-KJZYGL-UT-022 | Mapper | 发布态筛选 | 单元测试 | JUnit5 | §2.1 | 无 | publishStatus=2 |
含 offline_time IS NOT NULL |
| 用例编号 | 测试模块 | 测试项 | 测试类型 | 测试工具 | 测试目的 | 前置条件 | 测试步骤 | 预期结果 |
|---|---|---|---|---|---|---|---|---|
| ZCZX-KJZYGL-API-001 | 列表 | 默认分页 | 接口测试 | Postman | §5.1 | 有多条样本 | GET /list?resourceType=004005 |
code=200;≤20 条;创建时间倒序 |
| ZCZX-KJZYGL-API-002 | 列表 | 名称模糊 | 接口测试 | Postman | §2.6 | 有 Z1「张专家」 | resourceName=张 |
含 Z1 |
| ZCZX-KJZYGL-API-003 | 列表 | 发布状态筛选 | 接口测试 | Postman | §2.6 | 有 Z2 | publishStatus=1 |
仅已发布 |
| ZCZX-KJZYGL-API-004 | 列表 | 已下架筛选 | 接口测试 | Postman | §2.4 | 有 Y2 | publishStatus=2 |
含 Y2 |
| ZCZX-KJZYGL-API-005 | 列表 | 不含已删除 | 接口测试 | Postman | §2.5 | 某 id 已删 | GET /list |
无该 id |
| ZCZX-KJZYGL-API-006 | 列表 | 缺 resourceType | 接口测试 | Postman | §3.1 | 已登录 | 不传 resourceType |
参数错误或空列表 |
| ZCZX-KJZYGL-API-007 | 新增 | 专家 | 接口测试 | Postman | §5.4 | 已登录 | POST 专家 Body;仅专家姓名 |
code=200;资料字段可省略 |
| ZCZX-KJZYGL-API-008 | 新增 | 技术成果 | 接口测试 | Postman | §5.5 | 已登录 | POST resourceType=004006;成果名称+研究方向 |
成功;摘要/原理/优势/完成单位可省略 |
| ZCZX-KJZYGL-API-009 | 新增 | 共享仪器 | 接口测试 | Postman | §5.6 | 已登录 | POST resourceType=004007;仅仪器名称 |
成功;照片/型号/服务时段等可省略 |
| ZCZX-KJZYGL-API-010 | 新增 | 视频课程 | 接口测试 | Postman | §5.7 | 已上传 mp4 | POST resourceType=004008;无简介 |
成功;含 videoFileUrl、课程主题 |
| ZCZX-KJZYGL-API-011 | 新增 | 专家服务时段非法 | 接口测试 | Postman | §5.4 | 已登录 | serviceEndTime 早于 serviceStartTime |
失败 |
| ZCZX-KJZYGL-API-012 | 新增 | 课程缺视频 | 接口测试 | Postman | §5.7 | 已登录 | 缺 videoFilePath |
失败 |
| ZCZX-KJZYGL-API-013 | 新增 | 手机号非法 | 接口测试 | Postman | §5.2 | 专家/仪器 | contactPhone=123 |
msg 含联系方式 |
| ZCZX-KJZYGL-API-014 | 详情 | 有效 id | 接口测试 | Postman | §5.9 | 有 Z1 | GET /{id} |
全字段;serviceWeekdays 为数组 |
| ZCZX-KJZYGL-API-015 | 详情 | 无效/已删 id | 接口测试 | Postman | 异常 | 已登录 | 不存在或已删 id | 失败或 data 空 |
| ZCZX-KJZYGL-API-016 | 修改 | 未发布修改 | 接口测试 | Postman | §5.8 | 有 Z1 | PUT 改 introduction |
成功;resourceType 不变 |
| ZCZX-KJZYGL-API-017 | 修改 | 已发布禁止 | 接口测试 | Postman | §5.8 | 有 Z2 | PUT |
失败 |
| ZCZX-KJZYGL-API-018 | 修改 | 改类型无效 | 接口测试 | Postman | §5.2 | 有 Z1 | PUT resourceType=004008 |
失败或忽略;库仍为 004005 |
| ZCZX-KJZYGL-API-019 | 发布 | 未发布发布 | 接口测试 | Postman | §5.11 | 有 Z1 | POST /publish/{id} |
publish_status=1;publishTime 有值 |
| ZCZX-KJZYGL-API-020 | 发布 | 重复发布 | 接口测试 | Postman | §5.11 | Z2 已发布 | 再次 publish |
「该资源已发布」 |
| ZCZX-KJZYGL-API-021 | 下架 | 已发布下架 | 接口测试 | Postman | §5.11 | 有 Z2 | POST /offline/{id} |
publish_status=0;offline_time 有值 |
| ZCZX-KJZYGL-API-022 | 下架 | 未发布不可下架 | 接口测试 | Postman | §5.11 | 有 Z1 | POST /offline/{id} |
失败 |
| ZCZX-KJZYGL-API-023 | 删除 | 未发布逻辑删 | 接口测试 | Postman | §5.10 | 无关联新行 | DELETE /{id} |
成功;列表不可见 |
| ZCZX-KJZYGL-API-023a | 删除 | 已分配联动删账号 | 接口测试 | Postman | §5.10、草稿 §10 | 未发布专家已 assignAccount |
DELETE /{id} |
资源不可见;sys_user 对应用户已删 |
| ZCZX-KJZYGL-API-024 | 删除 | 已发布禁止 | 接口测试 | Postman | §5.10 | 有 Z2 | DELETE |
失败 |
| ZCZX-KJZYGL-API-025 | 分配账号 | 专家成功 | 接口测试 | Postman | §5.12、草稿 §11 | Z1 未分配 | POST /assignAccount/{id} |
accountAssigned=1;登录名拼音首字母+id(如 zzj{id});角色 exp |
| ZCZX-KJZYGL-API-026 | 分配账号 | 重复分配 | 接口测试 | Postman | §5.12 | 已分配 | 再次调用 | 失败 |
| ZCZX-KJZYGL-API-027 | 分配账号 | 成果禁止 | 接口测试 | Postman | §5.12 | 有 C1 | assignAccount |
失败 |
| ZCZX-KJZYGL-API-028 | 分配账号 | 已发布禁止 | 接口测试 | Postman | §5.12 | 有 Z2 | assignAccount |
失败 |
| ZCZX-KJZYGL-API-029 | 端到端 | 下架后编辑再发布 | 接口测试 | Postman | §4.2 | 有 Y2 | offline 后 PUT→publish(或 Y2 已下架直接改发) |
最终已发布 |
| ZCZX-KJZYGL-API-030 | 端到端 | 专家全流程 | 接口测试 | Postman | §4.2 | 已登录 | POST专家→assignAccount→publish→offline→DELETE |
关键步成功 |
| ZCZX-KJZYGL-API-031 | 鉴权 | 未登录 | 接口测试 | curl | 安全 | 无 Token | GET /list?resourceType=004005 |
401 或未登录 |
| ZCZX-KJZYGL-API-032 | 权限 | 无发布权限 | 接口测试 | Postman | §6 | 无 publish | POST /publish/1 |
无权限失败 |
| ZCZX-KJZYGL-API-033 | 权限 | 无分配账号权限 | 接口测试 | Postman | §6 | 无 assignAccount | POST /assignAccount/1 |
无权限失败 |
| ZCZX-KJZYGL-API-034 | 响应 | 失败可读 | 接口测试 | Postman | §8 | 已登录 | 已发布修改、课程缺视频、重复分配 | msg 可区分 |
测试工具:Playwright + Chromium(channel: 'chrome' 使用本机 Google Chrome)。
| 用例编号 | 测试模块 | 测试项 | 测试类型 | 测试工具 | 测试目的 | 前置条件 | 测试步骤 | 预期结果 |
|---|---|---|---|---|---|---|---|---|
| ZCZX-KJZYGL-UI-001 | 列表 | 四 Tab 展示 | UI 测试 | Playwright+Chrome | §5.1、§2.3 | 已登录;有各类型数据 | 进入「畜牧科技资源管理」;切换四个 Tab | 每 Tab 仅本类型;列含名称、发布状态、操作 |
| ZCZX-KJZYGL-UI-002 | 列表 | Tab 与下拉联动 | UI 测试 | Playwright+Chrome | §2.3 | 已登录 | 切换 Tab;改资源类型下拉 | Tab 与下拉一致 |
| ZCZX-KJZYGL-UI-003 | 列表 | 名称模糊筛选 | UI 测试 | Playwright+Chrome | §2.6 | 有「张专家」 | 填「张」→搜索 | 含匹配行 |
| ZCZX-KJZYGL-UI-004 | 列表 | 发布状态筛选 | UI 测试 | Playwright+Chrome | §2.6 | 有已发布样本 | 选「已发布」→搜索 | 仅已发布行 |
| ZCZX-KJZYGL-UI-005 | 列表 | 重置 | UI 测试 | Playwright+Chrome | §5.1 | 已筛选 | 搜索→重置 | 条件清空;列表恢复 |
| ZCZX-KJZYGL-UI-006 | 新增 | 动态表单-专家 | UI 测试 | Playwright+Chrome | §5.4 | 有 add 权限 | 新增→选专家→填必填→上传照片→确定 | 成功;未发布;含服务区域、收费标准 |
| ZCZX-KJZYGL-UI-007 | 新增 | 动态表单-技术成果 | UI 测试 | Playwright+Chrome | §5.5 | 已登录 | 新增→选技术成果→填摘要/原理/优势→确定 | 无专家字段;成功 |
| ZCZX-KJZYGL-UI-008 | 新增 | 动态表单-共享仪器 | UI 测试 | Playwright+Chrome | §5.6 | 已登录 | 新增→选共享仪器→填预约流程、借用金额→确定 | 成功 |
| ZCZX-KJZYGL-UI-009 | 新增 | 动态表单-视频课程 | UI 测试 | Playwright+Chrome | §5.7 | 已登录 | 新增→选视频课程→上传 mp4→确定 | 成功;含课程主题 |
| ZCZX-KJZYGL-UI-010 | 新增 | 类型切换字段变化 | UI 测试 | Playwright+Chrome | §4.3 | 打开新增 | 选专家→改选视频课程 | 字段集切换;无仪器字段残留 |
| ZCZX-KJZYGL-UI-011 | 新增 | 必填校验 | UI 测试 | Playwright+Chrome | §5.2 | 新增弹窗 | 留空成果名称→确定 | 校验失败 |
| ZCZX-KJZYGL-UI-012 | 新增 | 附件格式提示 | UI 测试 | Playwright+Chrome | §5.2 | 视频课程新增 | 上传非 mp4 或超大文件(若可测) | 失败提示 |
| ZCZX-KJZYGL-UI-013 | 查看 | 只读详情 | UI 测试 | Playwright+Chrome | §5.9 | 任意行 | 点击查看 | 只读;含发布状态 |
| ZCZX-KJZYGL-UI-014 | 操作列 | 未发布按钮集 | UI 测试 | Playwright+Chrome | §6 | 未发布专家行 | 查看操作列 | 有编辑、删除、发布、分配账号 |
| ZCZX-KJZYGL-UI-015 | 操作列 | 已发布按钮集 | UI 测试 | Playwright+Chrome | §6 | 已发布行 | 查看操作列 | 有查看、下架;无编辑、删除、分配账号 |
| ZCZX-KJZYGL-UI-016 | 操作列 | 成果无分配账号 | UI 测试 | Playwright+Chrome | §5.12 | 技术成果 Tab | 查看操作列 | 无分配账号 |
| ZCZX-KJZYGL-UI-017 | 编辑 | 未发布修改 | UI 测试 | Playwright+Chrome | §5.8 | 未发布行 | 编辑→改介绍→确定 | 列表已更新 |
| ZCZX-KJZYGL-UI-018 | 编辑 | 已发布不可进 | UI 测试 | Playwright+Chrome | §5.8 | 已发布行 | 尝试编辑 | 无入口或提示先下架 |
| ZCZX-KJZYGL-UI-019 | 发布下架 | 发布确认 | UI 测试 | Playwright+Chrome | §5.11 | 未发布行 | 发布→确认 | 状态变已发布 |
| ZCZX-KJZYGL-UI-020 | 发布下架 | 下架确认 | UI 测试 | Playwright+Chrome | §5.11 | 已发布行 | 下架→确认 | 状态变已下架 |
| ZCZX-KJZYGL-UI-021 | 删除 | 确认删除 | UI 测试 | Playwright+Chrome | §5.10 | 未发布行 | 删除→确认 | 行消失 |
| ZCZX-KJZYGL-UI-021a | 删除 | 已分配联动删账号 | UI 测试 | Playwright+Chrome | §5.10、草稿 §10 | 未发布已分配专家 | 删除→确认 | 列表无该行;该登录名不可再登录 |
| ZCZX-KJZYGL-UI-022 | 分配账号 | 专家分配 | UI 测试 | Playwright+Chrome | §5.12 | 未发布未分配专家 | 分配账号→确认 | 显示已分配 |
| ZCZX-KJZYGL-UI-023 | 地图标点 | 本期不展示 | UI 测试 | Playwright+Chrome | §5.13 | 共享仪器 Tab | 查看操作列 | 无地图标点或置灰说明 |
| ZCZX-KJZYGL-UI-024 | 权限 | 只读角色 | UI 测试 | Playwright+Chrome | §6 | 仅 list/query | 进入模块 | 无新增/编辑/发布等 |
| ZCZX-KJZYGL-UI-025 | 端到端 | 运营全流程 | UI 集成 | Playwright+Chrome | §4.2 | 权限齐备 | 新增专家→分配→发布→下架→编辑→再发布→删除 | 状态与按钮符合矩阵 |
| 类别 | 单元 UT | 接口 API | 界面 UI |
|---|---|---|---|
| 正常流程 | UT-013~018 | API-007~010、016、019、023、029~030 | UI-006~013、017、019~022、025 |
| 异常/校验 | UT-001~008 | API-011~013、017~018 | UI-011~012 |
| 发布状态机 | UT-009~011、014~015 | API-003~004、019~022、029 | UI-004、014~015、019~020 |
| 分配账号 | UT-012、019、019a、020 | API-025~028 | UI-016、022 |
| 四类资源 | UT-007 | API-007~012 | UI-006~010 |
| 逻辑删除/引用 | UT-016~018 | API-005、023~024、023a | UI-021、021a |
| 权限/鉴权 | — | API-031~033 | UI-024 |
| 地图标点(不做) | — | — | UI-023 |
| 需求章节 | 要点 | 主要用例 |
|---|---|---|
| §5.1 列表 | Tab、模糊、发布筛选 | API-001~006;UI-001~005 |
| §5.2~5.7 新增/字段 | 四类表单、附件 | UT-001~008;API-007~013;UI-006~012 |
| §5.8 修改 | 仅未发布/已下架 | API-016~018;UI-017~018 |
| §5.9 查看 | 只读 | API-014~015;UI-013 |
| §5.10 删除 | 逻辑删;已分配删账号 | UT-016~018;API-023~024、023a;UI-021、021a |
| §5.11 发布下架 | 状态迁移 | UT-009~015;API-019~022;UI-019~020 |
| §5.12 分配账号 | 仅专家、exp、拼音首字母+id |
UT-012、019、019a、020;API-025~028;UI-022 |
| §5.13 地图标点 | 不做 | UI-023 |
| §6 权限 | 按钮级 | API-031~033;UI-024 |
npm i -D @playwright/test;npx playwright install chrome。use: { channel: 'chrome', locale: 'zh-CN', baseURL: 'http://localhost:80' };storageState 复用登录态。page.goto('/techService/techResource')(以菜单 component 为准)。page.getByRole('tab', { name: '专家库' });page.getByRole('button', { name: '新增' });page.getByLabel('专家姓名');page.getByLabel('成果名称')。| 版本 | 说明 |
|---|---|
| 1.0 | 初版:单元 20、接口 34、UI 25;覆盖四类资源、发布下架、专家分配账号;Playwright+Chrome |
| 1.1 | 对齐草稿 §10/§11:删除联动删账号;专家角色 101 用例;UT/API/UI 编号顺延 |
| 1.2 | 分配账号:拼音首字母+id;ROLE_KEY_EXPERT=exp;UT-019a |