# 牧场管理 — 测试用例 > 依据:`牧场管理功能需求.md`、`牧场管理技术方案.md` > **接口 Base Path(示例)**:`/dataModel/pasture`;若含 `context-path` 或网关前缀须补齐。鉴权与若依一致(Cookie / Token)。 **通用前置(无特殊说明)**:具备本模块菜单与按钮权限的账号已登录;可先调 `POST /common/upload` 取得照片 `url`、`fileName`(作 `photoFilePath`)。**牧场性质**:`1` 个体、`2` 企业。**经营状态**:`1` 正常、`2` 停业、`3` 注销(新建默认 `1`)。**测试数据**:合法个体身份证(如 `11010519491231002X`)、合法企业主体识别号(18 位)、11 位手机号、省/市/县三级选全;照片白名单 `jpg`/`jpeg`/`png`(≤10MB)。 **界面(UI)测试**:**Playwright** + **Chromium**(`channel: 'chrome'` 使用本机 **Google Chrome**)。 --- ## 一、单元测试用例 | 用例编号 | 测试模块 | 测试项 | 测试类型 | 测试工具 | 测试目的 | 前置条件 | 测试步骤 | 预期结果 | | --- | --- | --- | --- | --- | --- | --- | --- | --- | | ZCZX-MCGL-UT-001 | 参数校验 | 牧场名称长度 | 单元测试 | JUnit5 | 1~10 字 | 无 | 空串、1 字、10 字、21 字 | 空/21 失败;1~10 通过 | | ZCZX-MCGL-UT-002 | 参数校验 | 简介字数 | 单元测试 | JUnit5 | 选填≤50 | 无 | null/空通过;51 字失败 | 符合 §5.1 | | ZCZX-MCGL-UT-003 | 参数校验 | 牧场性质枚举 | 单元测试 | JUnit5 | 仅 1~2 | 无 | `pastureNature` 为 1/2 通过;0、3、null 失败 | 与 §2.2 一致 | | ZCZX-MCGL-UT-004 | 参数校验 | 个体身份证 | 单元测试 | JUnit5 | §2.3 | `pastureNature=1` | 合法 18 位、17 位、校验位错误 | 仅合法通过;错误提示含「身份证」 | | ZCZX-MCGL-UT-005 | 参数校验 | 企业主体识别号 | 单元测试 | JUnit5 | §2.3 | `pastureNature=2` | 合法 18 位、15 位、含非法字符 | 仅合法通过;错误提示含「主体识别号」类 | | ZCZX-MCGL-UT-006 | 参数校验 | 联系电话 | 单元测试 | JUnit5 | 大陆手机号 | 无 | 合法 11 位、10 位、非 1 开头 | 仅合法通过 | | ZCZX-MCGL-UT-007 | 参数校验 | 所属区域 | 单元测试 | JUnit5 | 须选至县 | 无 | 缺省/市/县任一 code 或 name | 失败;六级齐全通过 | | ZCZX-MCGL-UT-008 | 参数校验 | 详细地址/负责人 | 单元测试 | JUnit5 | 选填上限 | 无 | 地址 51 字、负责人 11 字 | 失败;合法长度通过 | | ZCZX-MCGL-UT-009 | 参数校验 | 经营状态枚举 | 单元测试 | JUnit5 | 1~3 | 无 | `bizStatus` 为 1/3 通过;0、4 失败 | 与技术方案一致 | | ZCZX-MCGL-UT-010 | 附件校验 | 照片后缀 | 单元测试 | JUnit5 | 白名单 | 无 | `.jpg` 通过;`.exe`、`.bmp` 失败 | 与 §5.1 一致 | | ZCZX-MCGL-UT-011 | 附件校验 | 照片成对 | 单元测试 | JUnit5 | url/path | 无 | 仅 url 无 path;二者齐全或皆空 | 单字段失败;成对/皆空通过 | | ZCZX-MCGL-UT-012 | 业务默认 | 缺省经营状态 | 单元测试 | JUnit5 | 新增默认正常 | 无 | `resolveBizStatus(null)` 或 insert 未传 | 结果为 `1` | | ZCZX-MCGL-UT-013 | 证件联动 | 性质切换校验 | 单元测试 | JUnit5 | §2.3 | 无 | 个体证号+企业性质 / 企业证号+个体性质 | 均失败 | | ZCZX-MCGL-UT-014 | Service | 新增落库 | 单元测试 | JUnit5+Mockito | 正常登记 | 合法实体 | `insert(pasture)` | `del_flag=0`;`biz_status` 正确 | | ZCZX-MCGL-UT-015 | Service | 修改全字段 | 单元测试 | JUnit5+Mockito | §5.3 | 已存在 id | `update` 改名称、状态、区划 | 更新成功 | | ZCZX-MCGL-UT-016 | Service | 经营状态互改 | 单元测试 | JUnit5+Mockito | 1↔2↔3 | 原 `biz_status=2` | `update` 改为 `1` 或 `3` | 成功(默认允许) | | ZCZX-MCGL-UT-017 | Service | 逻辑删除 | 单元测试 | JUnit5+Mockito | §5.4 | Mock Mapper | `remove([id])` | 调用 `del_flag=2`;非物理 DELETE | | ZCZX-MCGL-UT-018 | Service | 删除清照片 | 单元测试 | JUnit5+Mockito | 删文件 | 有 `photo_file_path` | `remove([id])` | Mock 验证 `deleteFile(path)` | | ZCZX-MCGL-UT-019 | Service | 换照片删旧 | 单元测试 | JUnit5+Mockito | §5.3 | 旧 path 已知 | `update` 换新 `photoFilePath` | Mock 验证删除旧 path | | ZCZX-MCGL-UT-020 | Mapper | 列表排序与删除过滤 | 单元测试 | JUnit5 | 技术方案 | 无 | 检查 XML:`ORDER BY` 与 `del_flag='0'` | 含 `create_time desc`;列表带 `del_flag=0` | --- ## 二、接口测试用例 | 用例编号 | 测试模块 | 测试项 | 测试类型 | 测试工具 | 测试目的 | 前置条件 | 测试步骤 | 预期结果 | | --- | --- | --- | --- | --- | --- | --- | --- | --- | | ZCZX-MCGL-API-001 | 列表 | 默认分页排序 | 接口测试 | Postman/curl | §5.2 | 已登录;有多条记录 | `GET /dataModel/pasture/list` | `rows`≤20;`createTime` 新在前 | | ZCZX-MCGL-API-002 | 列表 | 关键字-名称 | 接口测试 | Postman | 名称模糊 | 已登录 | `keyword=` 唯一名称片段 | 命中含该片段记录 | | ZCZX-MCGL-API-003 | 列表 | 性质筛选-个体 | 接口测试 | Postman | 精确 | 已登录 | `pastureNature=1` | 均为个体 | | ZCZX-MCGL-API-004 | 列表 | 性质筛选-企业 | 接口测试 | Postman | 精确 | 已登录 | `pastureNature=2` | 均为企业 | | ZCZX-MCGL-API-005 | 列表 | 经营状态筛选 | 接口测试 | Postman | 精确 | 有停业样本 | `bizStatus=2` | 均为停业 | | ZCZX-MCGL-API-006 | 列表 | 组合查询 | 接口测试 | Postman | 多条件 | 已登录 | keyword+pastureNature+bizStatus | 同时满足 | | ZCZX-MCGL-API-007 | 列表 | 不含已删除 | 接口测试 | Postman | 逻辑删除 | 已知 id 已删 | `GET list` | 列表无该 id | | ZCZX-MCGL-API-008 | 新增 | 合法全字段 | 接口测试 | Postman | §5.1 | 已登录;已上传照片 | `POST` Body 合法 | `code` 成功;详情字段齐全 | | ZCZX-MCGL-API-009 | 新增 | 最小必填无照片 | 接口测试 | Postman | 选填照片 | 已登录 | `POST` 必填项齐全、无照片/简介 | 成功;`bizStatus` 为 `1` 或入参值 | | ZCZX-MCGL-API-010 | 新增 | 缺省经营状态 | 接口测试 | Postman | 默认正常 | 已登录 | `POST` 不传 `bizStatus` | 落库 `bizStatus=1` | | ZCZX-MCGL-API-011 | 新增 | 个体+身份证 | 接口测试 | Postman | §2.3 | 已登录 | `pastureNature=1`+合法身份证 | 成功 | | ZCZX-MCGL-API-012 | 新增 | 企业+识别号 | 接口测试 | Postman | §2.3 | 已登录 | `pastureNature=2`+合法主体号 | 成功 | | ZCZX-MCGL-API-013 | 新增 | 名称非法 | 接口测试 | Postman | 1~10 | 已登录 | 名称空/11 字 | 失败;无新记录 | | ZCZX-MCGL-API-014 | 新增 | 性质非法 | 接口测试 | Postman | 枚举 | 已登录 | `pastureNature=0` | 失败 | | ZCZX-MCGL-API-015 | 新增 | 个体证号非法 | 接口测试 | Postman | 校验 | 已登录 | `pastureNature=1`+错误证号 | 失败;`msg` 可区分 | | ZCZX-MCGL-API-016 | 新增 | 手机号非法 | 接口测试 | Postman | 校验 | 已登录 | 10 位手机号 | 失败 | | ZCZX-MCGL-API-017 | 新增 | 区划未选全 | 接口测试 | Postman | 至县级 | 已登录 | 缺 `countyCode` | 失败 | | ZCZX-MCGL-API-018 | 新增 | 照片仅 url | 接口测试 | Postman | 成对 | 已登录 | 有 url 无 path | 失败 | | ZCZX-MCGL-API-019 | 详情 | 有效 id | 接口测试 | Postman | §5.5 | 已登录 | `GET /dataModel/pasture/{id}` | 含区划、状态、照片及审计字段 | | ZCZX-MCGL-API-020 | 详情 | 无效/已删 id | 接口测试 | Postman | 异常 | 已登录 | 不存在或 `del_flag=2` 的 id | 业务失败或空数据 | | ZCZX-MCGL-API-021 | 修改 | 合法修改 | 接口测试 | Postman | §5.3 | 已登录;有记录 | `PUT` 改名称、负责人 | 成功;详情已更新 | | ZCZX-MCGL-API-022 | 修改 | 性质变更重校证件 | 接口测试 | Postman | §2.3 | 个体记录 | `PUT` 改 `pastureNature=2` 且证号仍为身份证 | 失败 | | ZCZX-MCGL-API-023 | 修改 | 经营状态变更 | 接口测试 | Postman | 1↔2↔3 | 有记录 | `PUT` `bizStatus` 从 1→3 | 成功 | | ZCZX-MCGL-API-024 | 修改 | 替换照片 | 接口测试 | Postman | 删旧 | 有旧照片 path | `PUT` 换新 photo 成对 | 成功;旧 URL 不可访问(抽查) | | ZCZX-MCGL-API-025 | 删除 | 单条逻辑删除 | 接口测试 | Postman | §5.4 | 已登录 | `DELETE /dataModel/pasture/{id}` | 成功;列表/详情不可见 | | ZCZX-MCGL-API-026 | 删除 | 批量删除 | 接口测试 | Postman | 批量 | 已登录 | `DELETE id1,id2` | 均不可查 | | ZCZX-MCGL-API-027 | 端到端 | CRUD 串联 | 接口测试 | Postman | §4 | 已登录 | 新增(个体)→列表→详情→改企业证号→删 | 每步成功(改企业须换合法主体号) | | ZCZX-MCGL-API-028 | 鉴权 | 未登录 | 接口测试 | curl | 安全 | 无 Token | `GET .../list` | 401 或统一未登录 | | ZCZX-MCGL-API-029 | 权限 | 无写权限 | 接口测试 | Postman | 越权 | 仅 list 权限 | `POST .../pasture` | 无权限失败 | | ZCZX-MCGL-API-030 | 响应 | 失败可读 | 接口测试 | Postman | §7 | 已登录 | 触发名称空、证号错等 | Body 含 `code`、`msg` 且可区分 | --- ## 三、界面测试用例(UI) **测试工具**:**Playwright** + **Chromium**(`channel: 'chrome'` 使用本机 **Google Chrome**)。 | 用例编号 | 测试模块 | 测试项 | 测试类型 | 测试工具 | 测试目的 | 前置条件 | 测试步骤 | 预期结果 | | --- | --- | --- | --- | --- | --- | --- | --- | --- | | ZCZX-MCGL-UI-001 | 列表 | 默认分页排序 | UI 测试 | Playwright+Chrome | §5.2 | 已登录;数据>20 | 进入「牧场管理」菜单 | 默认每页 20;创建时间新在前 | | ZCZX-MCGL-UI-002 | 列表 | 关键字查询 | UI 测试 | Playwright+Chrome | 名称模糊 | 有名称含关键词记录 | 输入牧场名称→搜索 | 表格含该行 | | ZCZX-MCGL-UI-003 | 列表 | 牧场性质筛选 | UI 测试 | Playwright+Chrome | 精确 | 个体/企业均有 | 选「个体」→搜索 | 性质列均为个体 | | ZCZX-MCGL-UI-004 | 列表 | 经营状态筛选 | UI 测试 | Playwright+Chrome | 精确 | 多状态均有 | 选「停业」→搜索 | 状态列均为停业 | | ZCZX-MCGL-UI-005 | 列表 | 组合与重置 | UI 测试 | Playwright+Chrome | 恢复条件 | 已多条件筛选 | 搜索→点「重置」 | 条件清空;恢复默认列表 | | ZCZX-MCGL-UI-006 | 列表 | 操作列与地图 | UI 测试 | Playwright+Chrome | §5.6 不做 | 有数据行 | 查看操作列 | 有查看/编辑/删除;**无**地图标点或置灰提示 | | ZCZX-MCGL-UI-007 | 新增 | 合法全字段 | UI 测试 | Playwright+Chrome | §5.1 | 已登录 | 新增→填必填+选区划至县+上传 jpg→确定 | 成功;列表出现新记录 | | ZCZX-MCGL-UI-008 | 新增 | 无照片无简介 | UI 测试 | Playwright+Chrome | 选填 | 已登录 | 仅必填项→确定 | 成功 | | ZCZX-MCGL-UI-009 | 新增 | 默认经营状态 | UI 测试 | Playwright+Chrome | 默认正常 | 已登录 | 打开新增弹窗 | 经营状态默认「正常」 | | ZCZX-MCGL-UI-010 | 新增 | 个体与企业证件 | UI 测试 | Playwright+Chrome | §2.3 | 已登录 | 分别选个体/企业并填对应证件→保存 | 均成功;错误证号有区分提示 | | ZCZX-MCGL-UI-011 | 新增 | 名称空或超长 | UI 测试 | Playwright+Chrome | 1~10 | 已登录 | 名称留空或 11 字→确定 | 校验失败 | | ZCZX-MCGL-UI-012 | 新增 | 区划未选至县 | UI 测试 | Playwright+Chrome | 三级 | 已登录 | 仅选省/市→确定 | 提示须选至县级 | | ZCZX-MCGL-UI-013 | 新增 | 手机号非法 | UI 测试 | Playwright+Chrome | 校验 | 已登录 | 填 10 位手机→确定 | 校验失败 | | ZCZX-MCGL-UI-014 | 新增 | 照片格式非法 | UI 测试 | Playwright+Chrome | §5.1 | 准备 .bmp | `setInputFiles` 上传→确定 | 拒绝或明确错误 | | ZCZX-MCGL-UI-015 | 新增 | 性质切换证件 | UI 测试 | Playwright+Chrome | 联动 | 新增弹窗 | 先选个体填身份证→改企业→确定 | 提示重新填写/校验主体号 | | ZCZX-MCGL-UI-016 | 详情 | 字段完整 | UI 测试 | Playwright+Chrome | §5.5 | 任意记录 | 点「查看」 | 名称、性质、证件、区划、地址、负责人、手机、状态、照片齐全 | | ZCZX-MCGL-UI-017 | 修改 | 编辑成功 | UI 测试 | Playwright+Chrome | §5.3 | 有记录 | 编辑→改牧场名称→确定 | 列表/详情已更新 | | ZCZX-MCGL-UI-018 | 修改 | 经营状态变更 | UI 测试 | Playwright+Chrome | 状态互改 | 正常记录 | 改为「注销」→保存 | 列表显示注销 | | ZCZX-MCGL-UI-019 | 修改 | 替换照片 | UI 测试 | Playwright+Chrome | §5.3 | 有照片 | 编辑→换 png→保存 | 详情为新图 | | ZCZX-MCGL-UI-020 | 删除 | 确认删除 | UI 测试 | Playwright+Chrome | §5.4 | 有记录 | 删除→确认 | 列表无该行 | | ZCZX-MCGL-UI-021 | 删除 | 取消删除 | UI 测试 | Playwright+Chrome | 确认框 | 有记录 | 删除→取消 | 记录仍在 | | ZCZX-MCGL-UI-022 | 删除 | 批量删除 | UI 测试 | Playwright+Chrome | 批量 | 勾选多条 | 批量删除→确认 | 选中行均消失 | | ZCZX-MCGL-UI-023 | 端到端 | CRUD 串联 | UI 集成 | Playwright+Chrome | §4 | 可新增 | 新增→搜索→查看→编辑→删除 | 全流程无报错 | | ZCZX-MCGL-UI-024 | 权限 | 只读账号 | UI 测试 | Playwright+Chrome | §6 | 无 add/edit/remove | 登录进模块 | 无新增/编辑/删除或操作拒绝 | | ZCZX-MCGL-UI-025 | 导出 | 导出(可选) | UI 测试 | Playwright+Chrome | 技术方案 | 有 export 权限 | 点「导出」 | 下载 Excel 或成功提示 | --- ## Playwright 与谷歌浏览器(实施提示) - 安装:`npm i -D @playwright/test`;`npx playwright install chromium`;本机 Chrome:`npx playwright install chrome`。 - `playwright.config.ts` 示例:`use: { channel: 'chrome', headless: false, locale: 'zh-CN', baseURL: 'http://localhost:80' }`;`storageState` 复用登录态。 - 路由:`page.goto('/dataModel/pasture')`(以菜单 `component` 配置为准)。 - 区划:`page.locator('.el-cascader').click()` 后逐级选择省/市/县(按项目组件封装调整)。 - 上传:`page.locator('input[type=file]').setInputFiles('fixtures/pasture.jpg')`。 - 确认框:`page.getByRole('button', { name: /确定|确认/ })`。 --- ## 覆盖对照 | 类别 | 单元 UT | 接口 API | 界面 UI | | --- | --- | --- | --- | | 正常流程 | UT-012~016、020 | API-001~012、019、021、023~027 | UI-001~010、016~019、023 | | 异常流程 | UT-001~002、008 | API-013~018、020、029 | UI-011~014、021 | | 业务约束 | UT-003~011、013 | API-003~005、015~018、022 | UI-003~004、009~010、012~013、015、018 | | 逻辑删除/附件 | UT-017~019、020 | API-007、024~026 | UI-019~022 | | 地图(不做) | — | — | UI-006 | | 权限/导出 | — | API-028~029 | UI-024~025 | --- ## 功能需求追溯(自查) | 需求章节 | 要点 | 主要对应用例 | | --- | --- | --- | | §5.1 新增 | 字段、证件联动、照片选填 | UT-001~013;API-008~018;UI-007~015 | | §5.2 列表 | 关键字、性质/状态、逻辑删除不可见 | API-001~007;UI-001~006 | | §5.3 修改 | 全字段、换图、性质变更 | UT-015~016、019;API-021~024;UI-017~019 | | §5.4 删除 | 逻辑删除、确认 | UT-017~018;API-025~026;UI-020~022 | | §5.5 详情 | 全字段 | API-019;UI-016 | | §5.6 地图 | 本期不做 | UI-006 | | §6~§7 | 权限、错误提示 | API-028~030;UI-024 | --- ## 修订记录 | 版本 | 说明 | | --- | --- | | 1.0 | 初版:单元 20、接口 30、UI 25;对齐功能/技术方案;Playwright+Chrome;编号前缀 ZCZX-MCGL |