依据:
综合牧业知识库管理功能需求.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 语义一致 |
测试工具: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 示例配置(摘录):
// 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 预期同步 |