# 项目与补贴 — 补贴 — 测试用例 > 依据:`项目与补贴-补贴功能需求.md`、`项目与补贴-补贴技术方案.md` > **接口 Base Path(示例)**:`/policy/projectSubsidy`;若含 `context-path` 或网关前缀须补齐。鉴权与若依一致(Cookie / Token)。 **通用前置(无特殊说明)**:具备本模块菜单与按钮权限的账号已登录;可先调 `POST /common/upload` 取得明细附件/封面的 `url`、`fileName`(存储路径)、`originalFilename`(作 `detailFileName`)。**明细附件**(必填)白名单:`pdf`/`md`/`doc`/`docx`/`xls`/`xlsx`/`ppt`/`pptx`(≤30MB);**封面**(选填):`jpg`/`jpeg`/`png`(≤10MB)。**发放状态**:`1` 申请中、`2` 已发放。**补贴名称**:1~20 字符(必填)。 **界面(UI)测试**:借助 **Playwright** 启动 **Chromium**(与 **Google Chrome 同源内核**);可配置 `channel: 'chrome'` 调用本机已安装的谷歌浏览器。 --- ## 一、单元测试用例 | 用例编号 | 测试模块 | 测试项 | 测试类型 | 测试工具 | 测试目的 | 前置条件 | 测试步骤 | 预期结果 | | --- | --- | --- | --- | --- | --- | --- | --- | --- | | ZCZX-BTSX-UT-001 | 参数校验 | 补贴名称长度 | 单元测试 | JUnit5 | §5.1 1~20 | 无 | 空串、1 字、20 字、21 字 | 空/21 失败;1~20 通过 | | ZCZX-BTSX-UT-002 | 参数校验 | 简介字数 | 单元测试 | JUnit5 | 选填≤50 | 无 | null/空通过;51 字失败 | 符合 §5.1 | | ZCZX-BTSX-UT-003 | 参数校验 | 发放状态枚举 | 单元测试 | JUnit5 | 仅 1~2 | 无 | `grantStatus` 为 1/2 通过;0、3、null 失败 | 与技术方案 §2.2 一致 | | ZCZX-BTSX-UT-004 | 附件校验 | 明细后缀白名单 | 单元测试 | JUnit5 | §5.1 | 无 | `.pdf`、`.xlsx` 通过;`.exe`、`.zip` 失败 | 与需求一致 | | ZCZX-BTSX-UT-005 | 附件校验 | 封面后缀白名单 | 单元测试 | JUnit5 | §5.1 | 无 | `.jpg`、`.png` 通过;`.bmp` 失败 | 与需求一致 | | ZCZX-BTSX-UT-006 | 附件校验 | 明细三件套必填 | 单元测试 | JUnit5 | url/path/name | 无 | 缺 url 或缺 name;三者齐全 | 前者失败;后者通过 | | ZCZX-BTSX-UT-007 | 附件校验 | 封面成对 | 单元测试 | JUnit5 | 可空成对 | 无 | 仅 coverUrl 无 path;二者齐全或皆空 | 单字段失败;成对/皆空通过 | | ZCZX-BTSX-UT-008 | 业务默认 | 新增缺省发放状态 | 单元测试 | JUnit5 | 技术方案 §1 | 无 | `resolveGrantStatus(null)` 或 insert 未传 | 落库/结果为 `1`(申请中) | | ZCZX-BTSX-UT-009 | Service | 新增落库 | 单元测试 | JUnit5+Mockito | §5.1 | 合法实体含明细三件套 | `insert(matter)` | 字段与入参一致;`grant_status` 正确 | | ZCZX-BTSX-UT-010 | Service | 修改全字段 | 单元测试 | JUnit5+Mockito | §5.3 | 已存在 id | `update` 改名称、状态、简介 | 更新成功;`update_time` 变化 | | ZCZX-BTSX-UT-011 | Service | 状态双向变更 | 单元测试 | JUnit5+Mockito | §5.3 默认 | 原 `grant_status=2` | `update` 改为 `1` | 成功(默认允许回退) | | ZCZX-BTSX-UT-012 | Service | 修改缺明细拒绝 | 单元测试 | JUnit5+Mockito | 保存约束 | 已存在记录 | `update` 清空 detail 三件套 | 校验失败;不写库 | | ZCZX-BTSX-UT-013 | Service | 替换明细删旧 | 单元测试 | JUnit5+Mockito | §5.3 | 旧 `detail_file_path` 已知 | `update` 换新三件套 | Mock 验证 `deleteFile(旧path)` | | ZCZX-BTSX-UT-014 | Service | 替换封面删旧 | 单元测试 | JUnit5+Mockito | §5.3 | 旧 `cover_file_path` 已知 | `update` 换新封面 | 删除旧 cover path | | ZCZX-BTSX-UT-015 | Service | 删除联动清文件 | 单元测试 | JUnit5+Mockito | §5.4 | 记录含 detail/cover path | `deleteByIds([id])` | 删库;对两 path 各调 `deleteFile` | | ZCZX-BTSX-UT-016 | Service | 列表排序 SQL | 单元测试 | JUnit5 | 技术方案 | 无 | 检查列表 ORDER BY | 含 `create_time DESC`, `id DESC` | --- ## 二、接口测试用例 | 用例编号 | 测试模块 | 测试项 | 测试类型 | 测试工具 | 测试目的 | 前置条件 | 测试步骤 | 预期结果 | | --- | --- | --- | --- | --- | --- | --- | --- | --- | | ZCZX-BTSX-API-001 | 列表 | 默认分页排序 | 接口测试 | Postman/curl | §5.2 | 已登录;有多条不同创建时间 | `GET /industryPolicy/subsidyMatter/list` | `rows`≤20;`createTime` 新在前 | | ZCZX-BTSX-API-002 | 列表 | 关键字-名称 | 接口测试 | Postman | 模糊 | 已登录 | `keyword=` 仅命中名称片段 | 返回含该名称记录 | | ZCZX-BTSX-API-003 | 列表 | 关键字-简介 | 接口测试 | Postman | OR | 简介含词、名称不含 | 同上 keyword | 仍命中 | | ZCZX-BTSX-API-004 | 列表 | 发放状态-申请中 | 接口测试 | Postman | 精确 | 已登录 | `grantStatus=1` | 均为申请中 | | ZCZX-BTSX-API-005 | 列表 | 发放状态-已发放 | 接口测试 | Postman | 精确 | 已登录 | `grantStatus=2` | 均为已发放 | | ZCZX-BTSX-API-006 | 列表 | 组合查询 | 接口测试 | Postman | 多条件 | 已登录 | keyword+grantStatus | 同时满足 | | ZCZX-BTSX-API-007 | 新增 | 合法全字段 | 接口测试 | Postman | §5.1 | 已登录;已上传明细+封面 | `POST` Body 合法 | `code` 成功;详情含 `detailFileName` | | ZCZX-BTSX-API-008 | 新增 | 最小必填无封面 | 接口测试 | Postman | 正常 | 已登录;仅上传明细 | `POST` 名称+状态+明细三件套,无简介无封面 | 成功;`grantStatus` 为入参或默认 `1` | | ZCZX-BTSX-API-009 | 新增 | 缺省发放状态 | 接口测试 | Postman | 默认申请中 | 已登录 | `POST` 不传 `grantStatus`(若接口支持) | 落库 `grantStatus=1` | | ZCZX-BTSX-API-010 | 新增 | 直接已发放 | 接口测试 | Postman | §4 补录 | 已登录 | `grantStatus=2`+合法明细 | 成功;详情为已发放 | | ZCZX-BTSX-API-011 | 新增 | 名称非法 | 接口测试 | Postman | 1~20 | 已登录 | 名称空/21 字 | 失败;无新记录 | | ZCZX-BTSX-API-012 | 新增 | 简介超长 | 接口测试 | Postman | ≤50 | 已登录 | introduction 51 字 | 失败 | | ZCZX-BTSX-API-013 | 新增 | 发放状态非法 | 接口测试 | Postman | 枚举 | 已登录 | `grantStatus=0` 或 `99` | 失败 | | ZCZX-BTSX-API-014 | 新增 | 缺明细附件 | 接口测试 | Postman | 必填 | 已登录 | 不传 detail 三件套 | 失败;提示明细类错误 | | ZCZX-BTSX-API-015 | 新增 | 明细后缀非法 | 接口测试 | Postman | 白名单 | 已登录 | detail 指向 `.exe` 或伪造后缀 | 失败 | | ZCZX-BTSX-API-016 | 详情 | 有效 id | 接口测试 | Postman | §5.5 | 已登录 | `GET .../subsidyMatter/{id}` | 含名称、状态、明细名、封面及审计字段 | | ZCZX-BTSX-API-017 | 详情 | 无效 id | 接口测试 | Postman | 异常 | 已登录 | 不存在 id | 404 或业务失败 | | ZCZX-BTSX-API-018 | 修改 | 合法修改 | 接口测试 | Postman | §5.3 | 已登录;有记录 | `PUT` 改名称、简介 | 成功;详情已更新 | | ZCZX-BTSX-API-019 | 修改 | 状态 申请中→已发放 | 接口测试 | Postman | §4 流转 | 记录 grantStatus=1 | `PUT` grantStatus=2 | 成功 | | ZCZX-BTSX-API-020 | 修改 | 状态 已发放→申请中 | 接口测试 | Postman | 默认可回退 | 记录 grantStatus=2 | `PUT` grantStatus=1 | 成功(未单独约定禁止时) | | ZCZX-BTSX-API-021 | 修改 | 清空明细拒绝 | 接口测试 | Postman | 保存约束 | 已登录 | `PUT` 去掉 detail 三件套 | 失败;原数据不变 | | ZCZX-BTSX-API-022 | 修改 | 替换明细附件 | 接口测试 | Postman | 删旧 | 原 detail path 已知 | `PUT` 换新三件套 | 成功;旧文件不可访问(抽查) | | ZCZX-BTSX-API-023 | 修改 | 替换封面 | 接口测试 | Postman | §5.3 | 有旧封面 | `PUT` 换新 cover | 成功;旧封面不可访问 | | ZCZX-BTSX-API-024 | 删除 | 单条-申请中 | 接口测试 | Postman | §5.4 | 已登录;grantStatus=1 | `DELETE .../{id}` | 成功;详情 404 | | ZCZX-BTSX-API-025 | 删除 | 单条-已发放 | 接口测试 | Postman | 默认不限制 | 已登录;grantStatus=2 | `DELETE .../{id}` | 成功(默认策略) | | ZCZX-BTSX-API-026 | 删除 | 批量删除 | 接口测试 | Postman | 批量 | 已登录;多条 id | `DELETE id1,id2` | 均不可查 | | ZCZX-BTSX-API-027 | 端到端 | CRUD+状态流转 | 接口测试 | Postman | §4 | 已登录 | 新增(申请中)→列表→详情→改已发放→删 | 每步成功 | | ZCZX-BTSX-API-028 | 鉴权 | 未登录 | 接口测试 | curl | 安全 | 无 Token | `GET .../list` | 401 或统一未登录 | | ZCZX-BTSX-API-029 | 权限 | 无写权限 | 接口测试 | Postman | 越权 | 仅 list 权限 | `POST .../subsidyMatter` | 无权限失败 | | ZCZX-BTSX-API-030 | 响应 | 失败可读 | 接口测试 | Postman | §7 | 已登录 | 触发缺明细/名称空等 | Body 含 `code`、`msg` 且可区分 | --- ## 三、界面测试用例(UI) **测试工具**:**Playwright** + **Chromium**(`channel: 'chrome'` 使用本机 **Google Chrome**)。 | 用例编号 | 测试模块 | 测试项 | 测试类型 | 测试工具 | 测试目的 | 前置条件 | 测试步骤 | 预期结果 | | --- | --- | --- | --- | --- | --- | --- | --- | --- | | ZCZX-BTSX-UI-001 | 列表 | 默认分页排序 | UI 测试 | Playwright+Chrome | §5.2 | 已登录;数据>20 | 进入「项目与补贴-补贴」 | 每页 20;创建时间新在前 | | ZCZX-BTSX-UI-002 | 列表 | 关键字查询 | UI 测试 | Playwright+Chrome | 模糊 OR | 有样本 | 输入 keyword→查询 | 命中名称或简介 | | ZCZX-BTSX-UI-003 | 列表 | 发放状态筛选 | UI 测试 | Playwright+Chrome | 精确 | 两种状态均有 | 选「申请中」→查询 | 状态列均为申请中 | | ZCZX-BTSX-UI-004 | 列表 | 组合与重置 | UI 测试 | Playwright+Chrome | 恢复 | 已筛选 | keyword+状态→查询→重置 | 重置后条件清空 | | ZCZX-BTSX-UI-005 | 列表 | 操作按钮 | UI 测试 | Playwright+Chrome | §6 | 有数据行 | 检查操作列 | 查看/编辑/删除按权限显示 | | ZCZX-BTSX-UI-006 | 列表 | 明细文件名可点 | UI 测试 | Playwright+Chrome | §5.2 | 有附件记录 | 查看列表附件列 | 显示原始文件名;可点击(下载/预览) | | ZCZX-BTSX-UI-007 | 新增 | 合法全字段 | UI 测试 | Playwright+Chrome | §5.1 | 已登录 | 新增→填名称、选申请中→上传 pdf→上传 jpg 封面→确定 | 成功;列表可见 | | ZCZX-BTSX-UI-008 | 新增 | 无封面无简介 | UI 测试 | Playwright+Chrome | 选填 | 已登录 | 仅名称+状态+明细→保存 | 成功 | | ZCZX-BTSX-UI-009 | 新增 | 默认申请中 | UI 测试 | Playwright+Chrome | §5.1 默认 | 已登录 | 打开新增弹窗不改状态 | 发放状态默认「申请中」 | | ZCZX-BTSX-UI-010 | 新增 | 直接已发放 | UI 测试 | Playwright+Chrome | §4 补录 | 已登录 | 选「已发放」+合法明细→保存 | 列表显示已发放 | | ZCZX-BTSX-UI-011 | 新增 | 名称空或超长 | UI 测试 | Playwright+Chrome | 1~20 | 已登录 | 名称空/21 字→提交 | 校验失败 | | ZCZX-BTSX-UI-012 | 新增 | 未传明细附件 | UI 测试 | Playwright+Chrome | 必填 | 已登录 | 不上传明细→提交 | 提示须上传明细附件 | | ZCZX-BTSX-UI-013 | 新增 | 明细格式非法 | UI 测试 | Playwright+Chrome | 白名单 | 准备 .exe | `setInputFiles` 上传→提交 | 拒绝或明确错误提示 | | ZCZX-BTSX-UI-014 | 新增 | 封面格式非法 | UI 测试 | Playwright+Chrome | §5.1 | 准备 .bmp | 上传封面→提交 | 拒绝或错误提示 | | ZCZX-BTSX-UI-015 | 新增 | 简介超长 | UI 测试 | Playwright+Chrome | ≤50 | 已登录 | 简介 51 字→提交 | 校验失败 | | ZCZX-BTSX-UI-016 | 详情 | 字段完整 | UI 测试 | Playwright+Chrome | §5.5 | 任意记录 | 点「查看」 | 名称、简介、状态、明细下载入口、封面、审计信息齐全 | | ZCZX-BTSX-UI-017 | 详情 | 进入编辑 | UI 测试 | Playwright+Chrome | §5.5 | 有 edit 权限 | 详情页点编辑 | 进入编辑表单且数据回显 | | ZCZX-BTSX-UI-018 | 修改 | 编辑成功 | UI 测试 | Playwright+Chrome | §5.3 | 有记录 | 编辑→改名称→保存 | 列表/详情已更新 | | ZCZX-BTSX-UI-019 | 修改 | 状态变更 | UI 测试 | Playwright+Chrome | 1↔2 | 申请中记录 | 改为已发放→保存 | 列表显示已发放 | | ZCZX-BTSX-UI-020 | 修改 | 替换明细附件 | UI 测试 | Playwright+Chrome | §5.3 | 有记录 | 重新上传 pdf→保存 | 成功;详情显示新文件名 | | ZCZX-BTSX-UI-021 | 修改 | 清空明细失败 | UI 测试 | Playwright+Chrome | 约束 | 有记录 | 移除已传明细→保存 | 校验失败 | | ZCZX-BTSX-UI-022 | 删除 | 单条确认 | UI 测试 | Playwright+Chrome | §5.4 | 有记录 | 删除→确认 | 记录消失 | | ZCZX-BTSX-UI-023 | 删除 | 取消删除 | UI 测试 | Playwright+Chrome | 确认框 | 有记录 | 删除→取消 | 记录仍在 | | ZCZX-BTSX-UI-024 | 删除 | 已发放可删 | UI 测试 | Playwright+Chrome | 默认策略 | 已发放记录 | 删除→确认 | 成功删除(默认) | | ZCZX-BTSX-UI-025 | 删除 | 批量删除 | UI 测试 | Playwright+Chrome | 批量 | 勾选多条 | 批量删除→确认 | 选中行均消失 | | ZCZX-BTSX-UI-026 | 端到端 | CRUD 串联 | UI 集成 | Playwright+Chrome | §4 | 可新增 | 新增→查→看→改状态→删 | 全流程无报错 | | ZCZX-BTSX-UI-027 | 权限 | 只读账号 | UI 测试 | Playwright+Chrome | §8 | 无 add/edit/remove | 登录进模块 | 无新增/编辑/删除或操作拒绝 | | ZCZX-BTSX-UI-028 | 导出 | 导出按钮(可选) | UI 测试 | Playwright+Chrome | 技术方案 | 有 export 权限 | 点导出 | 下载 Excel 或成功提示 | --- ## Playwright 与谷歌浏览器(实施提示) - 安装:`npm i -D @playwright/test`;`npx playwright install chromium`;本机 Chrome:`channel: 'chrome'`。 - 登录复用:`storageState: 'auth.json'`。 - 路由示例:`page.goto('/policy/subsidyMatter')`(以菜单组件路径为准)。 - 上传:`page.locator('input[type=file]').first().setInputFiles('fixtures/sample.pdf')`。 - 确认框:`page.getByRole('button', { name: /确定|确认/ }).click()`。 - 断言:`expect(page.getByText('申请中')).toBeVisible()`。 --- ## 覆盖对照 | 类别 | 单元 UT | 接口 API | 界面 UI | | --- | --- | --- | --- | | 正常流程 | UT-008~011、016 | API-001~010、016~020、022~023、027 | UI-001~010、016~020、022、026 | | 异常流程 | UT-001~002、012 | API-011~015、017、021、028~030 | UI-011~015、021、023 | | 业务约束 | UT-003~007 | API-004~005、013~015、019~021、024~025 | UI-003、009~010、012~014、019、024 | | 附件/文件 | UT-004~007、013~015 | API-007~008、022~023 | UI-006~008、012~014、020 | | 权限/导出 | — | API-028~029 | UI-005、027~028 | --- ## 功能需求追溯(自查) | 需求章节 | 要点 | 主要对应用例 | | --- | --- | --- | | §2.1 发放状态 | 申请中/已发放、可互改 | UT-003、011;API-004~005、019~020;UI-003、009~010、019 | | §5.1 新增 | 名称、明细必填、封面选填、默认申请中 | UT-001、004~008;API-007~015;UI-007~015 | | §5.2 列表 | keyword OR、状态筛选、排序 | UT-016;API-001~006;UI-001~006 | | §5.3 修改 | 全字段、明细不可空、换附件删旧 | UT-010~014;API-018~023;UI-018~021 | | §5.4 删除 | 确认、清文件、已发放默认可删 | UT-015;API-024~026;UI-022~025 | | §5.5 详情 | 全字段、下载入口 | API-016;UI-016~017 | | §6~§7 | 权限、code/msg | API-028~030;UI-027 | --- ## 修订记录 | 版本 | 说明 | | --- | --- | | 1.0 | 初版:单元 16、接口 30、UI 28;台账 CRUD;明细必填+封面选填;Playwright+Chrome;Base `/industryPolicy/subsidyMatter` | | 1.1 | 草稿 §6 发布/下架:见下表补充用例 | ### 补充用例(草稿 §6 发布/下架) | 用例编号 | 测试模块 | 测试项 | 测试类型 | 测试工具 | 测试目的 | 前置条件 | 测试步骤 | 预期结果 | | --- | --- | --- | --- | --- | --- | --- | --- | --- | | ZCZX-BTSX-UT-017 | 状态机 | 删除守卫 | 单元测试 | JUnit5 | 矩阵 | 无 | `canDelete(publish=0/1)` | 0→true,1→false | | ZCZX-BTSX-API-031 | 发布 | 未发布成功 | 接口测试 | Postman | §5.6 | publish=0;明细齐全 | `POST .../publish/{id}` | publish=1 | | ZCZX-BTSX-API-032 | 修改 | 已发布拒绝 | 接口测试 | Postman | 矩阵 | publish=1 | `PUT` | 失败 | | ZCZX-BTSX-API-033 | 下架 | 已发布成功 | 接口测试 | Postman | §5.6 | publish=1 | `POST .../offline/{id}` | publish=0;附件仍在 | | ZCZX-BTSX-UI-029 | 列表 | 发布下架按钮 | UI 测试 | Playwright+Chrome | 矩阵 | 两种状态 | 查看操作列 | 与宣传模块矩阵一致 |