# 综合牧业知识库 — 测试用例 > 依据:`综合牧业知识库管理功能需求.md`、`综合牧业知识库技术方案.md` > **接口 Base Path**:`/techServices/knowledge`;鉴权与若依一致(Cookie / Token)。 **通用前置(无特殊说明)**:具备本模块权限的账号已登录(`techService:knowledge:list|query|add|edit|remove|syncKb|removeKb`)。`biz_livestock_knowledge` 宜预置(`del_flag=0`): | 样本 | 标题 | 主题 | 入库状态 | | --- | --- | --- | --- | | **K1** | 春季饲喂要点 | 1 饲养管理 | 未入库(`kb_sync_status=0`) | | **K2** | 口蹄疫防控手册 | 2 疫病管理 | 未入库 | | **K3** | 牧场规划范例 | 4 牧场设计 | **已入库**(`kb_sync_status=1`,`kb_doc_id` 非空) | | **K4** | 补贴政策解读2024 | 5 政策解读 | 已入库(用于移出后编辑链路) | **合法 Body 片段**:`knowledgeTitle=测试知识标题`,`knowledgeTopic=1`,`introduction=简介不超过五十字`,`contentFileUrl`/`contentFilePath`/`contentFileName` 来自 `/common/upload`(后缀 `pdf` 等白名单,≤30MB)。 **界面(UI)测试**:**Playwright** + **Chromium**(`channel: 'chrome'` 使用本机 **Google Chrome**);菜单路径以系统配置为准,示例「牧业养殖科技服务 → 综合牧业知识库」。 --- ## 一、单元测试用例 | 用例编号 | 测试模块 | 测试项 | 测试类型 | 测试工具 | 测试目的 | 前置条件 | 测试步骤 | 预期结果 | | --- | --- | --- | --- | --- | --- | --- | --- | --- | | ZCZX-ZHMYZSK-UT-001 | 参数校验 | 知识标题长度 | 单元测试 | JUnit5 | §5.2 | 无 | trim 后「」、1 字、20 字、21 字 | 空/21 失败;1~20 通过 | | ZCZX-ZHMYZSK-UT-002 | 参数校验 | 知识简介长度 | 单元测试 | JUnit5 | §5.2 | 无 | null/空串;50 字;51 字 | 空通过;51 字失败 | | ZCZX-ZHMYZSK-UT-003 | 参数校验 | 知识主题枚举 | 单元测试 | JUnit5 | §2.2 | 无 | `knowledgeTopic` 为 0、6、1~5 | 0/6 失败;1~5 通过 | | ZCZX-ZHMYZSK-UT-004 | 参数校验 | 正文后缀白名单 | 单元测试 | JUnit5 | §5.2 | 无 | `a.pdf`、`readme.md`、`slides.pptx` 通过;`.ppt`、`.exe` 失败 | 与需求一致 | | ZCZX-ZHMYZSK-UT-005 | 参数校验 | 正文必填 | 单元测试 | JUnit5 | §5.2 | 无 | 缺 `contentFileUrl`/`contentFilePath`/`contentFileName` | 失败 | | ZCZX-ZHMYZSK-UT-006 | 入库状态 | 仅 0/1 合法 | 单元测试 | JUnit5 | §2.3 | 无 | 校验 `kb_sync_status` 为 -1、2、0、1 | 仅 0、1 为业务合法值 | | ZCZX-ZHMYZSK-UT-007 | 状态规则 | 可编辑 | 单元测试 | JUnit5 | §6 | 无 | `canEdit(kb=0)`;`canEdit(kb=1)` | 仅未入库 true | | ZCZX-ZHMYZSK-UT-008 | 状态规则 | 可删除 | 单元测试 | JUnit5 | §6 | 无 | `canDelete(kb=0)`;`canDelete(kb=1)` | 仅未入库 true | | ZCZX-ZHMYZSK-UT-009 | 状态规则 | 可同步 | 单元测试 | JUnit5 | §6 | 无 | `canSyncKb(0)`;`canSyncKb(1)` | 仅未入库 true | | ZCZX-ZHMYZSK-UT-010 | 状态规则 | 可移出 | 单元测试 | JUnit5 | §6 | 无 | `canRemoveKb(1)`;`canRemoveKb(0)` | 仅已入库 true | | ZCZX-ZHMYZSK-UT-011 | Service | 新增落库默认值 | 单元测试 | JUnit5+Mockito | §5.2 | Mock Mapper insert | `insert` 合法行 | `kb_sync_status=0`;`kb_doc_id` 空;`del_flag=0` | | ZCZX-ZHMYZSK-UT-012 | Service | 已入库禁止修改 | 单元测试 | JUnit5+Mockito | §5.3 | Mock 查库 K3(kb=1) | `update` | 抛 `ServiceException`;msg 含移出提示 | | ZCZX-ZHMYZSK-UT-013 | Service | 未入库修改不推库 | 单元测试 | JUnit5+Mockito | §4.3 | Mock K1;Mock KB | `update` 成功 | 仅 Mapper update;**不**调用 `uploadFileByUrl` | | ZCZX-ZHMYZSK-UT-014 | Service | 同步成功写状态 | 单元测试 | JUnit5+Mockito | §5.6 | Mock KB 返回 `DOC-1` | `syncKb(id)` | `kb_sync_status=1`;`kb_doc_id=DOC-1` | | ZCZX-ZHMYZSK-UT-015 | Service | 同步失败不改状态 | 单元测试 | JUnit5+Mockito | §5.6 | Mock KB 抛错 | `syncKb` | 仍为 `kb_sync_status=0`;无 docId | | ZCZX-ZHMYZSK-UT-016 | Service | 重复同步拒绝 | 单元测试 | JUnit5+Mockito | §5.6 | Mock K3 | `syncKb` | 失败;msg 含「已入库」 | | ZCZX-ZHMYZSK-UT-017 | Service | 移出成功清 docId | 单元测试 | JUnit5+Mockito | §5.7 | Mock K3;Mock `deleteFile` 成功 | `removeKb` | `kb_sync_status=0`;`kb_doc_id` 空 | | ZCZX-ZHMYZSK-UT-018 | Service | 移出失败保持状态 | 单元测试 | JUnit5+Mockito | §5.7 | Mock `deleteFile` 失败 | `removeKb` | 仍为已入库;docId 保留 | | ZCZX-ZHMYZSK-UT-019 | Service | 未入库移出拒绝 | 单元测试 | JUnit5+Mockito | §5.7 | Mock K1 | `removeKb` | 失败;msg 含「仅已入库」 | | ZCZX-ZHMYZSK-UT-020 | Service | 已入库禁止删除 | 单元测试 | JUnit5+Mockito | §5.5 | Mock K3 | `removeByIds` | 失败 | | ZCZX-ZHMYZSK-UT-021 | Service | 未入库逻辑删除 | 单元测试 | JUnit5+Mockito | §5.5 | Mock K1 | `removeByIds` | `del_flag=2`;删附件方法被调用 | | ZCZX-ZHMYZSK-UT-022 | Mapper | 列表 SQL 条件 | 单元测试 | JUnit5 | §5.1 | 审阅 XML | 检查 `selectBizLivestockKnowledgeList` | `del_flag=0`;keyword 标题/简介 OR;`knowledge_topic=`;`kb_sync_status=`;`ORDER BY create_time DESC` | --- ## 二、接口测试用例 | 用例编号 | 测试模块 | 测试项 | 测试类型 | 测试工具 | 测试目的 | 前置条件 | 测试步骤 | 预期结果 | | --- | --- | --- | --- | --- | --- | --- | --- | --- | | ZCZX-ZHMYZSK-API-001 | 列表 | 默认分页排序 | 接口测试 | Postman | §5.1 | 有多条样本 | `GET /list` | `code=200`;≤20 条;`createTime` 倒序 | | ZCZX-ZHMYZSK-API-002 | 列表 | 关键字-标题 | 接口测试 | Postman | §2.5 | 有 K1 | `keyword=饲喂` | 含 K1 | | ZCZX-ZHMYZSK-API-003 | 列表 | 关键字-简介 | 接口测试 | Postman | §2.5 | K2 简介含唯一词 | `keyword=该唯一词`(标题不含) | 含 K2 | | ZCZX-ZHMYZSK-API-004 | 列表 | 主题精确筛选 | 接口测试 | Postman | §2.5 | 有主题 2 数据 | `knowledgeTopic=2` | 均为疫病管理 | | ZCZX-ZHMYZSK-API-005 | 列表 | 入库状态筛选 | 接口测试 | Postman | §2.5 | 有 K3 | `kbSyncStatus=1` | 仅已入库 | | ZCZX-ZHMYZSK-API-006 | 列表 | 组合筛选 | 接口测试 | Postman | §2.5 | 有匹配数据 | `keyword`+`knowledgeTopic`+`kbSyncStatus` | 同时满足 | | ZCZX-ZHMYZSK-API-007 | 列表 | 不含已删除 | 接口测试 | Postman | §2.4 | 某 id 已 `del_flag=2` | `GET /list` | 无该 id | | ZCZX-ZHMYZSK-API-008 | 新增 | 合法提交 | 接口测试 | Postman | §5.2 | 已上传 pdf | `POST` 合法 Body | `code=200`;`kbSyncStatus=0` | | ZCZX-ZHMYZSK-API-009 | 新增 | 标题空/超长 | 接口测试 | Postman | §5.2 | 已登录 | 标题 `""` 或 21 字 | 失败;不落库 | | ZCZX-ZHMYZSK-API-010 | 新增 | 主题非法 | 接口测试 | Postman | §5.2 | 已登录 | `knowledgeTopic=9` | 失败 | | ZCZX-ZHMYZSK-API-011 | 新增 | 简介超长 | 接口测试 | Postman | §5.2 | 已登录 | 简介 51 字 | 失败 | | ZCZX-ZHMYZSK-API-012 | 新增 | 缺正文附件 | 接口测试 | Postman | §5.2 | 已登录 | 缺 `contentFilePath` | 失败;msg 含上传提示 | | ZCZX-ZHMYZSK-API-013 | 详情 | 有效 id | 接口测试 | Postman | §5.4 | 有 K1 | `GET /{id}` | 含 `contentFileName`、`kbSyncStatus` | | ZCZX-ZHMYZSK-API-014 | 详情 | 不存在/已删 | 接口测试 | Postman | 异常 | 已登录 | id=999999 或已删 id | 失败或 `data` 空 | | ZCZX-ZHMYZSK-API-015 | 修改 | 未入库成功 | 接口测试 | Postman | §5.3 | 有 K1 | `PUT` 改 `introduction` | 成功;仍为未入库 | | ZCZX-ZHMYZSK-API-016 | 修改 | 已入库禁止 | 接口测试 | Postman | §5.3 | 有 K3 | `PUT` 任意合法 Body | 失败;库不变 | | ZCZX-ZHMYZSK-API-017 | 删除 | 未入库逻辑删 | 接口测试 | Postman | §5.5 | 新建未入库行 | `DELETE /{id}` | 成功;列表不可见 | | ZCZX-ZHMYZSK-API-018 | 删除 | 已入库禁止 | 接口测试 | Postman | §5.5 | 有 K3 | `DELETE /{id}` | 失败 | | ZCZX-ZHMYZSK-API-019 | 同步 | 未入库成功 | 接口测试 | Postman | §5.6 | 有 K2;KB 可用 | `POST /syncKb/{id}` | `kbSyncStatus=1`;`kbDocId` 非空 | | ZCZX-ZHMYZSK-API-020 | 同步 | 已入库拒绝 | 接口测试 | Postman | §5.6 | 有 K3 | 再次 `syncKb` | 失败;msg 含「已入库」 | | ZCZX-ZHMYZSK-API-021 | 同步 | KB 失败不改态 | 接口测试 | Postman | §5.6 | 停 KB 或 Mock 失败 | `syncKb` 未入库 id | 失败;库仍为 0 | | ZCZX-ZHMYZSK-API-022 | 移出 | 已入库成功 | 接口测试 | Postman | §5.7 | 有 K4 或 K3 | `POST /removeKb/{id}` | `kbSyncStatus=0`;`kbDocId` 空 | | ZCZX-ZHMYZSK-API-023 | 移出 | 未入库拒绝 | 接口测试 | Postman | §5.7 | 有 K1 | `removeKb` | 失败 | | ZCZX-ZHMYZSK-API-024 | 移出 | KB 失败保持态 | 接口测试 | Postman | §5.7 | KB 删除失败 | `removeKb` 已入库 id | 失败;仍为已入库 | | ZCZX-ZHMYZSK-API-025 | 端到端 | 运营主流程 | 接口测试 | Postman | §4.2 | 已登录;KB 可用 | `POST`新增→`syncKb`→`removeKb`→`PUT`改标题→`syncKb`→`DELETE` | 各步 `code=200`;最终列表无该条 | | ZCZX-ZHMYZSK-API-026 | 端到端 | 已入库维护禁忌 | 接口测试 | Postman | §4.2 | 有 K3 | 直接 `PUT`、`DELETE` | 均失败;须先移出 | | ZCZX-ZHMYZSK-API-027 | 鉴权 | 未登录 | 接口测试 | curl | 安全 | 无 Token | `GET /list` | 401 或未登录 | | ZCZX-ZHMYZSK-API-028 | 权限 | 无新增权限 | 接口测试 | Postman | §6 | 仅 list 权限账号 | `POST /` 合法 Body | 无权限失败 | | ZCZX-ZHMYZSK-API-029 | 权限 | 无 syncKb 权限 | 接口测试 | Postman | §6 | 无 syncKb | `POST /syncKb/1` | 无权限失败 | | ZCZX-ZHMYZSK-API-030 | 响应 | 失败 msg 可读 | 接口测试 | Postman | §8 | 已登录 | 触发已入库编辑、重复同步、未入库移出 | `msg` 与需求 §8 语义一致 | --- ## 三、界面测试用例(UI) **测试工具**:**Playwright** + **Chromium**(`channel: 'chrome'` 使用本机 **Google Chrome**)。 | 用例编号 | 测试模块 | 测试项 | 测试类型 | 测试工具 | 测试目的 | 前置条件 | 测试步骤 | 预期结果 | | --- | --- | --- | --- | --- | --- | --- | --- | --- | | ZCZX-ZHMYZSK-UI-001 | 列表 | 页面与列展示 | UI 测试 | Playwright+Chrome | §5.1 | 已登录;有样本 | 进入「综合牧业知识库」 | 标题「综合牧业知识列表」;列含标题、主题、简介、知识文件、入库状态、操作 | | ZCZX-ZHMYZSK-UI-002 | 列表 | 关键字筛选 | UI 测试 | Playwright+Chrome | §2.5 | 有 K1 | 关键词填「饲喂」→搜索 | 含 K1 | | ZCZX-ZHMYZSK-UI-003 | 列表 | 主题筛选 | UI 测试 | Playwright+Chrome | §2.5 | 有主题 2 数据 | 知识主题选「疫病管理」→搜索 | 仅主题 2 行 | | ZCZX-ZHMYZSK-UI-004 | 列表 | 入库状态筛选 | UI 测试 | Playwright+Chrome | §2.5 | 有 K3 | 入库状态选「已入库」→搜索 | 仅已入库行 | | ZCZX-ZHMYZSK-UI-005 | 列表 | 重置 | UI 测试 | Playwright+Chrome | §5.1 | 已设筛选 | 搜索→点「重置」 | 条件清空;列表恢复默认 | | ZCZX-ZHMYZSK-UI-006 | 新增 | 合法提交 | UI 测试 | Playwright+Chrome | §5.2 | 有 add 权限 | 新增→填标题(≤20)、选主题、简介、上传 pdf→确定 | 成功提示;列表新行「未入库」 | | ZCZX-ZHMYZSK-UI-007 | 新增 | 标题必填/超长 | UI 测试 | Playwright+Chrome | §5.2 | 打开新增弹窗 | 标题留空或 21 字→确定 | 前端校验失败;不提交 | | ZCZX-ZHMYZSK-UI-008 | 新增 | 主题必选 | UI 测试 | Playwright+Chrome | §5.2 | 打开新增 | 不选知识主题→确定 | 提示必选 | | ZCZX-ZHMYZSK-UI-009 | 新增 | 简介超长 | UI 测试 | Playwright+Chrome | §5.2 | 打开新增 | 简介输入 51 字→确定 | 校验失败 | | ZCZX-ZHMYZSK-UI-010 | 新增 | 未上传正文 | UI 测试 | Playwright+Chrome | §5.2 | 打开新增 | 填标题主题不传文件→确定 | 提示须上传知识内容 | | ZCZX-ZHMYZSK-UI-011 | 新增 | 附件格式/大小 | UI 测试 | Playwright+Chrome | §5.2 | 打开新增 | 选 `.exe` 或 >30MB(若控件可测) | 上传失败或提交前拦截 | | ZCZX-ZHMYZSK-UI-012 | 查看 | 只读详情 | UI 测试 | Playwright+Chrome | §5.4 | 任意行 | 点击查看 | 展示标题、主题、简介、文件名、入库状态;无保存按钮 | | ZCZX-ZHMYZSK-UI-013 | 操作列 | 未入库按钮集 | UI 测试 | Playwright+Chrome | §6 | K1 行 | 查看操作列 | 有查看、编辑、删除、同步知识库;无移出 | | ZCZX-ZHMYZSK-UI-014 | 操作列 | 已入库按钮集 | UI 测试 | Playwright+Chrome | §6 | K3 行 | 查看操作列 | 有查看、移出知识库;无编辑、删除、同步 | | ZCZX-ZHMYZSK-UI-015 | 编辑 | 未入库修改 | UI 测试 | Playwright+Chrome | §5.3 | K1 行 | 编辑→改简介→确定 | 列表/详情已更新;仍未入库 | | ZCZX-ZHMYZSK-UI-016 | 编辑 | 已入库无入口 | UI 测试 | Playwright+Chrome | §5.3 | K3 行 | 查找编辑入口 | 无「编辑」或点击无效 | | ZCZX-ZHMYZSK-UI-017 | 同步 | 确认与成功 | UI 测试 | Playwright+Chrome | §5.6 | K2 未入库;KB 可用 | 同步知识库→确认 | 成功提示;行变为已入库 | | ZCZX-ZHMYZSK-UI-018 | 同步 | 已入库不可再同步 | UI 测试 | Playwright+Chrome | §5.6 | K3 行 | 尝试同步(若误显) | 无按钮或提示已入库 | | ZCZX-ZHMYZSK-UI-019 | 移出 | 确认与成功 | UI 测试 | Playwright+Chrome | §5.7 | K4 已入库 | 移出知识库→确认 | 成功;行变未入库;出现编辑/删除/同步 | | ZCZX-ZHMYZSK-UI-020 | 移出 | 未入库无移出 | UI 测试 | Playwright+Chrome | §5.7 | K1 行 | 查看操作列 | 无「移出知识库」 | | ZCZX-ZHMYZSK-UI-021 | 删除 | 未入库二次确认 | UI 测试 | Playwright+Chrome | §5.5 | 新建未入库行 | 删除→确认(文案含标题) | 行从列表消失 | | ZCZX-ZHMYZSK-UI-022 | 删除 | 已入库禁止 | UI 测试 | Playwright+Chrome | §5.5 | K3 行 | 尝试删除 | 无删除或提示先移出 | | ZCZX-ZHMYZSK-UI-023 | 端到端 | 移出-改-再入库 | UI 测试 | Playwright+Chrome | §4.2 | 已入库样本 | 移出→编辑改标题→保存→同步 | 各步成功;最终已入库且标题已变 | | ZCZX-ZHMYZSK-UI-024 | 端到端 | 新增到入库 | UI 测试 | Playwright+Chrome | §4.2 | 有 add/sync 权限 | 新增完整条目→同步知识库 | 列表显示已入库 | | ZCZX-ZHMYZSK-UI-025 | 权限 | 无新增按钮 | UI 测试 | Playwright+Chrome | §6 | 仅 list 权限账号 | 进入列表 | 无「新增」或禁用 | | ZCZX-ZHMYZSK-UI-026 | 异常 | 同步失败提示 | UI 测试 | Playwright+Chrome | §5.6 | 临时停 KB 服务 | 对未入库行点同步→确认 | 失败提示含原因;仍为未入库 | | ZCZX-ZHMYZSK-UI-027 | 异常 | 移出失败提示 | UI 测试 | Playwright+Chrome | §5.7 | KB 删除接口不可用 | 对已入库行移出 | 失败提示;仍为已入库 | --- ## 四、用例统计与执行建议 | 分类 | 数量 | 工具 | | --- | --- | --- | | 单元测试 | 22 | JUnit5(+ Mockito 测 Service) | | 接口测试 | 30 | Postman / MockMvc | | 界面测试 | 27 | Playwright + Google Chrome | **MockMvc 映射**:API-001~030 可落库为 `BizLivestockKnowledgeControllerTest`;UT-011~021 为 `BizLivestockKnowledgeServiceImplTest` + `LivestockKnowledgeValidationTest`。 **Playwright 示例配置(摘录)**: ```javascript // playwright.config.js 片段 use: { channel: 'chrome', locale: 'zh-CN', baseURL: process.env.ADMIN_BASE_URL, // 如 http://localhost:80 }, ``` **优先级**:P0=API-008/015/019/022/025、UI-006/013/014/017/019/024;P1=状态拒绝类与 KB 失败类;P2=权限与边界长度。 --- ## 五、修订记录 | 版本 | 说明 | | --- | --- | | 1.0 | 初稿:覆盖入库状态机、校验、同步/移出/删改禁忌;UT 22 + API 30 + UI 27 | | 1.1 | **2026-05-20**:正文白名单 `pdf/md/doc/docx/xls/xlsx/pptx`(不含 `ppt`);**ZCZX-ZHMYZSK-UT-004** 预期同步 |