# 草场管理 — 测试用例 > 依据:`草场管理功能需求.md`、`草场管理技术方案.md` > **接口 Base Path(示例)**:`/dataModel/grassland`;若含 `context-path` 或网关前缀须补齐。鉴权与若依一致(Cookie / Token)。 **通用前置(无特殊说明)**:具备本模块菜单与按钮权限的账号已登录。**退化等级**:`1` 未退化、`2` 轻度、`3` 中度、`4` 重度、`5` 极重度。**利用类型**:`1` 禁牧、`2` 轮牧、`3` 全年放牧。**合法样本(示例)**:名称「示范草场」、面积 `100.5`、亩产草量 `350`、利用率 `0.65`、禁牧 `2025-01-01`~`2025-03-31`、轮牧小区 `4`、放牧天数 `7`、轮牧周期 `28`、备注可空。 **界面(UI)测试**:**Playwright** + **Chromium**(`channel: 'chrome'` 使用本机 **Google Chrome**)。 --- ## 一、单元测试用例 | 用例编号 | 测试模块 | 测试项 | 测试类型 | 测试工具 | 测试目的 | 前置条件 | 测试步骤 | 预期结果 | | --- | --- | --- | --- | --- | --- | --- | --- | --- | | ZCZX-CCGL-UT-001 | 参数校验 | 草场名称长度 | 单元测试 | JUnit5 | 1~10 字 | 无 | 空串、1 字、10 字、11 字 | 空/11 失败;1~10 通过 | | ZCZX-CCGL-UT-002 | 参数校验 | 备注字数 | 单元测试 | JUnit5 | 选填≤100 | 无 | null/空通过;101 字失败 | 符合功能需求 §5.1 | | ZCZX-CCGL-UT-003 | 参数校验 | 退化等级枚举 | 单元测试 | JUnit5 | 仅 1~5 | 无 | 值为 1/5 通过;0、6、null 失败 | 与技术方案 §2.2 一致 | | ZCZX-CCGL-UT-004 | 参数校验 | 利用类型枚举 | 单元测试 | JUnit5 | 仅 1~3 | 无 | 值为 1/3 通过;0、4、null 失败 | 与技术方案 §2.2 一致 | | ZCZX-CCGL-UT-005 | 参数校验 | 面积/亩产草量 | 单元测试 | JUnit5 | 正数 | 无 | 面积 0、负数;亩产草量 0 | 均失败;合法正数通过 | | ZCZX-CCGL-UT-006 | 参数校验 | 利用率区间 | 单元测试 | JUnit5 | 0~1 闭区间 | 无 | `-0.1`、`1.1`、`0`、`1` | 越界失败;0 与 1 通过 | | ZCZX-CCGL-UT-007 | 参数校验 | 禁牧日期区间 | 单元测试 | JUnit5 | 起止成对 | 无 | 开始晚于结束;仅一端;合法区间 | 颠倒/缺一端失败;`start≤end` 通过 | | ZCZX-CCGL-UT-008 | 参数校验 | 轮牧三项整数 | 单元测试 | JUnit5 | ≥1 整数 | 无 | 小区数/放牧天数/周期为 0、小数、负数 | 失败;正整数通过 | | ZCZX-CCGL-UT-009 | 参数校验 | 全量保存校验 | 单元测试 | JUnit5 | `validateRowForSave` | 合法 `BizGrassland` | 调用校验后写库字段 | 各字段 trim/枚举/数值符合 §3.5 | | ZCZX-CCGL-UT-010 | Service | 新增落库 | 单元测试 | JUnit5+Mockito | 正常登记 | 合法实体 | `insert(grassland)` | `del_flag='0'`;数值与入参一致 | | ZCZX-CCGL-UT-011 | Service | 修改全字段 | 单元测试 | JUnit5+Mockito | §5.3 | Mock 已存在 id | `update` 改名称、面积、退化等级、日期、轮牧参数 | 更新成功;Mapper `update` 被调用 | | ZCZX-CCGL-UT-012 | Service | 利用类型互改 | 单元测试 | JUnit5+Mockito | 1↔2↔3 | 原 `utilization_type=1` | `update` 改为 `2` 或 `3` 且指标仍合法 | 成功(本期不因类型豁免字段) | | ZCZX-CCGL-UT-013 | Service | 修改不存在 | 单元测试 | JUnit5+Mockito | 异常 | `selectById` 返回 null | `update` | 抛 `ServiceException`;不调用 `update` | | ZCZX-CCGL-UT-014 | Service | 逻辑删除 | 单元测试 | JUnit5+Mockito | §5.4 | Mock Mapper | `remove([id], updateBy)` | 调用 `logicDelete`;`del_flag='2'`;非物理 DELETE | | ZCZX-CCGL-UT-015 | Service | 删除空 id 数组 | 单元测试 | JUnit5+Mockito | 边界 | 无 | `remove([])` 或全 null | 返回 0;不调用 Mapper 删除 | | ZCZX-CCGL-UT-016 | Mapper | 列表排序与删除过滤 | 单元测试 | JUnit5 | 技术方案 §3.4 | 无 | 检查 `BizGrasslandMapper.xml` | 含 `create_time desc`、`id desc`;列表/详情/更新带 `del_flag='0'` | --- ## 二、接口测试用例 | 用例编号 | 测试模块 | 测试项 | 测试类型 | 测试工具 | 测试目的 | 前置条件 | 测试步骤 | 预期结果 | | --- | --- | --- | --- | --- | --- | --- | --- | --- | | ZCZX-CCGL-API-001 | 列表 | 默认分页排序 | 接口测试 | Postman/curl | §5.2 | 已登录;有多条记录 | `GET /dataModel/grassland/list` | `code=200`;`rows`≤20;`createTime` 新在前 | | ZCZX-CCGL-API-002 | 列表 | 关键字-名称 | 接口测试 | Postman | 名称模糊 | 已登录 | `keyword=` 唯一名称片段 | 命中含该片段记录 | | ZCZX-CCGL-API-003 | 列表 | 利用类型筛选 | 接口测试 | Postman | 精确 | 有禁牧/轮牧样本 | `utilizationType=1` 或 `2` | 返回记录利用类型与条件一致 | | ZCZX-CCGL-API-004 | 列表 | 退化等级筛选 | 接口测试 | Postman | 可选筛选项 | 有多档退化样本 | `degradationLevel=3` | 均为中度(与入参一致) | | ZCZX-CCGL-API-005 | 列表 | 组合查询 | 接口测试 | Postman | 多条件 | 已登录 | `keyword`+`utilizationType`(+`degradationLevel`) | 同时满足 | | ZCZX-CCGL-API-006 | 列表 | 不含已删除 | 接口测试 | Postman | 逻辑删除 | 已知 id 已删 | `GET list` | 列表无该 id | | ZCZX-CCGL-API-007 | 列表 | 分页参数 | 接口测试 | Postman | 分页 | 已登录 | `pageNum=2&pageSize=10` | 返回第 2 页;条数≤10 | | ZCZX-CCGL-API-008 | 新增 | 合法全字段 | 接口测试 | Postman | §5.1 | 已登录 | `POST` Body 含备注等全部合法字段 | `code` 成功;`GET` 详情字段一致 | | ZCZX-CCGL-API-009 | 新增 | 最小必填无备注 | 接口测试 | Postman | 备注选填 | 已登录 | `POST` 不传 `remark` | 成功;详情备注为空 | | ZCZX-CCGL-API-010 | 新增 | 利用类型-禁牧 | 接口测试 | Postman | §2.2 | 已登录 | `utilizationType=1`+合法指标 | 成功 | | ZCZX-CCGL-API-011 | 新增 | 利用类型-轮牧 | 接口测试 | Postman | §2.2 | 已登录 | `utilizationType=2`+合法轮牧参数 | 成功 | | ZCZX-CCGL-API-012 | 新增 | 利用类型-全年放牧 | 接口测试 | Postman | §2.2 | 已登录 | `utilizationType=3` | 成功 | | ZCZX-CCGL-API-013 | 新增 | 名称非法 | 接口测试 | Postman | 1~10 | 已登录 | 名称空或 11 字 | 失败;列表无新记录 | | ZCZX-CCGL-API-014 | 新增 | 枚举非法 | 接口测试 | Postman | 枚举 | 已登录 | `degradationLevel=0` 或 `utilizationType=9` | 失败;`msg` 可区分 | | ZCZX-CCGL-API-015 | 新增 | 面积/亩产草量非法 | 接口测试 | Postman | 正数 | 已登录 | `areaMu=0` 或 `grassYieldPerMu=-1` | 失败 | | ZCZX-CCGL-API-016 | 新增 | 利用率越界 | 接口测试 | Postman | 0~1 | 已登录 | `utilizationRate=1.5` 或 `-0.01` | 失败 | | ZCZX-CCGL-API-017 | 新增 | 禁牧日期颠倒 | 接口测试 | Postman | 日期约束 | 已登录 | `grazingBanStartDate`>`grazingBanEndDate` | 失败 | | ZCZX-CCGL-API-018 | 新增 | 轮牧参数非法 | 接口测试 | Postman | 正整数 | 已登录 | `rotationPlotCount=0` | 失败 | | ZCZX-CCGL-API-019 | 新增 | 备注超长 | 接口测试 | Postman | ≤100 | 已登录 | `remark` 101 字 | 失败 | | ZCZX-CCGL-API-020 | 详情 | 有效 id | 接口测试 | Postman | §5.5 | 已登录 | `GET /dataModel/grassland/{id}` | 含名称、面积、退化/利用类型、指标、禁牧日期、轮牧参数、审计字段 | | ZCZX-CCGL-API-021 | 详情 | 无效/已删 id | 接口测试 | Postman | 异常 | 已登录 | 不存在或已逻辑删除的 id | `data` 为空或业务失败(与实现一致) | | ZCZX-CCGL-API-022 | 修改 | 合法修改 | 接口测试 | Postman | §5.3 | 有记录 | `PUT` 改名称、面积、负责人相关指标 | 成功;详情已更新 | | ZCZX-CCGL-API-023 | 修改 | 利用类型变更 | 接口测试 | Postman | §5.3 | 禁牧记录 | `PUT` `utilizationType` 改为 `2` 且指标合法 | 成功 | | ZCZX-CCGL-API-024 | 修改 | 禁牧日期变更 | 接口测试 | Postman | 日期 | 有记录 | `PUT` 调整起止日期且 `start≤end` | 成功 | | ZCZX-CCGL-API-025 | 修改 | 校验失败 | 接口测试 | Postman | 全量校验 | 有记录 | `PUT` 利用率 `2` | 失败;库内数据不变 | | ZCZX-CCGL-API-026 | 删除 | 单条逻辑删除 | 接口测试 | Postman | §5.4 | 已登录 | `DELETE /dataModel/grassland/{id}` | 成功;列表/详情不可见 | | ZCZX-CCGL-API-027 | 删除 | 批量删除 | 接口测试 | Postman | 批量 | 已登录 | `DELETE id1,id2` | 成功;两条均不可查 | | ZCZX-CCGL-API-028 | 端到端 | CRUD 串联 | 接口测试 | Postman | §4 流程 | 已登录 | `POST`→`GET list`→`GET/{id}`→`PUT`→`DELETE` | 每步 `code` 成功 | | ZCZX-CCGL-API-029 | 鉴权 | 未登录 | 接口测试 | curl | 安全 | 无 Token | `GET .../grassland/list` | 401 或统一未登录响应 | | ZCZX-CCGL-API-030 | 权限 | 无写权限 | 接口测试 | Postman | 越权 | 仅 `list` 权限账号 | `POST /dataModel/grassland` | 无权限失败(403 或业务码) | | ZCZX-CCGL-API-031 | 响应 | 失败可读 | 接口测试 | Postman | §7 | 已登录 | 分别触发名称空、日期颠倒、利用率越界 | Body 含 `code`、`msg` 且可区分 | --- ## 三、界面测试用例(UI) **测试工具**:**Playwright** + **Chromium**(`channel: 'chrome'` 使用本机 **Google Chrome**)。 | 用例编号 | 测试模块 | 测试项 | 测试类型 | 测试工具 | 测试目的 | 前置条件 | 测试步骤 | 预期结果 | | --- | --- | --- | --- | --- | --- | --- | --- | --- | | ZCZX-CCGL-UI-001 | 列表 | 默认分页排序 | UI 测试 | Playwright+Chrome | §5.2 | 已登录;数据>20 | 进入「草场管理」菜单 | 默认每页 20;创建时间新在前 | | ZCZX-CCGL-UI-002 | 列表 | 关键字查询 | UI 测试 | Playwright+Chrome | 名称模糊 | 有含关键词记录 | 输入草场名称→搜索 | 表格含该行 | | ZCZX-CCGL-UI-003 | 列表 | 利用类型筛选 | UI 测试 | Playwright+Chrome | 精确 | 多类型均有 | 选「轮牧」→搜索 | 利用类型列均为轮牧 | | ZCZX-CCGL-UI-004 | 列表 | 退化等级筛选 | UI 测试 | Playwright+Chrome | 可选 | 界面有该筛选项 | 选「重度」→搜索 | 退化等级列均为重度 | | ZCZX-CCGL-UI-005 | 列表 | 组合与重置 | UI 测试 | Playwright+Chrome | 恢复条件 | 已多条件筛选 | 搜索→点「重置」 | 条件清空;恢复默认列表 | | ZCZX-CCGL-UI-006 | 列表 | 操作列与地图 | UI 测试 | Playwright+Chrome | §5.6 不做 | 有数据行 | 查看操作列 | 有查看/编辑/删除;**无**地图标点或置灰「暂未开放」 | | ZCZX-CCGL-UI-007 | 新增 | 合法全字段 | UI 测试 | Playwright+Chrome | §5.1 | 已登录 | 新增→填全部必填+备注→确定 | 成功提示;列表出现新记录 | | ZCZX-CCGL-UI-008 | 新增 | 最小必填无备注 | UI 测试 | Playwright+Chrome | 备注选填 | 已登录 | 仅必填项→确定 | 成功 | | ZCZX-CCGL-UI-009 | 新增 | 三种利用类型 | UI 测试 | Playwright+Chrome | §2.2 | 已登录 | 分别新增禁牧/轮牧/全年放牧各一条 | 均成功;列表类型正确 | | ZCZX-CCGL-UI-010 | 新增 | 名称空或超长 | UI 测试 | Playwright+Chrome | 1~10 | 已登录 | 名称留空或超 10 字→确定 | 字段校验失败,不提交 | | ZCZX-CCGL-UI-011 | 新增 | 数值非法 | UI 测试 | Playwright+Chrome | 正数/区间 | 已登录 | 面积填 0 或利用率填 1.2→确定 | 校验失败并提示 | | ZCZX-CCGL-UI-012 | 新增 | 禁牧日期非法 | UI 测试 | Playwright+Chrome | 日期约束 | 已登录 | 结束日期早于开始日期→确定 | 校验失败 | | ZCZX-CCGL-UI-013 | 新增 | 枚举未选 | UI 测试 | Playwright+Chrome | 必选 | 已登录 | 退化等级或利用类型不选→确定 | 校验失败 | | ZCZX-CCGL-UI-014 | 新增 | 轮牧参数非法 | UI 测试 | Playwright+Chrome | 正整数 | 已登录 | 轮牧小区数量填 0→确定 | 校验失败 | | ZCZX-CCGL-UI-015 | 详情 | 字段完整 | UI 测试 | Playwright+Chrome | §5.5 | 任意记录 | 点「查看」 | 名称、面积、退化/利用类型、产草指标、禁牧日期、轮牧参数、备注齐全 | | ZCZX-CCGL-UI-016 | 修改 | 编辑成功 | UI 测试 | Playwright+Chrome | §5.3 | 有记录 | 编辑→改草场名称与面积→确定 | 列表/详情已更新 | | ZCZX-CCGL-UI-017 | 修改 | 利用类型与退化变更 | UI 测试 | Playwright+Chrome | 互改 | 有记录 | 改利用类型为「全年放牧」、退化等级为「轻度」→保存 | 列表展示已更新 | | ZCZX-CCGL-UI-018 | 修改 | 禁牧日期变更 | UI 测试 | Playwright+Chrome | 日期 | 有记录 | 修改禁牧起止日期→保存 | 详情日期为新值 | | ZCZX-CCGL-UI-019 | 删除 | 确认删除 | UI 测试 | Playwright+Chrome | §5.4 | 有记录 | 删除→确认 | 列表无该行 | | ZCZX-CCGL-UI-020 | 删除 | 取消删除 | UI 测试 | Playwright+Chrome | 确认框 | 有记录 | 删除→取消 | 记录仍在 | | ZCZX-CCGL-UI-021 | 删除 | 批量删除 | UI 测试 | Playwright+Chrome | 批量 | 勾选多条 | 批量删除→确认 | 选中行均消失 | | ZCZX-CCGL-UI-022 | 端到端 | CRUD 串联 | UI 集成 | Playwright+Chrome | §4 | 可新增 | 新增→搜索→查看→编辑→删除 | 全流程无报错 | | ZCZX-CCGL-UI-023 | 权限 | 只读账号 | UI 测试 | Playwright+Chrome | §6 | 无 add/edit/remove | 登录进模块 | 无新增/编辑/删除或点击拒绝 | | ZCZX-CCGL-UI-024 | 导出 | 导出(可选) | UI 测试 | Playwright+Chrome | 技术方案 §4 | 有 `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/grassland')`(以菜单 `component` 配置为准)。 - 日期:禁牧起止使用日期范围组件,`page.getByPlaceholder(/开始|结束/)` 或项目封装的选择器填写 `YYYY-MM-DD`。 - 下拉:`page.locator('.el-select').filter({ hasText: '退化等级' })` 等选择枚举项。 - 确认框:`page.getByRole('button', { name: /确定|确认/ })`。 --- ## 覆盖对照 | 类别 | 单元 UT | 接口 API | 界面 UI | | --- | --- | --- | --- | | 正常流程 | UT-009~012、016 | API-001~012、020、022~024、028 | UI-001~009、015~018、022 | | 异常流程 | UT-001~008、013、015 | API-013~019、021、025、029~031 | UI-010~014、020 | | 业务约束 | UT-003~008 | API-003~005、014~018 | UI-003~004、009、011~014、017~018 | | 逻辑删除 | UT-014~015、016 | API-006、026~027 | UI-019~021 | | 地图(不做) | — | — | UI-006 | | 权限/导出 | — | API-029~030 | UI-023~024 | --- ## 功能需求追溯(自查) | 需求章节 | 要点 | 主要对应用例 | | --- | --- | --- | | §5.1 新增 | 字段、数值、日期、轮牧参数、备注 | UT-001~009;API-008~019;UI-007~014 | | §5.2 列表 | 关键字、利用类型、逻辑删除不可见 | API-001~007;UI-001~006 | | §5.3 修改 | 全字段、类型/日期变更 | UT-011~012;API-022~025;UI-016~018 | | §5.4 删除 | 逻辑删除、确认 | UT-014~015;API-026~027;UI-019~021 | | §5.5 详情 | 全字段 | API-020;UI-015 | | §5.6 地图 | 本期不做 | UI-006 | | §6~§7 | 权限、错误提示 | API-029~031;UI-023 | --- ## 修订记录 | 版本 | 说明 | | --- | --- | | 1.0 | 初版:单元 16、接口 31、UI 24;对齐功能/技术方案;Playwright+Chrome;编号前缀 **ZCZX-CCGL** |