# 设备实施作业标准管理 — 测试用例 > 依据:`设备实施作业标准管理功能需求.md`、`设备实施作业标准管理技术方案.md` > **接口 Base Path(示例)**:`/breedingStandards/equipmentOperation`;若含 `context-path` 或网关前缀须补齐。鉴权与若依一致(Cookie / Token)。 **通用前置**:具备本模块菜单与按钮权限;正文白名单后缀:`pdf`/`md`/`doc`/`docx`/`xls`/`xlsx`/`pptx`(≤30MB);封面:`jpg`/`jpeg`/`png`(≤10MB)。`biz_information_category` 已种子化;标准类型编码:`001007` 设备操作、`001008` 设备保养、`001009` 设备排障、`001010` 设备维修(`parentCode=001`,`categoryType=3`)。 **界面测试(UI)**:借助 **Playwright** 启动 **Chromium**(与 **Google Chrome 同源内核**,可配置 `channel: 'chrome'` 调用本机谷歌浏览器)模拟真实用户操作。 --- ## 一、单元测试用例 | 用例编号 | 测试模块 | 测试项 | 测试类型 | 测试工具 | 测试目的 | 前置条件 | 测试步骤 | 预期结果 | | --- | --- | --- | --- | --- | --- | --- | --- | --- | | SS-BZ-UT-001 | 状态机 | 合法状态组合 | 单元测试 | JUnit5 | 仅三种稳态可持久化 | 无 | 校验 `(publish_status,kb_sync_status)` 为 (0,0)(0,1)(1,1) | 均为合法;(1,0) 等其余组合拒绝 | | SS-BZ-UT-002 | 状态机 | 编辑守卫 | 单元测试 | JUnit5 | 仅未发布未同步可改 | 无 | `canEdit(0,0)` true;`(0,1)`/`(1,*)` false | 与需求矩阵一致 | | SS-BZ-UT-003 | 状态机 | 手动同步守卫 | 单元测试 | JUnit5 | 仅未发布未同步 | 无 | `canSyncKb(0,0)` true;其余 false | 与矩阵一致 | | SS-BZ-UT-004 | 状态机 | 移出守卫 | 单元测试 | JUnit5 | 仅未发布已同步 | 无 | `canRemoveKb(0,1)` true;其余 false | 与矩阵一致 | | SS-BZ-UT-005 | 状态机 | 发布守卫 | 单元测试 | JUnit5 | 仅未发布已同步 | 无 | `canPublish(0,1)` true;(0,0)(1,1) false | 与矩阵一致 | | SS-BZ-UT-006 | 状态机 | 下架守卫 | 单元测试 | JUnit5 | 仅已发布 | 无 | `canOffline(1)` true;`publish=0` false | 与矩阵一致 | | SS-BZ-UT-007 | 状态机 | 删除守卫 | 单元测试 | JUnit5 | 已发布禁删;未同步可删 | 无 | `canDelete` 与 §4.4 一致;(0,1) 与「先移出或联动删库」实现一致 | 无越权删除路径 | | SS-BZ-UT-008 | 参数校验 | 标准名称长度 | 单元测试 | JUnit5 | 1~20 字 | 无 | 空、单字、2 字、20 字、21 字调用校验 | 空与 21 字失败;1~20 字通过 | | SS-BZ-UT-009 | 参数校验 | 简介字数 | 单元测试 | JUnit5 | 选填 ≤50 | 无 | null/空通过;51 字失败 | 符合需求 | | SS-BZ-UT-010 | 参数校验 | 标准类型 | 单元测试 | JUnit5 | 须为有效资讯编码 | Mock 类别子集含 001007~001010 | 传入空、`999999`、未在集合内的编码 | 失败;合法编码通过 | | SS-BZ-UT-011 | 附件校验 | 正文后缀 | 单元测试 | JUnit5 | 白名单 | 无 | `a.pdf`、`readme.md`、`slides.pptx` 通过;`.ppt`、`.exe` 拒绝 | 与需求一致 | | SS-BZ-UT-012 | 附件校验 | 封面后缀 | 单元测试 | JUnit5 | 白名单 | 无 | `.jpg` 通过;`.bmp` 拒绝 | 与需求一致 | | SS-BZ-UT-013 | Service | 更新已发布 | 单元测试 | JUnit5+Mockito | 禁止修改 | Mock `publish=1` | 调用 `update` | 业务失败;不写库 | | SS-BZ-UT-014 | Service | 同步成功 | 单元测试 | JUnit5+Mockito | 翻转 kb | Mock KB 成功 | `syncKb(id)` | `kb_sync_status=1`;`kb_doc_id` 非空 | | SS-BZ-UT-015 | Service | 同步失败 | 单元测试 | JUnit5+Mockito | 状态不翻转 | Mock KB 失败 | `syncKb(id)` | 仍为未同步 | | SS-BZ-UT-016 | Service | 已同步修改拒绝 | 单元测试 | JUnit5+Mockito | §4.3 | Mock `publish=0,kb=1` | `update` | 抛业务异常;无脏数据 | | SS-BZ-UT-017 | Service | 下架成功 | 单元测试 | JUnit5+Mockito | 回流语义 | Mock KB 下架成功 | `offline(id)` | `publish=0`;`kb=1`;保留 `kb_doc_id` | | SS-BZ-UT-018 | Service | 移出成功 | 单元测试 | JUnit5+Mockito | 置未同步 | Mock KB 删除成功 | `removeKb(id)` | `kb=0`;清空 `kb_doc_id` | | SS-BZ-UT-019 | Service | 发布成功 | 单元测试 | JUnit5+Mockito | 上架 | Mock KB(若发布需通知) | `publish(id)` | `publish=1` | | SS-BZ-UT-020 | Service | 未同步保存不调 KB | 单元测试 | JUnit5+Mockito | §4.3 仅本地 | `publish=0,kb=0` | `update` 成功路径 | Mock 验证 **未调用** 知识库更新接口 | --- ## 二、接口测试用例 | 用例编号 | 测试模块 | 测试项 | 测试类型 | 测试工具 | 测试目的 | 前置条件 | 测试步骤 | 预期结果 | | --- | --- | --- | --- | --- | --- | --- | --- | --- | | SS-BZ-API-001 | 列表 | 默认分页排序 | 接口测试 | Postman/curl | 默认 pageSize 与倒序 | 已登录;有数据 | `GET /equipment/workStandard/list` | `rows`≤默认 pageSize(20);按创建时间倒序 | | SS-BZ-API-002 | 列表 | 关键字 OR | 接口测试 | Postman | 名称/简介模糊 | 已登录 | `keyword=` 唯一词 | 命中名称或简介 | | SS-BZ-API-003 | 列表 | 类型筛选 | 接口测试 | Postman | 精确匹配 | 已登录 | `standardType=001007`(或 001008/001009/001010) | 返回均为对应编码 | | SS-BZ-API-004 | 列表 | 组合查询 | 接口测试 | Postman | 与关系 | 已登录 | keyword+standardType | 同时满足 | | SS-BZ-API-005 | 新增 | 合法提交 | 接口测试 | Postman/Swagger | 正常新增 | 已登录;`/common/upload` 取 url/path/name | `POST /equipment/workStandard` | `code` 成功;publish=0,kb=0 | | SS-BZ-API-006 | 新增 | 名称非法 | 接口测试 | Postman | 异常:长度 | 已登录 | 名称缺失或超过 20 字 | 失败;无新记录 | | SS-BZ-API-007 | 新增 | 类型非法 | 接口测试 | Postman | 异常:编码 | 已登录 | standardType=999999 | 失败;提示含「标准类型无效」 | | SS-BZ-API-008 | 新增 | 简介超长 | 接口测试 | Postman | 异常:≤50 | 已登录 | introduction 超长 | 失败 | | SS-BZ-API-009 | 详情 | 有效 id | 接口测试 | Postman | 字段完整 | 已登录 | `GET /equipment/workStandard/{id}` | 含 contentFileName、双维状态 | | SS-BZ-API-010 | 详情 | 无效 id | 接口测试 | Postman | 异常 | 已登录 | 不存在 id | 404 或业务失败 | | SS-BZ-API-011 | 修改 | 未发布成功 | 接口测试 | Postman | 正常 | 已登录;publish=0 | `PUT /equipment/workStandard` | 成功 | | SS-BZ-API-012 | 修改 | 已发布拒绝 | 接口测试 | Postman | 业务约束 | 已登录;publish=1 | `PUT` | 失败;数据不变 | | SS-BZ-API-013 | 删除 | 未同步 | 接口测试 | Postman | 允许删 | 已登录;kb=0 | `DELETE /equipment/workStandard/{ids}` | 成功 | | SS-BZ-API-014 | 删除 | 已发布 | 接口测试 | Postman | 禁止 | 已登录;publish=1 | `DELETE` | 失败 | | SS-BZ-API-015 | 删除 | 未发布已同步 | 接口测试 | Postman | §4.4 | 已登录;0+1 | `DELETE`(视实现) | 失败提示先移出,或联动删库成功且无孤儿 | | SS-BZ-API-016 | 同步 | 首次同步 | 接口测试 | Postman | 正常 | 已登录;0+0 | `POST /equipment/workStandard/syncKb/{id}` | kb=1 | | SS-BZ-API-017 | 同步 | 重复同步 | 接口测试 | Postman | 约束 | 已登录;0+1 | `POST .../syncKb/{id}` | 失败 | | SS-BZ-API-018 | 移出 | 成功 | 接口测试 | Postman | 正常 | 已登录;0+1 | `POST /equipment/workStandard/removeKb/{id}` | kb=0 | | SS-BZ-API-019 | 发布 | 成功 | 接口测试 | Postman | 正常 | 已登录;0+1 | `POST /equipment/workStandard/publish/{id}` | publish=1 | | SS-BZ-API-020 | 发布 | 未同步 | 接口测试 | Postman | 约束 | 已登录;0+0 | `POST .../publish/{id}` | 失败 | | SS-BZ-API-021 | 下架 | 成功 | 接口测试 | Postman | 回流 | 已登录;publish=1 | `POST /equipment/workStandard/offline/{id}` | publish=0;kb=1 | | SS-BZ-API-022 | 下架 | 非已发布 | 接口测试 | Postman | 约束 | 已登录;草稿 | `POST .../offline/{id}` | 失败 | | SS-BZ-API-023 | 鉴权 | 未登录 | 接口测试 | curl | 安全 | 无凭证 | `GET .../list` | 401 或跳转登录 | | SS-BZ-API-024 | 权限 | 无写权限 | 接口测试 | Postman | 越权 | 仅 list 权限 | `POST /equipment/workStandard` | 无权限失败 | | SS-BZ-API-025 | 响应结构 | 失败可读 | 接口测试 | Postman | §6 错误约定 | 已登录 | 故意触发校验失败(如名称超长) | Body 含可读 `msg`;`code` 与项目失败约定一致 | | SS-BZ-API-026 | 附件 | 超限(可选) | 接口测试 | Postman | §4.1 大小 | 准备略超 30MB 正文(环境允许) | 上传后提交或调服务端校验 | 返回明确「大小超限」类提示;不落库 | --- ## 三、界面测试用例(UI) **测试工具**:**Playwright** + **Chromium** / **`channel: 'chrome'`**(谷歌浏览器);步骤可映射 `page.goto`、`fill`、`click`、`setInputFiles`、`expect`。 | 用例编号 | 测试模块 | 测试项 | 测试类型 | 测试工具 | 测试目的 | 前置条件 | 测试步骤 | 预期结果 | | --- | --- | --- | --- | --- | --- | --- | --- | --- | | SS-BZ-UI-001 | 列表 | 默认分页排序 | UI 测试 | Playwright+Chrome/Chromium | 正常展示 | 已登录;数据>20 | 打开设备实施作业标准列表页 | 每页默认 20;创建时间新在前 | | SS-BZ-UI-002 | 列表 | 关键字-名称 | UI 测试 | Playwright+Chrome/Chromium | 正常查询 | 存在名称含关键词记录 | 输入关键字→查询 | 表格含目标行 | | SS-BZ-UI-003 | 列表 | 关键字-简介 | UI 测试 | Playwright+Chrome/Chromium | OR 逻辑 | 简介含词、名称不含 | 输入该词→查询 | 命中 | | SS-BZ-UI-004 | 列表 | 类型筛选 | UI 测试 | Playwright+Chrome/Chromium | 精确筛选 | 四类类型均有样本数据 | 选「设备排障」等某一类型→查询 | 类型列均为所选类型 | | SS-BZ-UI-005 | 列表 | 组合与重置 | UI 测试 | Playwright+Chrome/Chromium | 恢复条件 | 已筛选 | 关键字+类型→查询→重置 | 恢复默认列表 | | SS-BZ-UI-006 | 列表 | 状态与按钮 | UI 测试 | Playwright+Chrome/Chromium | 业务约束可见性 | 三种状态样本各行一条 | 检查状态标签与操作按钮 | 与矩阵一致(如同步仅 0+0) | | SS-BZ-UI-007 | 新增 | 完整合法 | UI 测试 | Playwright+Chrome/Chromium | 正常主流程 | 已登录 | 新增→名称、类型→上传正文封面→提交 | 成功;未发布未同步 | | SS-BZ-UI-008 | 新增 | 简介封面选填 | UI 测试 | Playwright+Chrome/Chromium | 选填规则 | 已登录 | 简介空、不传封面;其余合法→提交 | 成功 | | SS-BZ-UI-009 | 新增 | 名称非法 | UI 测试 | Playwright+Chrome/Chromium | 异常校验 | 已登录 | 名称空或超过 20 字→提交 | 提示失败;无新记录 | | SS-BZ-UI-010 | 新增 | 简介超长 | UI 测试 | Playwright+Chrome/Chromium | 异常校验 | 已登录 | 简介>50 字→提交 | 失败 | | SS-BZ-UI-011 | 新增 | 正文缺失/非法 | UI 测试 | Playwright+Chrome/Chromium | 异常 | 已登录 | 不上传正文或非法后缀→提交 | 失败提示 | | SS-BZ-UI-012 | 新增 | 封面非法 | UI 测试 | Playwright+Chrome/Chromium | 异常 | 已登录 | 上传非白名单图片→提交 | 失败 | | SS-BZ-UI-013 | 详情 | 字段完整 | UI 测试 | Playwright+Chrome/Chromium | 正常查看 | 任意行 | 点详情 | 名称类型简介正文文件名封面齐全 | | SS-BZ-UI-014 | 详情 | 已发布只读 | UI 测试 | Playwright+Chrome/Chromium | 约束 | 已发布 | 开详情 | 无保存类编辑 | | SS-BZ-UI-015 | 详情 | 下架回流只读 | UI 测试 | Playwright+Chrome/Chromium | 回流语义 | 已下架数据 | 开详情 | 未发布已同步;**无**编辑入口 | | SS-BZ-UI-016 | 修改 | 未同步保存 | UI 测试 | Playwright+Chrome/Chromium | 正常 | 0+0 | 编辑→保存 | 成功;仍为未同步 | | SS-BZ-UI-017 | 修改 | 已同步禁止修改 | UI 测试 | Playwright+Chrome/Chromium | §4.3 | 0+1 | 尝试编辑保存 | 失败提示已同步不可改 | | SS-BZ-UI-018 | 修改 | 已发布禁止 | UI 测试 | Playwright+Chrome/Chromium | 约束 | 已发布 | 尝试编辑 | 不可保存 | | SS-BZ-UI-019 | 知识库 | 手动同步 | UI 集成 | Playwright+Chrome/Chromium | 首次入库 | 0+0 | 点同步→确认 | 变已同步 | | SS-BZ-UI-020 | 知识库 | 已同步无同步钮 | UI 测试 | Playwright+Chrome/Chromium | 矩阵 | 0+1 | 查看操作区 | 无可用「同步」 | | SS-BZ-UI-021 | 知识库 | 已发布无同步 | UI 测试 | Playwright+Chrome/Chromium | 矩阵 | 已发布 | 查看操作区 | 无同步 | | SS-BZ-UI-022 | 知识库 | 移出 | UI 集成 | Playwright+Chrome/Chromium | 正常 | 0+1 | 移出→确认 | 变未同步 | | SS-BZ-UI-023 | 知识库 | 同步失败 | UI 测试 | Playwright+Chrome/Chromium | 异常 | KB 不可用;0+0 | 点同步 | 失败提示;仍为未同步 | | SS-BZ-UI-024 | 发布下架 | 发布 | UI 测试 | Playwright+Chrome/Chromium | 正常 | 0+1 | 发布→确认 | 已发布 | | SS-BZ-UI-025 | 发布下架 | 未同步禁发 | UI 测试 | Playwright+Chrome/Chromium | 约束 | 0+0 | 尝试发布 | 不可用或提示 | | SS-BZ-UI-026 | 发布下架 | 下架再发布 | UI 集成 | Playwright+Chrome/Chromium | 闭环 | 已发布 | 下架→再发布 | 先未发布已同步;再已发布 | | SS-BZ-UI-027 | 删除 | 未同步 | UI 测试 | Playwright+Chrome/Chromium | 正常 | 0+0 | 删除→确认 | 行消失 | | SS-BZ-UI-028 | 删除 | 已发布禁删 | UI 测试 | Playwright+Chrome/Chromium | 约束 | 已发布 | 尝试删除 | 不可删或提示下架 | | SS-BZ-UI-029 | 删除 | 已同步须移出 | UI 测试 | Playwright+Chrome/Chromium | §4.4 | 0+1 | 直接删失败则移出再删 | 最终成功;KB 无残留 | | SS-BZ-UI-030 | 附件 | 删除后不可下载 | UI 测试 | Playwright+Chrome/Chromium | 清理 | 删除前复制下载链 | 删除后再访问链接 | 不可访问 | | SS-BZ-UI-031 | 端到端 | 全链路 | UI 集成 | Playwright+Chrome/Chromium | 状态机串联 | 可新建 | 新增→同步→改→发布→下架→改→再发布→下架→移出→删 | 各步状态符合矩阵 | | SS-BZ-UI-032 | 权限 | 只读账号 | UI 测试 | Playwright+Chrome/Chromium | 越权 | 无写权限 | 登录后进模块 | 无新增/编辑或拒绝 | | SS-BZ-UI-033 | 类型 | 四类编码 | UI 测试 | Playwright+Chrome/Chromium | 覆盖 001007~001010 | 已登录 | 下拉选项来自资讯类别接口;各类型筛选 | 展示名与资讯类别一致;筛选精确 | | SS-BZ-UI-034 | 新增 | 名称过长 | UI 测试 | Playwright+Chrome/Chromium | §4.1 上限 | 已登录 | 名称 21 字(或超上限)→提交 | 校验失败;无新记录 | | SS-BZ-UI-035 | 列表/操作 | 已发布无移出 | UI 测试 | Playwright+Chrome/Chromium | §4.7 前置 | 已发布行 | 查看操作区 | 无「移出知识库」(须先下架) | | SS-BZ-UI-036 | 修改 | 替换正文与封面 | UI 测试 | Playwright+Chrome/Chromium | 替换附件 | 未发布任意状态 | 编辑→更换正文与封面→保存 | 成功;新文件名展示;旧链接失效 | | SS-BZ-UI-037 | 修改 | 未同步保存 | UI 测试 | Playwright+Chrome/Chromium | §4.3 不自动推库 | 0+0;KB 可观测 | 修改保存 | 业务成功;KB 无新增/更新 | | SS-BZ-UI-038 | 发布下架 | 下架失败提示 | UI 测试 | Playwright+Chrome/Chromium | 异常可重试 | 已发布;KB 不可用 | 点下架→确认 | 失败提示;仍为已发布;恢复后可重试 | --- ## Playwright 与谷歌浏览器 - 安装:`npm i -D @playwright/test`;`npx playwright install chromium` 或配合 `channel: 'chrome'`。 - 配置:`use: { channel: 'chrome', headless: false }` 使用本机 Google Chrome 窗口回放。 - 登录:推荐 `storageState` 复用会话。 --- ## 覆盖对照 | 类别 | 单元 UT | 接口 API | 界面 UI | | --- | --- | --- | --- | | 正常流程 | 014~019 | 001~005、009、011、013、016、018~019、021 | 001~008、013~017、019、022、024、026~027、031、033、036 | | 异常流程 | 008~012、015~016 | 006~008、010、012、014~015、017、020、022~026 | 009~012、023、025、028~030、034、038 | | 业务约束/矩阵 | 001~007、020 | 012、014~022、025 | 006、014~015、018、020~021、025~029、032、035、037 | --- ## 功能需求覆盖自查(追溯) | 需求章节 | 要点 | 主要对应用例 | | --- | --- | --- | | §4.1 新增 | 字段、初始状态 | UT-008~012;API-005~008、026;UI-007~012、034 | | §4.2 列表 | 关键字、类型、分页、状态列 | API-001~004;UI-001~006 | | §4.3 修改 | 推库与不推库 | UT-013、016、020;API-011~012;UI-016~018、037 | | §4.4 删除 | 文件与 KB | UT-007;API-013~015;UI-027~030 | | §4.5 详情 | 只读/回流 | API-009~010;UI-013~015 | | §4.6~4.8 | 同步、移出、发布下架 | UT-003~006、014~019;API-016~022;UI-019~026、038 | | §5 矩阵 | 操作可用性 | UT-001~007;UI-006、031 | | §6 错误约定 | msg 可读 | API-025 | **说明**:§7 非功能未逐条展开;§4.1 名称唯一若未定需补用例。 --- ## 修订记录 | 日期 | 说明 | | --- | --- | | — | 初稿:对齐功能需求与技术方案;SS-BZ 编号;四类标准类型 | | — | **标准名称**校验由 3~20 调整为 **1~20** 字:同步 SS-BZ-UT-008、API-006/025、UI-009 等步骤与预期 | | 2026-05-20 | **标准类型**由数字枚举改为资讯类别编码(`varchar`);同步 UT-010、API-003/007、UI-033 及通用前置 | | 2026-05-20 | 正文白名单调整为 `pdf/md/doc/docx/xls/xlsx/pptx`(不含 `ppt`);**SS-BZ-UT-011** 补充 `md`、`pptx` 通过及 `.ppt` 拒绝 |