# 补贴发放记录 — 测试用例 > 依据:`补贴发放记录功能需求.md`、`补贴发放记录技术方案.md` > **接口 Base Path(示例)**:`/policy/subsidyRecord`;若含 `context-path` 或网关前缀须补齐。鉴权与若依一致(Cookie / Token)。 **通用前置(无特殊说明)**:具备本模块菜单与按钮权限的账号已登录。**补贴类型**:`1` 农业生产、`2` 住房基建、`3` 民生保障。**测试数据**:合法 18 位身份证(含校验位)、11 位手机号、16~19 位数字银行账户、金额 > 0 且最多 2 位小数;发放日期默认 ≤ 当天。 **界面(UI)测试**:借助 **Playwright** 启动 **Chromium**(与 **Google Chrome 同源内核**);可配置 `channel: 'chrome'` 调用本机已安装的谷歌浏览器。 --- ## 一、单元测试用例 | 用例编号 | 测试模块 | 测试项 | 测试类型 | 测试工具 | 测试目的 | 前置条件 | 测试步骤 | 预期结果 | | --- | --- | --- | --- | --- | --- | --- | --- | --- | | ZCZX-BTJL-UT-001 | 参数校验 | 补贴项目名称长度 | 单元测试 | JUnit5 | 1~20 字 | 无 | 空串、1 字、20 字、21 字 | 空/21 失败;1~20 通过 | | ZCZX-BTJL-UT-002 | 参数校验 | 受补贴人姓名长度 | 单元测试 | JUnit5 | 1~10 字 | 无 | 空串、1 字、10 字、11 字 | 空/11 失败;1~10 通过 | | ZCZX-BTJL-UT-003 | 参数校验 | 补贴类型枚举 | 单元测试 | JUnit5 | 仅 1~3 | 无 | `subsidyType` 为 1/3 通过;0、4、null 失败 | 与技术方案 §2.2 一致 | | ZCZX-BTJL-UT-004 | 参数校验 | 身份证号 | 单元测试 | JUnit5 | 18 位+校验位 | 无 | 合法号、17 位、非法校验位、含非法字符 | 仅合法通过 | | ZCZX-BTJL-UT-005 | 参数校验 | 联系电话 | 单元测试 | JUnit5 | 大陆手机号 | 无 | 合法 11 位、10 位、非 1 开头 | 仅合法通过 | | ZCZX-BTJL-UT-006 | 参数校验 | 银行账户 | 单元测试 | JUnit5 | 16~19 位数字 | 无 | 15 位、16 位、19 位、20 位、含字母 | 16~19 数字通过;其余失败 | | ZCZX-BTJL-UT-007 | 参数校验 | 补贴金额 | 单元测试 | JUnit5 | >0,2 位小数 | 无 | 0、-1、0.01、999999.99、三位小数 | 0/负/三位小数失败;合法正数通过 | | ZCZX-BTJL-UT-008 | 参数校验 | 发放日期 | 单元测试 | JUnit5 | 非未来 | 无 | 明天、今天、昨天、非法格式 | 未来/非法失败;今天及过去通过 | | ZCZX-BTJL-UT-009 | 查询校验 | 日期区间 | 单元测试 | JUnit5 | §5.2 | 无 | `validateDateRange(start,end)`:start>end、仅 start、仅 end、相等 | 非法区间失败;合法通过 | | ZCZX-BTJL-UT-010 | Service | 新增落库 | 单元测试 | JUnit5+Mockito | 正常登记 | 合法实体 | `insert(record)` | 各字段与入参一致;有 `create_time` | | ZCZX-BTJL-UT-011 | Service | 修改全字段 | 单元测试 | JUnit5+Mockito | §5.3 | 已存在 id | `update(record)` 改金额/日期 | 更新成功;`update_time` 变化 | | ZCZX-BTJL-UT-012 | Service | 删除记录 | 单元测试 | JUnit5+Mockito | §5.4 | Mock Mapper | `deleteByIds([id])` | 调用删除;无文件清理逻辑 | | ZCZX-BTJL-UT-013 | Service | 列表排序 SQL | 单元测试 | JUnit5 | 技术方案 | 无 | 检查列表查询 ORDER BY | 含 `grant_date DESC`, `create_time DESC` | | ZCZX-BTJL-UT-014 | 脱敏 | 身份证脱敏 | 单元测试 | JUnit5 | §3.4 可选 | 明文 18 位 | `maskIdCard(s)` | 前 4+后 4 可见,中间 `*` | | ZCZX-BTJL-UT-015 | 脱敏 | 手机号脱敏 | 单元测试 | JUnit5 | §3.4 可选 | 11 位手机号 | `maskPhone(s)` | 前 3+后 4,中间 `****` | | ZCZX-BTJL-UT-016 | 脱敏 | 无特权详情脱敏 | 单元测试 | JUnit5+Mockito | 权限 | 用户无完整查看权 | `toListVo(record,false)` | 敏感字段为脱敏值 | --- ## 二、接口测试用例 | 用例编号 | 测试模块 | 测试项 | 测试类型 | 测试工具 | 测试目的 | 前置条件 | 测试步骤 | 预期结果 | | --- | --- | --- | --- | --- | --- | --- | --- | --- | | ZCZX-BTJL-API-001 | 列表 | 默认分页排序 | 接口测试 | Postman/curl | §5.2 | 已登录;有多条不同发放日 | `GET /industryPolicy/subsidyRecord/list` | `rows`≤20;按 `grantDate` 新在前 | | ZCZX-BTJL-API-002 | 列表 | 姓名模糊 | 接口测试 | Postman | 姓名筛选 | 已登录 | `recipientName=` 唯一片段 | 命中姓名含该片段记录 | | ZCZX-BTJL-API-003 | 列表 | 类型筛选-农业 | 接口测试 | Postman | 精确 | 已登录 | `subsidyType=1` | 均为农业生产 | | ZCZX-BTJL-API-004 | 列表 | 类型筛选-住房 | 接口测试 | Postman | 精确 | 已登录 | `subsidyType=2` | 均为住房基建 | | ZCZX-BTJL-API-005 | 列表 | 类型筛选-民生 | 接口测试 | Postman | 精确 | 已登录 | `subsidyType=3` | 均为民生保障 | | ZCZX-BTJL-API-006 | 列表 | 发放日期闭区间 | 接口测试 | Postman | start/end | 已知 grantDate 样本 | `startDate`、`endDate` 含样本日 | 仅区间内记录 | | ZCZX-BTJL-API-007 | 列表 | 仅 startDate | 接口测试 | Postman | ≥开始 | 已登录 | 只传 `startDate` | 发放日 ≥ startDate | | ZCZX-BTJL-API-008 | 列表 | 仅 endDate | 接口测试 | Postman | ≤结束 | 已登录 | 只传 `endDate` | 发放日 ≤ endDate | | ZCZX-BTJL-API-009 | 列表 | 日期区间非法 | 接口测试 | Postman | 异常 | 已登录 | `startDate`>`endDate` | 失败;可读 `msg`;不返回业务数据 | | ZCZX-BTJL-API-010 | 列表 | 组合查询 | 接口测试 | Postman | 多条件 | 已登录 | 姓名+类型+日期 | 同时满足 | | ZCZX-BTJL-API-011 | 新增 | 合法全字段 | 接口测试 | Postman | §5.1 | 已登录 | `POST` Body 八项必填合法 | `code` 成功;详情可查 | | ZCZX-BTJL-API-012 | 新增 | 项目名称非法 | 接口测试 | Postman | 1~20 | 已登录 | 项目名空/21 字 | 失败;无新记录 | | ZCZX-BTJL-API-013 | 新增 | 姓名非法 | 接口测试 | Postman | 1~10 | 已登录 | 姓名空/11 字 | 失败 | | ZCZX-BTJL-API-014 | 新增 | 类型非法 | 接口测试 | Postman | 枚举 | 已登录 | `subsidyType=0` 或 `99` | 失败 | | ZCZX-BTJL-API-015 | 新增 | 身份证非法 | 接口测试 | Postman | 校验 | 已登录 | 错误 `idCard` | 失败;提示身份证类错误 | | ZCZX-BTJL-API-016 | 新增 | 手机号非法 | 接口测试 | Postman | 校验 | 已登录 | 10 位或非手机号 | 失败 | | ZCZX-BTJL-API-017 | 新增 | 银行账户非法 | 接口测试 | Postman | 16~19 | 已登录 | 15 位或含字母 | 失败 | | ZCZX-BTJL-API-018 | 新增 | 金额非法 | 接口测试 | Postman | >0 | 已登录 | `subsidyAmount=0` 或负数 | 失败 | | ZCZX-BTJL-API-019 | 新增 | 未来发放日 | 接口测试 | Postman | 日期 | 已登录 | `grantDate` 为明天 | 失败 | | ZCZX-BTJL-API-020 | 详情 | 有效 id | 接口测试 | Postman | §5.5 | 已登录 | `GET .../subsidyRecord/{id}` | 含八项业务字段及审计字段 | | ZCZX-BTJL-API-021 | 详情 | 无效 id | 接口测试 | Postman | 异常 | 已登录 | 不存在 id | 404 或业务失败 | | ZCZX-BTJL-API-022 | 修改 | 合法修改 | 接口测试 | Postman | §5.3 | 已登录;有记录 | `PUT` 改金额、发放日 | 成功;详情已更新 | | ZCZX-BTJL-API-023 | 修改 | 校验仍生效 | 接口测试 | Postman | 异常 | 已登录 | `PUT` 改手机号为非法 | 失败;原数据不变 | | ZCZX-BTJL-API-024 | 删除 | 单条删除 | 接口测试 | Postman | §5.4 | 已登录 | `DELETE .../subsidyRecord/{id}` | 成功;列表无该 id | | ZCZX-BTJL-API-025 | 删除 | 批量删除 | 接口测试 | Postman | 批量 | 已登录;多条 id | `DELETE .../id1,id2` | 成功;均不可查 | | ZCZX-BTJL-API-026 | 端到端 | CRUD 串联 | 接口测试 | Postman | §4 | 已登录 | 新增→查列表→详情→改→删 | 全流程成功 | | ZCZX-BTJL-API-027 | 鉴权 | 未登录 | 接口测试 | curl | 安全 | 无 Token | `GET .../list` | 401 或统一未登录响应 | | ZCZX-BTJL-API-028 | 权限 | 无写权限 | 接口测试 | Postman | 越权 | 仅 list 权限 | `POST .../subsidyRecord` | 无权限失败 | | ZCZX-BTJL-API-029 | 响应 | 失败可读 | 接口测试 | Postman | §7 | 已登录 | 触发身份证/区间等错误 | Body 含 `code`、`msg` 且可区分 | | ZCZX-BTJL-API-030 | 脱敏 | 列表手机号(可选) | 接口测试 | Postman | §3.4 | 普通角色已登录 | `GET list` | `contactPhone` 为脱敏格式(若已实现) | --- ## 三、界面测试用例(UI) **测试工具**:**Playwright** + **Chromium**(`channel: 'chrome'` 使用本机 **Google Chrome**)。 | 用例编号 | 测试模块 | 测试项 | 测试类型 | 测试工具 | 测试目的 | 前置条件 | 测试步骤 | 预期结果 | | --- | --- | --- | --- | --- | --- | --- | --- | --- | | ZCZX-BTJL-UI-001 | 列表 | 默认分页排序 | UI 测试 | Playwright+Chrome | §5.2 | 已登录;数据>20 | 进入「补贴发放记录」 | 默认每页 20;发放日期新在前 | | ZCZX-BTJL-UI-002 | 列表 | 姓名模糊查询 | UI 测试 | Playwright+Chrome | 姓名筛选 | 存在姓名含关键词记录 | 输入姓名→查询 | 表格含该行 | | ZCZX-BTJL-UI-003 | 列表 | 补贴类型筛选 | UI 测试 | Playwright+Chrome | 精确 | 多类型均有数据 | 选「农业生产」→查询 | 类型列均为农业生产 | | ZCZX-BTJL-UI-004 | 列表 | 发放日期范围 | UI 测试 | Playwright+Chrome | 闭区间 | 已知样本日期 | 选 start/end→查询 | 仅区间内记录 | | ZCZX-BTJL-UI-005 | 列表 | 日期区间非法 | UI 测试 | Playwright+Chrome | 异常 | 已登录 | start>end→查询 | 提示错误;列表不刷新或空 | | ZCZX-BTJL-UI-006 | 列表 | 组合与重置 | UI 测试 | Playwright+Chrome | 恢复 | 已筛选 | 多条件查询→重置 | 条件清空;恢复默认列表 | | ZCZX-BTJL-UI-007 | 列表 | 操作按钮 | UI 测试 | Playwright+Chrome | §6 | 有数据行 | 检查操作列 | 查看/编辑/删除可见(按权限) | | ZCZX-BTJL-UI-008 | 新增 | 合法全字段提交 | UI 测试 | Playwright+Chrome | §5.1 | 已登录 | 新增→填八项必填→确定 | 成功;列表出现新记录 | | ZCZX-BTJL-UI-009 | 新增 | 项目名空或超长 | UI 测试 | Playwright+Chrome | 1~20 | 已登录 | 项目名空/21 字→提交 | 校验失败 | | ZCZX-BTJL-UI-010 | 新增 | 姓名超长 | UI 测试 | Playwright+Chrome | 1~10 | 已登录 | 姓名 11 字→提交 | 校验失败 | | ZCZX-BTJL-UI-011 | 新增 | 身份证/手机非法 | UI 测试 | Playwright+Chrome | 校验 | 已登录 | 填错误身份证或手机号→提交 | 明确错误提示 | | ZCZX-BTJL-UI-012 | 新增 | 金额与发放日 | UI 测试 | Playwright+Chrome | 异常 | 已登录 | 金额 0 或发放日选明天→提交 | 校验失败 | | ZCZX-BTJL-UI-013 | 新增 | 类型必选 | UI 测试 | Playwright+Chrome | 约束 | 可清空类型时 | 不选类型→提交 | 必选提示 | | ZCZX-BTJL-UI-014 | 详情 | 字段完整 | UI 测试 | Playwright+Chrome | §5.5 | 任意记录 | 点「查看」 | 项目、类型、姓名、证件、账户、金额、日期齐全 | | ZCZX-BTJL-UI-015 | 详情 | 敏感信息脱敏(可选) | UI 测试 | Playwright+Chrome | §5.5 | 普通角色 | 查看详情 | 身份证/手机/账户为脱敏展示(若已实现) | | ZCZX-BTJL-UI-016 | 修改 | 编辑成功 | UI 测试 | Playwright+Chrome | §5.3 | 有记录 | 编辑→改补贴金额→保存 | 列表/详情已更新 | | ZCZX-BTJL-UI-017 | 修改 | 保存校验失败 | UI 测试 | Playwright+Chrome | 异常 | 有记录 | 清空银行账户→保存 | 校验失败 | | ZCZX-BTJL-UI-018 | 删除 | 单条删除确认 | UI 测试 | Playwright+Chrome | §5.4 | 有记录 | 删除→确认 | 记录消失 | | ZCZX-BTJL-UI-019 | 删除 | 取消删除 | UI 测试 | Playwright+Chrome | 确认框 | 有记录 | 删除→取消 | 记录仍在 | | ZCZX-BTJL-UI-020 | 删除 | 批量删除(若支持) | UI 测试 | Playwright+Chrome | 批量 | 勾选多条 | 批量删除→确认 | 选中行均消失 | | ZCZX-BTJL-UI-021 | 类型 | 三类均可登记 | UI 测试 | Playwright+Chrome | §2.1 | 已登录 | 各建类型 1/2/3 一条并筛选 | 筛选与展示正确 | | ZCZX-BTJL-UI-022 | 端到端 | CRUD 串联 | UI 集成 | Playwright+Chrome | §4 | 可新增 | 新增→查→看→改→删 | 全流程界面无报错 | | ZCZX-BTJL-UI-023 | 权限 | 只读账号 | UI 测试 | Playwright+Chrome | §8 | 无 add/edit/remove | 登录进模块 | 无新增/编辑/删除或操作拒绝 | | ZCZX-BTJL-UI-024 | 导出 | 导出按钮(可选) | UI 测试 | Playwright+Chrome | 技术方案 | 有 export 权限 | 点导出 | 下载 Excel 或提示成功 | | ZCZX-BTJL-UI-025 | 表单 | 金额两位小数 | UI 测试 | Playwright+Chrome | §5.1 | 已登录 | 输入 100.555→提交 | 前端或后端拒绝三位小数 | --- ## Playwright 与谷歌浏览器(实施提示) - 安装:`npm i -D @playwright/test`;`npx playwright install chromium`;本机 Chrome:`channel: 'chrome'`。 - 登录复用:`storageState: 'auth.json'`。 - 路由示例:`page.goto('/policy/subsidyRecord')`(以菜单配置为准)。 - 日期:`page.locator('.el-date-editor input').first().fill('2025-01-15')` 或项目日期组件封装。 - 断言:`expect(page.getByText('农业生产')).toBeVisible()`。 --- ## 覆盖对照 | 类别 | 单元 UT | 接口 API | 界面 UI | | --- | --- | --- | --- | | 正常流程 | UT-010~013 | API-001~008、010~011、020、022、024~026 | UI-001~004、008、014、016、018、021~022 | | 异常流程 | UT-001~009 | API-009、012~019、021、023、029 | UI-005、009~013、017、019 | | 业务约束 | UT-003~008、009 | API-003~005、009、015~019 | UI-003、005、011~013、025 | | 脱敏/权限(可选) | UT-014~016 | API-030、027~028 | UI-015、023、024 | --- ## 功能需求追溯(自查) | 需求章节 | 要点 | 主要对应用例 | | --- | --- | --- | | §5.1 新增 | 八项必填、格式校验 | UT-001~008;API-011~019;UI-008~013 | | §5.2 列表 | 姓名模糊、类型、日期区间、排序 | UT-009、013;API-001~010;UI-001~006 | | §5.3 修改 | 全字段可改 | UT-011;API-022~023;UI-016~017 | | §5.4 删除 | 单条/批量、确认 | UT-012;API-024~025;UI-018~020 | | §5.5 详情 | 全字段、脱敏 | API-020~021;UI-014~015 | | §6 操作矩阵 | 无状态限制 | UI-007、023 | | §7 错误约定 | code/msg | API-029 | --- ## 修订记录 | 版本 | 说明 | | --- | --- | | 1.0 | 初版:单元 16、接口 30、UI 25;台账 CRUD 无发布下架;Playwright+Chrome;Base Path `/industryPolicy/subsidyRecord` |