隔离巡查登记 — 测试用例
依据:隔离巡查登记功能需求.md、隔离巡查登记技术方案.md
接口 Base Path:/tradeMarket/isolationPatrol;鉴权与若依一致(Cookie / Token)。
通用前置(无特殊说明):具备本模块权限的账号已登录(tradeMarket:isolationPatrol:list|query|add|edit|remove)。关联数据宜预置:
| 类型 |
样本 |
要点 |
圈位 biz_isolation_pen |
P1 id=1 pen_code=01、P2 id=2 02 |
del_flag=0 |
入场登记 biz_entry_isolation |
E1 |
del_flag=0;expected_release_date >= 今天 |
分圈 biz_entry_isolation_alloc |
P1:E001,E002;P2:E003 |
对应 entry_id=E1 |
| 已过期在栏(异常样本) |
E2 |
expected_release_date < 今天(用于在栏判定负例) |
合法新增 Body 示例
{
"patrolTime": "2026-05-20 14:00:00",
"penId": 1,
"sickDeadQty": 0,
"contentDesc": "巡查结果正常",
"handleDesc": "无需处理"
}
{
"patrolTime": "2026-05-20 15:00:00",
"penId": 1,
"sickDeadQty": 2,
"contentDesc": "巡查结果异常",
"handleDesc": "需要处理",
"earTagList": ["E001", "E002"]
}
界面(UI)测试:Playwright + Chromium(channel: 'chrome' 使用本机 Google Chrome)。
一、单元测试用例
| 用例编号 |
测试模块 |
测试项 |
测试类型 |
测试工具 |
测试目的 |
前置条件 |
测试步骤 |
预期结果 |
| ZCZX-GLXCDJ-UT-001 |
耳标解析 |
英文逗号拆分 |
单元测试 |
JUnit5 |
§2.5 复用 |
无 |
EarTagCodec.parse("A,B") |
["A","B"] |
| ZCZX-GLXCDJ-UT-002 |
耳标解析 |
去重拒绝 |
单元测试 |
JUnit5 |
§2.7 |
无 |
parse("E1,E1") |
校验失败或抛异常 |
| ZCZX-GLXCDJ-UT-003 |
一致性 |
P1 数量为 0 无耳标 |
单元测试 |
JUnit5 |
§2.8 P1 |
无 |
sickDeadQty=0,earTagList=["E1"] |
失败 |
| ZCZX-GLXCDJ-UT-004 |
一致性 |
P1 数量为 0 通过 |
单元测试 |
JUnit5 |
§2.8 P1 |
无 |
sickDeadQty=0,earTagList=[] |
通过 |
| ZCZX-GLXCDJ-UT-005 |
一致性 |
P2 数量与耳标不等 |
单元测试 |
JUnit5 |
§2.8 P2 |
无 |
sickDeadQty=2,耳标 1 个 |
失败 |
| ZCZX-GLXCDJ-UT-006 |
一致性 |
P2 数量与耳标相等 |
单元测试 |
JUnit5 |
§2.8 P2 |
无 |
sickDeadQty=2,2 个耳标 |
通过 |
| ZCZX-GLXCDJ-UT-007 |
一致性 |
P3 耳标不在栏 |
单元测试 |
JUnit5+Mockito |
§2.8 P3 |
在栏仅 E001 |
提交 E009 |
失败 |
| ZCZX-GLXCDJ-UT-008 |
一致性 |
P3 耳标重复 |
单元测试 |
JUnit5 |
§2.8 P3 |
无 |
earTagList=["E1","E1"] |
失败 |
| ZCZX-GLXCDJ-UT-009 |
在栏圈位 |
过期登记不计入 |
单元测试 |
JUnit5+Mockito |
§2.4 |
E2 已过期 |
isPenInStock(penId) |
false |
| ZCZX-GLXCDJ-UT-010 |
在栏圈位 |
有效登记计入 |
单元测试 |
JUnit5+Mockito |
§2.4 |
E1 在栏 |
isPenInStock(1) |
true |
| ZCZX-GLXCDJ-UT-011 |
在栏耳标 |
合并分圈耳标 |
单元测试 |
JUnit5+Mockito |
§2.4 |
P1 两行 alloc |
listEarTags(1) |
含 E001、E002 去重 |
| ZCZX-GLXCDJ-UT-012 |
巡查时间 |
晚于当前 |
单元测试 |
JUnit5 |
§2.2 |
无 |
patrolTime=明天 |
失败 |
| ZCZX-GLXCDJ-UT-013 |
巡查时间 |
等于当前 |
单元测试 |
JUnit5 |
§2.2 |
Mock now |
patrolTime=now |
通过 |
| ZCZX-GLXCDJ-UT-014 |
字段校验 |
文案长度 |
单元测试 |
JUnit5 |
§2.5/2.6 |
无 |
空、201 字、200 字 |
空/201 失败;200 通过 |
| ZCZX-GLXCDJ-UT-015 |
字段校验 |
病死数量 |
单元测试 |
JUnit5 |
§2.4 |
无 |
-1、0、99、小数 |
-1/小数失败;0/99 通过 |
| ZCZX-GLXCDJ-UT-016 |
文件校验 |
照片后缀 |
单元测试 |
JUnit5 |
§2.9 |
无 |
.exe、.png、.JPG |
exe 失败;png/jpg 通过 |
| ZCZX-GLXCDJ-UT-017 |
Service |
新增落库 |
单元测试 |
JUnit5+Mockito |
§3.3 |
Mock Mapper |
insert 正常样本 |
del_flag=0;pen_code 写入;ear_tags 按规则 |
| ZCZX-GLXCDJ-UT-018 |
Service |
数量为 0 耳标空 |
单元测试 |
JUnit5+Mockito |
§2.5 |
Mock |
insert qty=0 |
ear_tags 为 null |
| ZCZX-GLXCDJ-UT-019 |
Service |
修改全字段 |
单元测试 |
JUnit5+Mockito |
§5.3 |
已有记录 |
update 改圈位/数量/耳标 |
字段更新;再校验 P1~P3 |
| ZCZX-GLXCDJ-UT-020 |
Service |
逻辑删除 |
单元测试 |
JUnit5+Mockito |
§3.4 |
Mock |
remove(id) |
del_flag=2 |
| ZCZX-GLXCDJ-UT-021 |
Mapper |
列表日期区间 |
单元测试 |
JUnit5 |
§3.1 |
测试库 3 条不同日 |
selectList(start,end) |
仅闭区间内记录 |
| ZCZX-GLXCDJ-UT-022 |
Mapper |
圈位编号模糊 |
单元测试 |
JUnit5 |
§3.1 |
有 01、02 |
penCode=1 |
命中 01、11 等含 1 的编号 |
二、接口测试用例
| 用例编号 |
测试模块 |
测试项 |
测试类型 |
测试工具 |
测试目的 |
前置条件 |
测试步骤 |
预期结果 |
| ZCZX-GLXCDJ-API-001 |
列表 |
默认分页排序 |
接口测试 |
Postman |
§3.1 |
有巡查数据 |
GET /list |
code=200;≤20 条;patrolTime 倒序 |
| ZCZX-GLXCDJ-API-002 |
列表 |
巡查日期区间 |
接口测试 |
Postman |
§5.2.1 |
已知巡查日 |
patrolDateStart/End 含该日 |
命中;区间外不出现 |
| ZCZX-GLXCDJ-API-003 |
列表 |
圈位编号模糊 |
接口测试 |
Postman |
§5.2.1 |
有 01、02 |
penCode=1 |
含 01 等片段行 |
| ZCZX-GLXCDJ-API-004 |
列表 |
组合筛选 |
接口测试 |
Postman |
多条件 |
已登录 |
日期+圈位 |
同时满足才命中 |
| ZCZX-GLXCDJ-API-005 |
列表 |
日期起止倒置 |
接口测试 |
Postman |
§3.1 |
已登录 |
Start>End |
400 或失败提示 |
| ZCZX-GLXCDJ-API-006 |
列表 |
不含已删除 |
接口测试 |
Postman |
逻辑删除 |
某 id 已删 |
GET /list |
无该 id |
| ZCZX-GLXCDJ-API-007 |
在栏下拉 |
penOptions |
接口测试 |
Postman |
§3.5 |
E1 在栏 |
GET /penOptions |
data 含 P1、P2;按 penCode 升序 |
| ZCZX-GLXCDJ-API-008 |
在栏下拉 |
无在栏空数组 |
接口测试 |
Postman |
§2.3 |
全部登记已过期 |
GET /penOptions |
data=[] |
| ZCZX-GLXCDJ-API-009 |
在栏耳标 |
penEarTags |
接口测试 |
Postman |
§3.6 |
P1 有 E001,E002 |
GET /penEarTags?penId=1 |
数组含两耳标 |
| ZCZX-GLXCDJ-API-010 |
在栏耳标 |
缺 penId |
接口测试 |
Postman |
异常 |
已登录 |
无 penId |
400 或失败 |
| ZCZX-GLXCDJ-API-011 |
在栏耳标 |
非在栏圈位 |
接口测试 |
Postman |
§2.4 |
圈位无在栏 |
penId 无效 |
[] 或 400 |
| ZCZX-GLXCDJ-API-012 |
新增 |
正常 qty=0 |
接口测试 |
Postman |
§5.1 |
P1 在栏 |
POST 正常 Body |
code=200;earTags 空 |
| ZCZX-GLXCDJ-API-013 |
新增 |
异常 qty=2 |
接口测试 |
Postman |
§5.1 |
P1 在栏 |
POST 异常 Body |
成功;earTagList 2 个 |
| ZCZX-GLXCDJ-API-014 |
新增 |
含巡查照片 |
接口测试 |
Postman |
§2.9 |
已 upload png |
Body 带 photoUrl/Path |
成功;详情有图 |
| ZCZX-GLXCDJ-API-015 |
新增 |
缺巡查时间 |
接口测试 |
Postman |
异常 |
已登录 |
无 patrolTime |
失败 |
| ZCZX-GLXCDJ-API-016 |
新增 |
巡查时间未来 |
接口测试 |
Postman |
§2.2 |
已登录 |
patrolTime 明天 |
失败 |
| ZCZX-GLXCDJ-API-017 |
新增 |
缺圈位 |
接口测试 |
Postman |
异常 |
已登录 |
无 penId |
失败 |
| ZCZX-GLXCDJ-API-018 |
新增 |
圈位非在栏 |
接口测试 |
Postman |
§2.3 |
无在栏 penId |
POST |
失败 |
| ZCZX-GLXCDJ-API-019 |
新增 |
P1 数量>0 无耳标 |
接口测试 |
Postman |
§2.8 P1/P2 |
已登录 |
sickDeadQty=1,无耳标 |
失败 |
| ZCZX-GLXCDJ-API-020 |
新增 |
P2 耳标数不等 |
接口测试 |
Postman |
§2.8 P2 |
已登录 |
sickDeadQty=2,1 耳标 |
失败;msg 含数量不一致 |
| ZCZX-GLXCDJ-API-021 |
新增 |
P3 耳标超范围 |
接口测试 |
Postman |
§2.8 P3 |
P1 仅 E001 |
earTagList=["E009"] |
失败 |
| ZCZX-GLXCDJ-API-022 |
新增 |
P1 数量0 带耳标 |
接口测试 |
Postman |
§2.8 P1 |
已登录 |
sickDeadQty=0 带耳标 |
失败 |
| ZCZX-GLXCDJ-API-023 |
新增 |
文案超长 |
接口测试 |
Postman |
§2.5 |
已登录 |
contentDesc 201 字 |
失败 |
| ZCZX-GLXCDJ-API-024 |
新增 |
照片后缀非法 |
接口测试 |
Postman |
§2.9 |
已登录 |
photoPath 为 .exe |
失败 |
| ZCZX-GLXCDJ-API-025 |
新增 |
病死数量为负 |
接口测试 |
Postman |
§2.4 |
已登录 |
sickDeadQty=-1 |
失败 |
| ZCZX-GLXCDJ-API-026 |
详情 |
有效 id |
接口测试 |
Postman |
§5.4 |
有记录 R1 |
GET /{id} |
含 earTagList、photoUrl |
| ZCZX-GLXCDJ-API-027 |
详情 |
无效/已删 id |
接口测试 |
Postman |
异常 |
已登录 |
不存在或已删 |
失败或 data 空 |
| ZCZX-GLXCDJ-API-028 |
修改 |
改数量与耳标 |
接口测试 |
Postman |
§5.3 |
有 R1 qty=0 |
PUT 改 qty=1+耳标 |
成功;详情已更新 |
| ZCZX-GLXCDJ-API-029 |
修改 |
改圈位清空耳标 |
接口测试 |
Postman |
§5.1.2 |
R1 在 P1 |
PUT 改 P2;耳标须重选 |
未选在栏耳标则失败 |
| ZCZX-GLXCDJ-API-030 |
修改 |
违反 P2 |
接口测试 |
Postman |
§2.8 |
有 R1 |
PUT 数量与耳标不一致 |
失败 |
| ZCZX-GLXCDJ-API-031 |
修改 |
清空照片 |
接口测试 |
Postman |
§3.3 |
有图记录 |
PUT photoUrl/Path="" |
成功;详情无图 |
| ZCZX-GLXCDJ-API-032 |
修改 |
不存在 id |
接口测试 |
Postman |
异常 |
已登录 |
伪造 id PUT |
失败 |
| ZCZX-GLXCDJ-API-033 |
删除 |
单条逻辑删 |
接口测试 |
Postman |
§5.5 |
有 R1 |
DELETE /{id} |
成功;列表不可见 |
| ZCZX-GLXCDJ-API-034 |
删除 |
重复删除 |
接口测试 |
Postman |
幂等 |
已删 id |
再次 DELETE |
失败或不存在 |
| ZCZX-GLXCDJ-API-035 |
端到端 |
CRUD 串联 |
接口测试 |
Postman |
§4 |
在栏数据齐备 |
POST→list→GET→PUT→DELETE |
每步 code=200 |
| ZCZX-GLXCDJ-API-036 |
鉴权 |
未登录 |
接口测试 |
curl |
安全 |
无 Token |
GET /list |
401 或统一未登录 |
| ZCZX-GLXCDJ-API-037 |
权限 |
无新增权限 |
接口测试 |
Postman |
§6 |
仅 list |
POST |
无权限失败 |
| ZCZX-GLXCDJ-API-038 |
权限 |
无删除权限 |
接口测试 |
Postman |
§6 |
无 remove |
DELETE |
无权限失败 |
| ZCZX-GLXCDJ-API-039 |
响应 |
失败可读 |
接口测试 |
Postman |
§8 |
已登录 |
触发 P2、非在栏圈位 |
msg 可区分场景 |
三、界面测试用例(UI)
测试工具:Playwright + Chromium(channel: 'chrome' 使用本机 Google Chrome)。
| 用例编号 |
测试模块 |
测试项 |
测试类型 |
测试工具 |
测试目的 |
前置条件 |
测试步骤 |
预期结果 |
| ZCZX-GLXCDJ-UI-001 |
列表 |
默认展示列 |
UI 测试 |
Playwright+Chrome |
§5.2.3 |
已登录;有数据 |
进入「隔离巡查登记」 |
含巡查时间、圈位编号、巡查照片、巡查内容描述、处理情况、病死病害数量、耳标号、操作 |
| ZCZX-GLXCDJ-UI-002 |
列表 |
巡查日期筛选 |
UI 测试 |
Playwright+Chrome |
§5.2.1 |
已知日期记录 |
选日期范围→搜索 |
仅范围内记录 |
| ZCZX-GLXCDJ-UI-003 |
列表 |
圈位编号模糊 |
UI 测试 |
Playwright+Chrome |
§5.2.1 |
有 01 圈位记录 |
填 1→搜索 |
命中含 01 行 |
| ZCZX-GLXCDJ-UI-004 |
列表 |
重置 |
UI 测试 |
Playwright+Chrome |
§5.2 |
已筛选 |
搜索→重置 |
条件清空;列表恢复 |
| ZCZX-GLXCDJ-UI-005 |
列表 |
照片缩略/查看 |
UI 测试 |
Playwright+Chrome |
§5.2.3 |
有图记录 |
查看照片列 |
缩略图或查看可预览 |
| ZCZX-GLXCDJ-UI-006 |
列表 |
数量0耳标列 |
UI 测试 |
Playwright+Chrome |
§2.7 |
有 qty=0 行 |
查看耳标列 |
显示「—」或空 |
| ZCZX-GLXCDJ-UI-007 |
新增 |
巡查时间默认 |
UI 测试 |
Playwright+Chrome |
§5.1 |
有 add 权限 |
打开新增弹窗 |
巡查时间≈当前时刻 |
| ZCZX-GLXCDJ-UI-008 |
新增 |
圈位下拉在栏 |
UI 测试 |
Playwright+Chrome |
§2.3 |
E1 在栏 |
打开圈位下拉 |
仅 P1、P2 等;无已删/空圈 |
| ZCZX-GLXCDJ-UI-009 |
新增 |
无在栏提示 |
UI 测试 |
Playwright+Chrome |
§2.3 |
无在栏登记 |
打开新增 |
提示「暂无在栏圈位…」或下拉空 |
| ZCZX-GLXCDJ-UI-010 |
新增 |
数量默认0联动文案 |
UI 测试 |
Playwright+Chrome |
§5.1.2 |
新增弹窗 |
保持数量 0 |
内容「巡查结果正常」;处理「无需处理」;无耳标区 |
| ZCZX-GLXCDJ-UI-011 |
新增 |
数量>0联动文案 |
UI 测试 |
Playwright+Chrome |
§5.1.2 |
新增;选 P1 |
数量改 2 |
内容「巡查结果异常」;处理「需要处理」;显示耳标多选 |
| ZCZX-GLXCDJ-UI-012 |
新增 |
耳标选项范围 |
UI 测试 |
Playwright+Chrome |
§2.7 |
P1 在栏 E001,E002 |
数量 1→选耳标 |
下拉仅 E001、E002 |
| ZCZX-GLXCDJ-UI-013 |
新增 |
耳标个数校验 |
UI 测试 |
Playwright+Chrome |
§2.8 P2 |
新增 |
数量 2、只选 1 耳标→确定 |
提示数量不一致;不提交 |
| ZCZX-GLXCDJ-UI-014 |
新增 |
换圈位清空耳标 |
UI 测试 |
Playwright+Chrome |
§5.1.2 |
已选 P1 与耳标 |
改选 P2 |
耳标清空;选项变为 P2 在栏耳标 |
| ZCZX-GLXCDJ-UI-015 |
新增 |
数量改0隐藏耳标 |
UI 测试 |
Playwright+Chrome |
§5.1.2 |
已选 2 耳标 |
数量改 0 |
耳标区隐藏;已选清空 |
| ZCZX-GLXCDJ-UI-016 |
新增 |
上传照片合法 |
UI 测试 |
Playwright+Chrome |
§2.9 |
png≤10MB |
上传 png |
成功;列表/详情可见 |
| ZCZX-GLXCDJ-UI-017 |
新增 |
上传非法 |
UI 测试 |
Playwright+Chrome |
§2.9 |
exe 或>10MB |
选择上传 |
提示格式或大小限制 |
| ZCZX-GLXCDJ-UI-018 |
新增 |
保存正常全流程 |
UI 测试 |
Playwright+Chrome |
§4.2 |
在栏+权限 |
qty=0 填全→确定 |
成功;列表新行正确 |
| ZCZX-GLXCDJ-UI-019 |
新增 |
保存异常全流程 |
UI 测试 |
Playwright+Chrome |
§4.2 |
P1 两耳标 |
qty=2 选 E001,E002→确定 |
成功;耳标列展示两号 |
| ZCZX-GLXCDJ-UI-020 |
新增 |
巡查时间未来 |
UI 测试 |
Playwright+Chrome |
§2.2 |
新增 |
选未来时间→保存 |
前端或提交失败提示 |
| ZCZX-GLXCDJ-UI-021 |
新增 |
取消 |
UI 测试 |
Playwright+Chrome |
§5.1.3 |
新增 |
填数据→取消 |
弹窗关;无新行 |
| ZCZX-GLXCDJ-UI-022 |
查看 |
只读全字段 |
UI 测试 |
Playwright+Chrome |
§5.4 |
有记录 |
点击查看 |
各字段只读;照片可预览 |
| ZCZX-GLXCDJ-UI-023 |
编辑 |
改数量与耳标 |
UI 测试 |
Playwright+Chrome |
§5.3 |
qty=0 记录 |
编辑→改 qty=1→选耳标→确定 |
列表/详情已更新 |
| ZCZX-GLXCDJ-UI-024 |
编辑 |
清除照片 |
UI 测试 |
Playwright+Chrome |
§5.3 |
有图记录 |
编辑→删除照片→确定 |
详情无图 |
| ZCZX-GLXCDJ-UI-025 |
删除 |
确认删除 |
UI 测试 |
Playwright+Chrome |
§5.5 |
任意行 |
删除→确认 |
行消失 |
| ZCZX-GLXCDJ-UI-026 |
删除 |
取消删除 |
UI 测试 |
Playwright+Chrome |
§5.5 |
任意行 |
删除→取消 |
行仍在 |
| ZCZX-GLXCDJ-UI-027 |
端到端 |
全流程 |
UI 集成 |
Playwright+Chrome |
§4 |
权限+在栏 |
新增正常→筛选→查看→编辑异常→删除 |
无报错;数据一致 |
| ZCZX-GLXCDJ-UI-028 |
权限 |
只读角色 |
UI 测试 |
Playwright+Chrome |
§6 |
仅 list/query |
进入模块 |
无新增/编辑/删除按钮 |
| ZCZX-GLXCDJ-UI-029 |
查看 |
详情进编辑 |
UI 测试 |
Playwright+Chrome |
§5.4 |
查看弹窗 |
点「编辑」 |
编辑弹窗回显数据 |
Playwright 与谷歌浏览器(实施提示)
- 安装:
npm i -D @playwright/test;npx playwright install chrome。
- 配置:
use: { channel: 'chrome', locale: 'zh-CN', baseURL: 'http://localhost:80' };storageState 复用登录态。
- 路由:
page.goto('/tradeMarket/isolationPatrol')(以菜单 component 为准)。
- 新增:
page.getByRole('button', { name: '新增' }).click() → 选圈位 → 填病死病害数量 → 按需选耳标 → 确定。
- 日期筛选:
page.getByLabel('巡查日期') 使用 daterange;page.getByRole('button', { name: '搜索' }).click()。
- 耳标:
page.getByLabel('耳标号') 多选;数量改 0 时断言耳标区域 hidden 或不可见。
覆盖对照
| 类别 |
单元 UT |
接口 API |
界面 UI |
| 正常流程 |
UT-004、006、010~013、017~019 |
API-007~014、026、028、035 |
UI-007~012、018~019、022~023、027 |
| 异常流程 |
UT-002、003、005、007、012、015 |
API-005、010~011、015~025、027、032、034 |
UI-009、013、017、020~021、025~026 |
| 业务约束 P1~P3 |
UT-003~008 |
API-019~022 |
UI-010~015、013、019 |
| 在栏圈位/耳标 |
UT-009~011 |
API-007~011、018 |
UI-008~009、012、014 |
| 数量联动文案 |
— |
— |
UI-010~011、015 |
| 巡查时间 |
UT-012~013 |
API-016 |
UI-007、020 |
| 列表筛选 |
UT-021~022 |
API-002~004 |
UI-002~004 |
| 巡查照片 |
UT-016 |
API-014、024 |
UI-005、016~017、024 |
| 逻辑删除 |
UT-020 |
API-006、033~034 |
UI-025~026 |
| 权限/鉴权 |
— |
API-036~038 |
UI-028 |
功能需求追溯(自查)
| 需求章节 |
要点 |
主要对应用例 |
| §5.1 新增 |
字段、联动、P1~P3 |
UT-003~008、017~018;API-012~025;UI-007~021 |
| §5.2 列表 |
日期区间、圈位模糊 |
UT-021~022;API-001~006;UI-001~006 |
| §5.3 修改 |
全字段可改 |
UT-019;API-028~032;UI-023~024 |
| §5.4 查看 |
只读 |
API-026;UI-022、029 |
| §5.5 删除 |
逻辑删 |
UT-020;API-033~034;UI-025~026 |
| §2.3~2.4 在栏 |
penOptions/penEarTags |
UT-009~011;API-007~011、018;UI-008~009、012 |
| §2.8 P1~P3 |
数量与耳标 |
UT-003~008;API-019~022;UI-010~015、013 |
| §2.9 照片 |
jpg/png≤10MB |
UT-016;API-014、024;UI-016~017 |
| §6 权限 |
按钮权限 |
API-037~038;UI-028 |
修订记录
| 版本 |
说明 |
| 1.0 |
初版:UT/API/UI 全表;覆盖正常/异常/P1~P3/在栏/筛选/权限;Playwright+Chrome |