# 草场使用记录 — 测试用例 > 依据:`草场使用记录功能需求.md`、`草场使用记录技术方案.md` > **接口 Base Path(示例)**:`/dataModel/grasslandUsage`;若含 `context-path` 或网关前缀须补齐。鉴权与若依一致(Cookie / Token)。 **通用前置(无特殊说明)**:具备本模块菜单与按钮权限的账号已登录;库中已有有效**草场**(`biz_grassland`,`del_flag=0`,如总面积 `100` 亩)与**养殖主体**(`biz_pasture`,`del_flag=0`)。**放牧方式**:`1` 轮牧、`2` 自由放牧、`3` 季节性放牧。 **合法 Body 示例**:`grasslandId`/`pastureId` 为有效主键;`usageAreaMu=50`;`useStartDate=2025-06-01`、`useEndDate=2025-06-03` → 服务端 `actualUseDays=3`;`grazingHeadCount=100`;`grazingMethod=1`。 **界面(UI)测试**:**Playwright** + **Chromium**(`channel: 'chrome'` 使用本机 **Google Chrome**)。 --- ## 一、单元测试用例 | 用例编号 | 测试模块 | 测试项 | 测试类型 | 测试工具 | 测试目的 | 前置条件 | 测试步骤 | 预期结果 | | --- | --- | --- | --- | --- | --- | --- | --- | --- | | ZCZX-CCSYJL-UT-001 | 参数校验 | 使用面积 | 单元测试 | JUnit5 | >0 且 ≤草场总面积 | 草场 `area_mu=100` | `usageAreaMu` 为 50、0、101、null | 50 通过;0/101/null 失败 | | ZCZX-CCSYJL-UT-002 | 参数校验 | 使用日期区间 | 单元测试 | JUnit5 | §2.5 | 无 | 开始晚于结束;缺一端;同日合法 | 颠倒/缺一端失败;`06-01`~`06-01` 通过 | | ZCZX-CCSYJL-UT-003 | 天数计算 | 实际使用天数 | 单元测试 | JUnit5 | 含起止日 | 无 | `resolveActualUseDays(06-01,06-01)`→1;(06-01,06-03)→3 | 与技术方案 §3.4 一致 | | ZCZX-CCSYJL-UT-004 | 参数校验 | 放牧数量 | 单元测试 | JUnit5 | ≥1 整数 | 无 | 0、负数、1、100 | 0/负失败;正整数通过 | | ZCZX-CCSYJL-UT-005 | 参数校验 | 放牧方式枚举 | 单元测试 | JUnit5 | 1~3 | 无 | 值为 1/3 通过;0、4、null 失败 | 与技术方案 §2.2 一致 | | ZCZX-CCSYJL-UT-006 | 参数校验 | 主数据 id | 单元测试 | JUnit5 | 非空 | 无 | `grasslandId`/`pastureId` 为 null | 失败 | | ZCZX-CCSYJL-UT-007 | 列表查询 | 创建日期区间 | 单元测试 | JUnit5 | 预约日期筛选 | 无 | `validateDateRangeForList`:`12-01`>`06-01`;单端;合法区间 | 颠倒失败;合法通过 | | ZCZX-CCSYJL-UT-008 | 参数校验 | 全量保存(Mock 主数据) | 单元测试 | JUnit5 | `validateRowForSave` | Mock 草场/主体有效 | 合法 `BizGrasslandUsageRecord` | 通过;`actualUseDays` 已写入 | | ZCZX-CCSYJL-UT-009 | 参数校验 | 主数据已删除 | 单元测试 | JUnit5 | §5.1 | Mock 草场 `del_flag=2` | `validateRowForSave` | 失败;提示主数据失效类 | | ZCZX-CCSYJL-UT-010 | Service | 新增落库 | 单元测试 | JUnit5+Mockito | 正常登记 | Mock 主数据+Mapper | `insert(record)` | `del_flag=0`;`actual_use_days` 为计算值 | | ZCZX-CCSYJL-UT-011 | Service | 忽略客户端天数 | 单元测试 | JUnit5+Mockito | §3.3.1 | 入参 `actualUseDays=99` | `insert` 日期 06-01~06-03 | 落库 `actual_use_days=3` 非 99 | | ZCZX-CCSYJL-UT-012 | Service | 修改全字段 | 单元测试 | JUnit5+Mockito | §5.3 | 已存在 id | `update` 换草场/主体/面积/日期/放牧信息 | 成功;重算天数 | | ZCZX-CCSYJL-UT-013 | Service | 修改不存在 | 单元测试 | JUnit5+Mockito | 异常 | `selectById` null | `update` | 抛 `ServiceException` | | ZCZX-CCSYJL-UT-014 | Service | 逻辑删除 | 单元测试 | JUnit5+Mockito | §5.4 | Mock Mapper | `remove([id], updateBy)` | `logicDelete`;`del_flag=2` | | ZCZX-CCSYJL-UT-015 | Service | 列表日期非法 | 单元测试 | JUnit5+Mockito | §3.1.1 | 无 | `selectList` 且 `startDate>endDate` | 抛异常;不调 Mapper | | ZCZX-CCSYJL-UT-016 | Mapper | JOIN 与删除过滤 | 单元测试 | JUnit5 | 技术方案 §3.5 | 无 | 检查 `BizGrasslandUsageRecordMapper.xml` | 含 `biz_grassland`/`biz_pasture` JOIN;`del_flag='0'`;`create_time desc` | --- ## 二、接口测试用例 | 用例编号 | 测试模块 | 测试项 | 测试类型 | 测试工具 | 测试目的 | 前置条件 | 测试步骤 | 预期结果 | | --- | --- | --- | --- | --- | --- | --- | --- | --- | | ZCZX-CCSYJL-API-001 | 列表 | 默认分页排序 | 接口测试 | Postman/curl | §5.2 | 已登录;有多条 | `GET /dataModel/grasslandUsage/list` | `rows`≤20;`createTime` 新在前;含 `grasslandName` | | ZCZX-CCSYJL-API-002 | 列表 | 关键字-草场名称 | 接口测试 | Postman | 名称模糊 | 已登录 | `keyword=` 草场名称片段 | 命中关联草场名含片段的记录 | | ZCZX-CCSYJL-API-003 | 列表 | 预约日期-创建日区间 | 接口测试 | Postman | 创建日期 | 有已知 `create_time` 记录 | `startDate`+`endDate` 闭区间 | 均在区间内 | | ZCZX-CCSYJL-API-004 | 列表 | 组合查询 | 接口测试 | Postman | 多条件 | 已登录 | `keyword`+`startDate`+`endDate` | 同时满足 | | ZCZX-CCSYJL-API-005 | 列表 | 创建日期区间非法 | 接口测试 | Postman | 校验 | 已登录 | `startDate=2025-12-01&endDate=2025-01-01` | 失败;`msg` 可区分 | | ZCZX-CCSYJL-API-006 | 列表 | 不含已删除 | 接口测试 | Postman | 逻辑删除 | 已知 id 已删 | `GET list` | 列表无该 id | | ZCZX-CCSYJL-API-007 | 新增 | 合法全字段 | 接口测试 | Postman | §5.1 | 有效草场/主体 id | `POST` Body 合法 | 成功;详情 `actualUseDays` 正确 | | ZCZX-CCSYJL-API-008 | 新增 | 同日使用 | 接口测试 | Postman | §2.5 | 已登录 | `useStartDate=useEndDate=2025-06-01` | 成功;`actualUseDays=1` | | ZCZX-CCSYJL-API-009 | 新增 | 三种放牧方式 | 接口测试 | Postman | §2.2 | 已登录 | 分别 `grazingMethod` 1/2/3 各 POST 一条 | 均成功 | | ZCZX-CCSYJL-API-010 | 新增 | 忽略客户端天数 | 接口测试 | Postman | §3.3.1 | 已登录 | Body 传 `actualUseDays=999` 且日期 3 天跨度 | 成功;详情天数为 3 非 999 | | ZCZX-CCSYJL-API-011 | 新增 | 使用面积超限 | 接口测试 | Postman | ≤草场总面积 | 草场 100 亩 | `usageAreaMu=101` | 失败 | | ZCZX-CCSYJL-API-012 | 新增 | 使用日期颠倒 | 接口测试 | Postman | 日期 | 已登录 | `useStartDate`>`useEndDate` | 失败 | | ZCZX-CCSYJL-API-013 | 新增 | 主数据无效 | 接口测试 | Postman | 关联 | 草场或主体 id 不存在/已删 | `POST` | 失败 | | ZCZX-CCSYJL-API-014 | 新增 | 放牧数量非法 | 接口测试 | Postman | ≥1 | 已登录 | `grazingHeadCount=0` | 失败 | | ZCZX-CCSYJL-API-015 | 新增 | 放牧方式非法 | 接口测试 | Postman | 1~3 | 已登录 | `grazingMethod=9` | 失败 | | ZCZX-CCSYJL-API-016 | 新增 | 缺必填关联 id | 接口测试 | Postman | 必填 | 已登录 | 缺 `grasslandId` 或 `pastureId` | 失败 | | ZCZX-CCSYJL-API-017 | 详情 | 有效 id | 接口测试 | Postman | §5.5 | 已登录 | `GET /dataModel/grasslandUsage/{id}` | 含名称、面积、主体、日期、天数、放牧信息、审计字段 | | ZCZX-CCSYJL-API-018 | 详情 | 无效/已删 id | 接口测试 | Postman | 异常 | 已登录 | 不存在或已删 id | `data` 空或业务失败 | | ZCZX-CCSYJL-API-019 | 修改 | 合法修改 | 接口测试 | Postman | §5.3 | 有记录 | `PUT` 改面积、日期、放牧数量 | 成功;天数随日期更新 | | ZCZX-CCSYJL-API-020 | 修改 | 更换草场重校面积 | 接口测试 | Postman | §5.3 | 原草场 100 亩 | `PUT` 换 50 亩草场且 `usageAreaMu=60` | 失败 | | ZCZX-CCSYJL-API-021 | 修改 | 校验失败 | 接口测试 | Postman | 全量校验 | 有记录 | `PUT` `grazingHeadCount=0` | 失败;库不变 | | ZCZX-CCSYJL-API-022 | 删除 | 单条逻辑删除 | 接口测试 | Postman | §5.4 | 已登录 | `DELETE /dataModel/grasslandUsage/{id}` | 成功;列表不可见 | | ZCZX-CCSYJL-API-023 | 删除 | 批量删除 | 接口测试 | Postman | 批量 | 已登录 | `DELETE id1,id2` | 均不可查 | | ZCZX-CCSYJL-API-024 | 端到端 | CRUD 串联 | 接口测试 | Postman | §4 | 主数据齐备 | `POST`→`list`→`GET/{id}`→`PUT`→`DELETE` | 每步成功 | | ZCZX-CCSYJL-API-025 | 主数据 | 草场下拉复用 | 接口测试 | Postman | §3 主数据 | 已登录 | `GET /dataModel/grassland/list?keyword=` | 返回有效草场供选择 | | ZCZX-CCSYJL-API-026 | 主数据 | 主体下拉复用 | 接口测试 | Postman | §3 主数据 | 已登录 | `GET /dataModel/pasture/list?keyword=` | 返回有效主体供选择 | | ZCZX-CCSYJL-API-027 | 鉴权 | 未登录 | 接口测试 | curl | 安全 | 无 Token | `GET .../grasslandUsage/list` | 401 或统一未登录 | | ZCZX-CCSYJL-API-028 | 权限 | 无写权限 | 接口测试 | Postman | 越权 | 仅 list 权限 | `POST .../grasslandUsage` | 无权限失败 | | ZCZX-CCSYJL-API-029 | 响应 | 失败可读 | 接口测试 | Postman | §7 | 已登录 | 触发面积超限、日期颠倒、主数据无效 | `code`、`msg` 可区分 | --- ## 三、界面测试用例(UI) **测试工具**:**Playwright** + **Chromium**(`channel: 'chrome'` 使用本机 **Google Chrome**)。 | 用例编号 | 测试模块 | 测试项 | 测试类型 | 测试工具 | 测试目的 | 前置条件 | 测试步骤 | 预期结果 | | --- | --- | --- | --- | --- | --- | --- | --- | --- | | ZCZX-CCSYJL-UI-001 | 列表 | 默认分页排序 | UI 测试 | Playwright+Chrome | §5.2 | 已登录;数据>20 | 进入「草场使用记录」菜单 | 默认每页 20;创建时间新在前 | | ZCZX-CCSYJL-UI-002 | 列表 | 关键字-草场名称 | UI 测试 | Playwright+Chrome | 名称模糊 | 有样本 | 输入草场名称→搜索 | 表格含匹配行 | | ZCZX-CCSYJL-UI-003 | 列表 | 预约日期筛选 | UI 测试 | Playwright+Chrome | 创建日期 | 有样本 | 选预约日期起止→搜索 | 结果在区间内 | | ZCZX-CCSYJL-UI-004 | 列表 | 组合与重置 | UI 测试 | Playwright+Chrome | 恢复条件 | 已筛选 | 搜索→「重置」 | 条件清空;默认列表 | | ZCZX-CCSYJL-UI-005 | 列表 | 展示列完整 | UI 测试 | Playwright+Chrome | §5.2 | 有数据 | 查看表头与首行 | 含草场名、面积、主体、起止日、天数、数量、方式、操作 | | ZCZX-CCSYJL-UI-006 | 新增 | 合法登记 | UI 测试 | Playwright+Chrome | §5.1 | 主数据存在 | 新增→下拉选草场/主体→填面积与日期等→确定 | 成功;列表新行 | | ZCZX-CCSYJL-UI-007 | 新增 | 下拉模糊搜索 | UI 测试 | Playwright+Chrome | §2.1 | 已登录 | 草场/主体下拉输入关键字 | 选项列表过滤正确 | | ZCZX-CCSYJL-UI-008 | 新增 | 使用天数自动计算 | UI 测试 | Playwright+Chrome | §2.5 | 新增弹窗 | 改开始/结束日期 | 「实际使用天数」只读且随日期更新(如 3 天) | | ZCZX-CCSYJL-UI-009 | 新增 | 使用面积上限提示 | UI 测试 | Playwright+Chrome | ≤总面积 | 选 100 亩草场 | 使用面积填 101→确定 | 校验失败并提示不超过总面积 | | ZCZX-CCSYJL-UI-010 | 新增 | 日期颠倒 | UI 测试 | Playwright+Chrome | 日期约束 | 已登录 | 结束早于开始→确定 | 校验失败 | | ZCZX-CCSYJL-UI-011 | 新增 | 未选草场或主体 | UI 测试 | Playwright+Chrome | 必选 | 已登录 | 不选下拉直接确定 | 校验失败 | | ZCZX-CCSYJL-UI-012 | 新增 | 放牧数量/方式非法 | UI 测试 | Playwright+Chrome | 必填枚举 | 已登录 | 数量 0 或未选放牧方式→确定 | 校验失败 | | ZCZX-CCSYJL-UI-013 | 详情 | 字段完整 | UI 测试 | Playwright+Chrome | §5.5 | 任意记录 | 点「查看」 | 各业务字段与列表一致 | | ZCZX-CCSYJL-UI-014 | 修改 | 编辑成功 | UI 测试 | Playwright+Chrome | §5.3 | 有记录 | 编辑→改使用面积与放牧数量→保存 | 列表/详情已更新 | | ZCZX-CCSYJL-UI-015 | 修改 | 换草场重算面积校验 | UI 测试 | Playwright+Chrome | §5.3 | 有记录 | 换更小面积草场且使用面积仍过大→保存 | 校验失败 | | ZCZX-CCSYJL-UI-016 | 修改 | 改期重算天数 | UI 测试 | Playwright+Chrome | 天数联动 | 有记录 | 编辑延长结束日期→保存 | 详情 `actualUseDays` 增大 | | ZCZX-CCSYJL-UI-017 | 删除 | 确认删除 | UI 测试 | Playwright+Chrome | §5.4 | 有记录 | 删除→确认 | 列表无该行 | | ZCZX-CCSYJL-UI-018 | 删除 | 取消删除 | UI 测试 | Playwright+Chrome | 确认框 | 有记录 | 删除→取消 | 记录仍在 | | ZCZX-CCSYJL-UI-019 | 删除 | 批量删除 | UI 测试 | Playwright+Chrome | 批量 | 勾选多条 | 批量删除→确认 | 选中行消失 | | ZCZX-CCSYJL-UI-020 | 端到端 | CRUD 串联 | UI 集成 | Playwright+Chrome | §4 | 主数据齐备 | 新增→搜索→查看→编辑→删除 | 全流程无报错 | | ZCZX-CCSYJL-UI-021 | 权限 | 只读账号 | UI 测试 | Playwright+Chrome | §6 | 无 add/edit/remove | 进入模块 | 无新增/编辑/删除或拒绝 | | ZCZX-CCSYJL-UI-022 | 导出 | 导出(可选) | 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/grasslandUsage')`(以菜单 `component` 为准)。 - 下拉:`page.locator('.el-select').filter({ hasText: '草场名称' }).click()` 后 `page.getByText('示范草场')`;支持 `fill` 关键字过滤。 - 日期:预约日期、使用起止用日期组件或 `fill('YYYY-MM-DD')`。 - 只读天数:断言 `实际使用天数` 输入框 `disabled` 或文案随日期变化。 --- ## 覆盖对照 | 类别 | 单元 UT | 接口 API | 界面 UI | | --- | --- | --- | --- | | 正常流程 | UT-003、008、010~012、016 | API-001~004、007~010、017、019、024~026 | UI-001~008、013~016、020 | | 异常流程 | UT-001~002、006~007、009、013、015 | API-005、011~016、018、021、027~029 | UI-009~012、018 | | 业务约束 | UT-001、004~006、011 | API-010~015、020 | UI-008~012、015~016 | | 主数据关联 | UT-006、009 | API-013、025~026 | UI-007、011 | | 天数计算 | UT-003、011 | API-008、010 | UI-008、016 | | 逻辑删除 | UT-014、016 | API-006、022~023 | UI-017~019 | | 权限/导出 | — | API-027~028 | UI-021~022 | --- ## 功能需求追溯(自查) | 需求章节 | 要点 | 主要对应用例 | | --- | --- | --- | | §5.1 新增 | 主数据、面积上限、日期、放牧 | UT-001~011;API-007~016;UI-006~012 | | §2.5 天数 | 自动计算、忽略客户端 | UT-003、011;API-008、010;UI-008、016 | | §5.2 列表 | 草场名关键字、创建日区间 | API-001~006;UI-001~005 | | §5.3 修改 | 全字段、换草场校验 | UT-012;API-019~021;UI-014~016 | | §5.4 删除 | 逻辑删除 | UT-014;API-022~023;UI-017~019 | | §5.5 详情 | 全字段 | API-017;UI-013 | | §6~§7 | 权限、错误提示 | API-027~029;UI-021 | --- ## 修订记录 | 版本 | 说明 | | --- | --- | | 1.0 | 初版:单元 16、接口 29、UI 22;对齐功能/技术方案;Playwright+Chrome;编号前缀 **ZCZX-CCSYJL** |