# 项目与补贴 — 项目 — 测试用例 > 依据:`项目与补贴-项目功能需求.md`、`项目与补贴-项目技术方案.md` > **接口 Base Path(示例)**:`/policy/projectSubsidy`;鉴权与若依一致(Cookie / Token)。 **通用前置(无特殊说明)**:具备本模块菜单与按钮权限的账号已登录;封面上传白名单 `jpg`/`jpeg`/`png`(≤10MB)。**执行状态**:`1` 未开始、`2` 进行中、`3` 已完成。自动推算(草稿 §1.1,`manual_complete_flag=0`):T<S→1;T=E→3;S≤T<E→2;**T>E→2**(超期不自动完成)。 **界面(UI)测试**:**Playwright** + **Chromium**(`channel: 'chrome'` 使用本机 **Google Chrome**)。 --- ## 一、单元测试用例 | 用例编号 | 测试模块 | 测试项 | 测试类型 | 测试工具 | 测试目的 | 前置条件 | 测试步骤 | 预期结果 | | --- | --- | --- | --- | --- | --- | --- | --- | --- | | ZCZX-BTXM-UT-001 | 状态推算 | T<开始日 | 单元测试 | JUnit5 | §2.2 | 无 | `resolveExecStatus(S=明天,E=后天,T=今天,flag=0)` | 返回 `1`(未开始) | | ZCZX-BTXM-UT-002 | 状态推算 | 进行中区间 | 单元测试 | JUnit5 | §2.2 | 无 | S=昨天,E=明天,T=今天 | 返回 `2`(进行中) | | ZCZX-BTXM-UT-003 | 状态推算 | T=预计完成日 | 单元测试 | JUnit5 | §1.1 | 无 | S=上月,E=今天,T=今天 | 返回 `3`(已完成) | | ZCZX-BTXM-UT-003A | 状态推算 | T>预计完成日 | 单元测试 | JUnit5 | §2.2 超期 | 无 | S=上月,E=昨天,T=今天 | 返回 `2`(进行中),**非** `3` | | ZCZX-BTXM-UT-004 | 状态推算 | 手工锁定不降级 | 单元测试 | JUnit5 | manual_flag=1 | flag=1,日期改回进行中区间 | 调用推算 | **不修改** `exec_status`(仍为 3) | | ZCZX-BTXM-UT-005 | 状态推算 | 手工完成必填实际日 | 单元测试 | JUnit5 | §2.2 | 无 | 用户提交 execStatus=3 且无 actualEndDate | 校验失败 | | ZCZX-BTXM-UT-006 | 参数校验 | 项目名称长度 | 单元测试 | JUnit5 | 1~20 | 无 | 空、1 字、20 字、21 字 | 空/21 失败;1~20 通过 | | ZCZX-BTXM-UT-007 | 参数校验 | 简介字数 | 单元测试 | JUnit5 | ≤50 选填 | 无 | null/空通过;51 字失败 | 符合 §5.1 | | ZCZX-BTXM-UT-008 | 参数校验 | 投资金额 | 单元测试 | JUnit5 | >0 | 无 | 0、-1、0.01、三位小数 | 非法失败;合法通过 | | ZCZX-BTXM-UT-009 | 参数校验 | 计划日期先后 | 单元测试 | JUnit5 | E≥S | 无 | planned<start | 失败;planned=start 通过 | | ZCZX-BTXM-UT-010 | 参数校验 | 实际完成日 | 单元测试 | JUnit5 | ≤当天 | 无 | 明天、今天 | 明天失败;今天通过 | | ZCZX-BTXM-UT-011 | 查询校验 | 开始日区间 | 单元测试 | JUnit5 | §5.2 | 无 | start>end / 合法区间 | 非法失败;合法通过 | | ZCZX-BTXM-UT-012 | Service | 保存后推算写库 | 单元测试 | JUnit5+Mockito | 新增 | flag=0,日期落入进行中 | `insert` 前调用 resolver | 库中 `exec_status=2` | | ZCZX-BTXM-UT-013 | Service | 手工完成写 flag | 单元测试 | JUnit5+Mockito | §3.3.1 | 提交 execStatus=3+actualEndDate | `save` | `manual_complete_flag=1`;`actual_end_date` 有值 | | ZCZX-BTXM-UT-014 | Service | 列表查询刷新状态 | 单元测试 | JUnit5+Mockito | §1 | 库中 flag=0,日期已跨期 | `selectList` 组装 VO | 展示态为推算后状态(宜同步写库) | | ZCZX-BTXM-UT-015 | Service | 删除清封面 | 单元测试 | JUnit5+Mockito | §5.4 | 有 cover_file_path | `deleteByIds` | Mock 验证 `deleteFile(path)` | | ZCZX-BTXM-UT-016 | Service | 换封面删旧 | 单元测试 | JUnit5+Mockito | §5.3 | 旧 path 已知 | `update` 换新 path | 删除旧 path 文件 | | ZCZX-BTXM-UT-017 | 附件校验 | 封面后缀 | 单元测试 | JUnit5 | 白名单 | 无 | `.jpg` 通过;`.exe` 失败 | 与需求一致 | --- ## 二、接口测试用例 | 用例编号 | 测试模块 | 测试项 | 测试类型 | 测试工具 | 测试目的 | 前置条件 | 测试步骤 | 预期结果 | | --- | --- | --- | --- | --- | --- | --- | --- | --- | | ZCZX-BTXM-API-001 | 列表 | 默认分页排序 | 接口测试 | Postman/curl | §5.2 | 已登录;有多条项目 | `GET /industryPolicy/subsidyProject/list` | ≤20 条;`projectStartDate` 倒序 | | ZCZX-BTXM-API-002 | 列表 | 关键字-名称 | 接口测试 | Postman | 模糊 | 已登录 | `keyword=` 命中名称片段 | 返回含该名称行 | | ZCZX-BTXM-API-003 | 列表 | 关键字-简介 | 接口测试 | Postman | OR | 简介含词、名称不含 | 同上 keyword | 仍命中 | | ZCZX-BTXM-API-004 | 列表 | 执行状态筛选 | 接口测试 | Postman | 精确 | 已登录 | `execStatus=2` | 均为进行中 | | ZCZX-BTXM-API-005 | 列表 | 开始日闭区间 | 接口测试 | Postman | §5.2 | 已知开始日样本 | `startDate`+`endDate` | 仅区间内 | | ZCZX-BTXM-API-006 | 列表 | 区间非法 | 接口测试 | Postman | 异常 | 已登录 | start>end | 失败;可读 `msg` | | ZCZX-BTXM-API-007 | 列表 | 查询刷新状态 | 接口测试 | Postman | §2.2 | 库中项目 S/E 使今天应为进行中且库仍为 1 | `GET list` | 返回 `execStatus=2`(或已同步写库) | | ZCZX-BTXM-API-008 | 新增 | 合法全字段 | 接口测试 | Postman | 正常 | 已登录;已上传封面 | `POST` Body 合法 | 成功;字段落库 | | ZCZX-BTXM-API-009 | 新增 | 自动推算-未开始 | 接口测试 | Postman | §2.2 | 已登录 | 开始日=明天,预计=下月,execStatus 随意 | 保存后 `execStatus=1` | | ZCZX-BTXM-API-010 | 新增 | 自动推算-进行中 | 接口测试 | Postman | §2.2 | 已登录 | 开始=昨天,预计=明天 | 保存后 `execStatus=2` | | ZCZX-BTXM-API-011 | 新增 | 自动推算-已完成 | 接口测试 | Postman | §1.1 T=E | 已登录 | 开始=上月,预计=今天 | 保存后 `execStatus=3`;`actualEndDate` 默认今天 | | ZCZX-BTXM-API-011A | 新增 | 超期不自动完成 | 接口测试 | Postman | T>E | 已登录 | 开始=上月,预计=昨天 | 保存后 `execStatus=2`(仍为进行中) | | ZCZX-BTXM-API-012 | 新增 | 手工已完成 | 接口测试 | Postman | §2.2 | 进行中日期段 | `execStatus=3`+`actualEndDate=今天` | 成功;`manual_complete_flag=1` | | ZCZX-BTXM-API-013 | 新增 | 已完成缺实际日 | 接口测试 | Postman | 异常 | 已登录 | `execStatus=3` 无 actualEndDate | 失败 | | ZCZX-BTXM-API-014 | 新增 | 项目名/金额非法 | 接口测试 | Postman | 校验 | 已登录 | 名空/金额 0/预计<开始 | 分别失败 | | ZCZX-BTXM-API-015 | 详情 | 有效 id | 接口测试 | Postman | §5.5 | 已登录 | `GET .../subsidyProject/{id}` | 含状态、封面、审计字段 | | ZCZX-BTXM-API-016 | 详情 | 无效 id | 接口测试 | Postman | 异常 | 已登录 | 不存在 id | 404 或业务失败 | | ZCZX-BTXM-API-017 | 修改 | 合法修改 | 接口测试 | Postman | §5.3 | 已登录 | `PUT` 改投资金额 | 成功;详情已更新 | | ZCZX-BTXM-API-018 | 修改 | 已完成锁定不降级 | 接口测试 | Postman | §2.2 | 记录 flag=1、status=3 | 改预计完成为未来,`PUT` | `execStatus` 仍为 3 | | ZCZX-BTXM-API-019 | 修改 | 改状态清锁定 | 接口测试 | Postman | 可选规则 | flag=1 记录 | `execStatus` 改为 2 保存 | `manual_complete_flag=0`;重新可推算 | | ZCZX-BTXM-API-020 | 修改 | 替换封面 | 接口测试 | Postman | §5.3 | 有旧封面 | `PUT` 换新 cover | 成功;旧文件不可访问(抽查) | | ZCZX-BTXM-API-021 | 删除 | 单条删除 | 接口测试 | Postman | §5.4 | 已登录 | `DELETE .../{id}` | 成功;详情 404 | | ZCZX-BTXM-API-022 | 删除 | 批量删除 | 接口测试 | Postman | 批量 | 已登录 | `DELETE id1,id2` | 均不可查 | | ZCZX-BTXM-API-023 | 端到端 | CRUD+状态 | 接口测试 | Postman | §4 | 已登录 | 新增(进行中)→列表→详情→改→删 | 状态与矩阵一致 | | ZCZX-BTXM-API-024 | 鉴权 | 未登录 | 接口测试 | curl | 安全 | 无 Token | `GET list` | 401 或统一未登录 | | ZCZX-BTXM-API-025 | 权限 | 无写权限 | 接口测试 | Postman | 越权 | 仅 list | `POST` | 无权限失败 | | ZCZX-BTXM-API-026 | 响应 | 失败可读 | 接口测试 | Postman | §7 | 已登录 | 触发计划日倒置等 | `code`+可区分 `msg` | --- ## 三、界面测试用例(UI) **测试工具**:**Playwright** + **Chromium**(`channel: 'chrome'`)。 | 用例编号 | 测试模块 | 测试项 | 测试类型 | 测试工具 | 测试目的 | 前置条件 | 测试步骤 | 预期结果 | | --- | --- | --- | --- | --- | --- | --- | --- | --- | | ZCZX-BTXM-UI-001 | 列表 | 默认分页排序 | UI 测试 | Playwright+Chrome | §5.2 | 已登录;数据>20 | 进入「项目与补贴-项目」 | 每页 20;开始日新在前 | | ZCZX-BTXM-UI-002 | 列表 | 关键字查询 | UI 测试 | Playwright+Chrome | 模糊 | 有样本 | 输入 keyword→查询 | 命中名称或简介 | | ZCZX-BTXM-UI-003 | 列表 | 执行状态筛选 | UI 测试 | Playwright+Chrome | 精确 | 多状态数据 | 选「进行中」→查询 | 状态列均为进行中 | | ZCZX-BTXM-UI-004 | 列表 | 开始日范围 | UI 测试 | Playwright+Chrome | 闭区间 | 已知样本 | 选 start/end→查询 | 仅区间内 | | ZCZX-BTXM-UI-005 | 列表 | 区间非法提示 | UI 测试 | Playwright+Chrome | 异常 | 已登录 | start>end→查询 | Message 提示;不刷新错误数据 | | ZCZX-BTXM-UI-006 | 列表 | 重置条件 | UI 测试 | Playwright+Chrome | 恢复 | 已筛选 | 重置 | 条件清空 | | ZCZX-BTXM-UI-007 | 新增 | 合法提交含封面 | UI 测试 | Playwright+Chrome | §5.1 | 已登录 | 填必填+上传 jpg→保存 | 成功;列表可见 | | ZCZX-BTXM-UI-008 | 新增 | 简介选填 | UI 测试 | Playwright+Chrome | 选填 | 已登录 | 简介空、无封面,其余合法→保存 | 成功 | | ZCZX-BTXM-UI-009 | 新增 | 名称/金额非法 | UI 测试 | Playwright+Chrome | 校验 | 已登录 | 名空或金额 0→提交 | 校验失败 | | ZCZX-BTXM-UI-010 | 新增 | 预计早于开始 | UI 测试 | Playwright+Chrome | E≥S | 已登录 | 预计<开始→提交 | 校验失败 | | ZCZX-BTXM-UI-011 | 新增 | 手工已完成 | UI 测试 | Playwright+Chrome | §2.2 | 日期段可为进行中 | 选「已完成」→须填实际完成日→保存 | 成功;详情有实际完成日 | | ZCZX-BTXM-UI-012 | 新增 | 已完成无实际日 | UI 测试 | Playwright+Chrome | 异常 | 已登录 | 选已完成不填实际日→提交 | 校验失败 | | ZCZX-BTXM-UI-013 | 新增 | 封面非法 | UI 测试 | Playwright+Chrome | §5.1 | 准备 .bmp | 上传→提交 | 拒绝或错误提示 | | ZCZX-BTXM-UI-014 | 新增 | 保存后状态-进行中 | UI 集成 | Playwright+Chrome | T<E | 开始=昨天预计=明天 | 保存后看列表 | 显示「进行中」 | | ZCZX-BTXM-UI-014A | 新增 | 保存后状态-已完成 | UI 集成 | Playwright+Chrome | T=E | 开始=上月预计=今天 | 保存后看列表 | 显示「已完成」 | | ZCZX-BTXM-UI-014B | 新增 | 超期仍为进行中 | UI 集成 | Playwright+Chrome | T>E | 开始=上月预计=昨天 | 保存后看列表 | 显示「进行中」非已完成 | | ZCZX-BTXM-UI-015 | 详情 | 字段完整 | UI 测试 | Playwright+Chrome | §5.5 | 任意记录 | 查看 | 各字段+封面+状态齐全 | | ZCZX-BTXM-UI-016 | 修改 | 编辑成功 | UI 测试 | Playwright+Chrome | §5.3 | 有记录 | 编辑改投资金额→保存 | 列表已更新 | | ZCZX-BTXM-UI-017 | 修改 | 替换封面 | UI 测试 | Playwright+Chrome | §5.3 | 有封面 | 换图保存 | 详情为新图 | | ZCZX-BTXM-UI-018 | 修改 | 已完成锁定(可选) | UI 集成 | Playwright+Chrome | 不降级 | 已手工完成项目 | 改预计为未来→保存 | 状态仍为已完成 | | ZCZX-BTXM-UI-019 | 删除 | 单条确认删除 | UI 测试 | Playwright+Chrome | §5.4 | 有记录 | 删除→确认 | 行消失 | | ZCZX-BTXM-UI-020 | 删除 | 取消删除 | UI 测试 | Playwright+Chrome | 确认框 | 有记录 | 删除→取消 | 仍在 | | ZCZX-BTXM-UI-021 | 删除 | 批量删除 | UI 测试 | Playwright+Chrome | 批量 | 勾选多条 | 批量删→确认 | 选中均消失 | | ZCZX-BTXM-UI-022 | 删除 | 删后封面失效 | UI 测试 | Playwright+Chrome | 清文件 | 删前复制封面 URL | 删除后打开 URL | 不可访问 | | ZCZX-BTXM-UI-023 | 端到端 | CRUD 串联 | UI 集成 | Playwright+Chrome | §4 | 可新增 | 新增→查→看→改→删 | 全流程通过 | | ZCZX-BTXM-UI-024 | 权限 | 只读账号 | UI 测试 | Playwright+Chrome | §8 | 无写权限 | 登录进模块 | 无新增/编辑/删除 | | ZCZX-BTXM-UI-025 | 表单 | 选已完成显示实际日 | UI 测试 | Playwright+Chrome | 联动 | 新增弹窗 | 执行状态选「已完成」 | 「实际完成日期」表单项必填/显示 | --- ## Playwright 与谷歌浏览器(实施提示) - `playwright.config.ts`:`use: { channel: 'chrome', locale: 'zh-CN' }`;`storageState` 复用登录态。 - 路由:`page.goto('/policy/subsidyProject')`(以菜单为准)。 - 日期:准备「昨天/明天」用 `new Date()` 在脚本中格式化。 - 状态选项:`getByRole('option', { name: /进行中|未开始|已完成/ })`。 --- ## 覆盖对照 | 类别 | 单元 UT | 接口 API | 界面 UI | | --- | --- | --- | --- | | 正常流程 | UT-012~014 | API-001~012、015、017、021~023 | UI-001~008、014~017、019、023 | | 异常流程 | UT-005、008~011 | API-006、013~014、016、025~026 | UI-005、009~013、020 | | 业务约束/状态机 | UT-001~005、003A、013 | API-007、009~012、011A、018~019 | UI-011~012、014~014B、018、025 | | 封面/删除 | UT-015~017 | API-020、021~022 | UI-007、013、017、022 | --- ## 功能需求追溯(自查) | 需求章节 | 要点 | 主要对应用例 | | --- | --- | --- | | §2.2 状态推算 | T=E 完成、T>E 超期、手工锁定 | UT-001~005、003、003A、012~014;API-007、009~013、011、011A、018;UI-011~012、014~014B、018、025 | | §5.1 新增 | 字段校验、封面 | UT-006~010、017;API-008、014;UI-007~013 | | §5.2 列表 | 关键字、状态、日期区间 | API-001~006;UI-001~006 | | §5.3 修改 | 全字段、换封面、锁定 | UT-016;API-017~020;UI-016~018 | | §5.4 删除 | 删封面 | UT-015;API-021~022;UI-019~022 | | §5.5 详情 | 状态刷新展示 | API-015;UI-015 | | §6 权限 | 四操作 | API-024~025;UI-024 | | §7 错误 | code/msg | API-026 | --- ## 修订记录 | 版本 | 说明 | | --- | --- | | 1.0 | 初版:单元 17、接口 26、UI 25;含状态推算/手工锁定/封面;Playwright+Chrome;Base `/industryPolicy/subsidyProject` | | 1.1 | 同步草稿 §1.1:已完成仅 T=E;新增 UT/API/UI 超期 T>E 仍为进行中用例 | | 1.2 | 草稿 §6 发布/下架:见下表补充用例(发布状态 0/1) | ### 补充用例(草稿 §6 发布/下架) | 用例编号 | 测试模块 | 测试项 | 测试类型 | 测试工具 | 测试目的 | 前置条件 | 测试步骤 | 预期结果 | | --- | --- | --- | --- | --- | --- | --- | --- | --- | | ZCZX-BTXM-UT-018 | 状态机 | 编辑守卫 | 单元测试 | JUnit5 | 矩阵 | 无 | `canEdit(publish=0/1)` | 0→true,1→false | | ZCZX-BTXM-API-027 | 发布 | 未发布成功 | 接口测试 | Postman | §5.6 | publish=0 | `POST .../publish/{id}` | publish=1;publishTime 有值 | | ZCZX-BTXM-API-028 | 修改 | 已发布拒绝 | 接口测试 | Postman | 矩阵 | publish=1 | `PUT` | 失败;数据不变 | | ZCZX-BTXM-API-029 | 下架 | 已发布成功 | 接口测试 | Postman | §5.6 | publish=1 | `POST .../offline/{id}` | publish=0;offlineTime 有值 | | ZCZX-BTXM-UI-026 | 列表 | 发布下架按钮 | UI 测试 | Playwright+Chrome | 矩阵 | 两种状态各有数据 | 切换行看操作列 | 未发布有发布;已发布有下架 |