# 隔离巡查登记 — 测试用例 > 依据:`隔离巡查登记功能需求.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 示例** - 正常(数量 0): ```json { "patrolTime": "2026-05-20 14:00:00", "penId": 1, "sickDeadQty": 0, "contentDesc": "巡查结果正常", "handleDesc": "无需处理" } ``` - 异常(数量 2): ```json { "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 |