# 交易市场管理 — 测试用例 > 依据:`交易市场管理功能需求.md`、`交易市场管理技术方案.md` > **接口 Base Path**:`/livestock/tradeMarkets`;鉴权与若依一致(Cookie / Token)。 **通用前置(无特殊说明)**:具备本模块权限的账号已登录(`livestock:tradeMarket:list|query|add|edit|remove`)。`biz_trade_market` 宜预置(`del_flag=0`): | 样本 | 名称 | 运营状态 | 要点 | | --- | --- | --- | --- | | **M1** | 巴青县交易市场 | 正常(1) | 有照片;负责人「王五」 | | **M2** | 那曲集散市场 | 停业(2) | 无照片 | | **M3** | 测试注销市场 | 注销(3) | 名称模糊/状态筛选用 | **合法新增 Body 示例**:`marketName=巴青东站`,`detailAddress=西藏那曲市巴青县某某路88号`,`personInCharge=赵六`,`contactPhone=13900139000`,`operateStatus=1`;照片先 `POST /common/upload` 再带 `photoFileUrl`、`photoFilePath`。 **界面(UI)测试**:**Playwright** + **Chromium**(`channel: 'chrome'` 使用本机 **Google Chrome**)。 --- ## 一、单元测试用例 | 用例编号 | 测试模块 | 测试项 | 测试类型 | 测试工具 | 测试目的 | 前置条件 | 测试步骤 | 预期结果 | | --- | --- | --- | --- | --- | --- | --- | --- | --- | | ZCZX-JYSCGL-UT-001 | 参数校验 | 市场名称 | 单元测试 | JUnit5 | §3.5 | 无 | 空、11 字、10 字 trim | 空/超长失败;合法通过 | | ZCZX-JYSCGL-UT-002 | 参数校验 | 详细地址 | 单元测试 | JUnit5 | §3.5 | 无 | 空、201 字、200 字 | 空/超长失败;200 通过 | | ZCZX-JYSCGL-UT-003 | 参数校验 | 负责人 | 单元测试 | JUnit5 | §3.5 | 无 | 空、11 字、10 字 | 空/超长失败;通过 | | ZCZX-JYSCGL-UT-004 | 参数校验 | 手机号 | 单元测试 | JUnit5 | §3.5 | 无 | 10 位、11 位合法、非法 | 非法失败;合法通过 | | ZCZX-JYSCGL-UT-005 | 参数校验 | 运营状态 | 单元测试 | JUnit5 | §2.3 | 无 | 0、4、1/2/3 | 非法失败;1~3 通过 | | ZCZX-JYSCGL-UT-006 | 唯一性 | 名称重复 | 单元测试 | JUnit5+Mockito | §3.5 | 已有 M1 名 | `validateUniqueName` | 失败 | | ZCZX-JYSCGL-UT-007 | 参数校验 | 照片成对 | 单元测试 | JUnit5 | §3.4 | 无 | 仅 url 无 path、均空、均填 | 仅 url 失败;均空/成对通过 | | ZCZX-JYSCGL-UT-008 | Service | 新增落库 | 单元测试 | JUnit5+Mockito | 正常 | Mock Mapper | `insert` 合法行 | `del_flag=0`;`operate_status=1` 默认 | | ZCZX-JYSCGL-UT-009 | Service | 逻辑删除 | 单元测试 | JUnit5+Mockito | §3.5 | Mock | `remove(id)` | `del_flag=2` | | ZCZX-JYSCGL-UT-010 | Service | 删除有关联 | 单元测试 | JUnit5+Mockito | §3.5 | `hasReference=true` | `remove` | 抛 `ServiceException` | | ZCZX-JYSCGL-UT-011 | Service | 删记录清照片 | 单元测试 | JUnit5+Mockito | §3.4 | 有 photo_path | `remove` | 调用文件删除 | | ZCZX-JYSCGL-UT-012 | Mapper | 名称模糊 SQL | 单元测试 | JUnit5 | §3.6 | 无 | 检查 XML | `market_name LIKE CONCAT('%',…,'%')` | | ZCZX-JYSCGL-UT-013 | Mapper | 状态精确 SQL | 单元测试 | JUnit5 | §3.6 | 无 | 检查 XML | `operate_status = #{operateStatus}` | | ZCZX-JYSCGL-UT-014 | Mapper | 列表排序 | 单元测试 | JUnit5 | §3.1 | 无 | 检查 XML | `create_time DESC, id DESC` | --- ## 二、接口测试用例 | 用例编号 | 测试模块 | 测试项 | 测试类型 | 测试工具 | 测试目的 | 前置条件 | 测试步骤 | 预期结果 | | --- | --- | --- | --- | --- | --- | --- | --- | --- | | ZCZX-JYSCGL-API-001 | 列表 | 默认分页排序 | 接口测试 | Postman | §3.1 | 有 M1~M3 | `GET /list` | `code=200`;含 `operateStatusName`;时间倒序 | | ZCZX-JYSCGL-API-002 | 列表 | 名称模糊 | 接口测试 | Postman | §2.6 | 有 M1 | `marketName=交易` | 含 M1 | | ZCZX-JYSCGL-API-003 | 列表 | 状态精确 | 接口测试 | Postman | §2.6 | 有 M2 停业 | `operateStatus=2` | 仅含停业行 | | ZCZX-JYSCGL-API-004 | 列表 | 组合筛选 | 接口测试 | Postman | §2.6 | 已登录 | `marketName=测试`+`operateStatus=3` | 同时满足 | | ZCZX-JYSCGL-API-005 | 列表 | 模糊无匹配 | 接口测试 | Postman | §2.6 | 已登录 | `marketName=不存在xyz` | `rows` 为空 | | ZCZX-JYSCGL-API-006 | 列表 | 不含已删除 | 接口测试 | Postman | 逻辑删除 | id 已删 | `GET /list` | 无该 id | | ZCZX-JYSCGL-API-007 | 新增 | 完整含照片 | 接口测试 | Postman | §5.1 | 已上传图片 | `POST` 合法 Body+照片字段 | `code=200` | | ZCZX-JYSCGL-API-008 | 新增 | 无照片默认正常 | 接口测试 | Postman | §5.1 | 已登录 | `POST` 无照片字段 | 成功;`operateStatus=1` | | ZCZX-JYSCGL-API-009 | 新增 | 缺必填 | 接口测试 | Postman | §5.1.4 | 已登录 | 缺 `marketName` 或手机 | 失败 | | ZCZX-JYSCGL-API-010 | 新增 | 名称超长 | 接口测试 | Postman | §5.1 | 已登录 | `marketName` 11 字 | 失败 | | ZCZX-JYSCGL-API-011 | 新增 | 名称重复 | 接口测试 | Postman | §5.1.4 | 已有 M1 名 | `POST` 同名 | 失败;msg 含「市场名称已存在」 | | ZCZX-JYSCGL-API-012 | 新增 | 手机号非法 | 接口测试 | Postman | §2.4 | 已登录 | `contactPhone=123` | 失败 | | ZCZX-JYSCGL-API-013 | 新增 | 状态非法 | 接口测试 | Postman | §3.5 | 已登录 | `operateStatus=9` | 失败 | | ZCZX-JYSCGL-API-014 | 新增 | 地址超长 | 接口测试 | Postman | §5.1 | 已登录 | `detailAddress` 201 字 | 失败 | | ZCZX-JYSCGL-API-015 | 详情 | 有效 id | 接口测试 | Postman | §5.4 | 有 M1 | `GET /{id}` | 含全字段及照片 URL | | ZCZX-JYSCGL-API-016 | 详情 | 无效/已删 id | 接口测试 | Postman | 异常 | 已登录 | 不存在/已删 | 失败或空 `data` | | ZCZX-JYSCGL-API-017 | 修改 | 改地址负责人 | 接口测试 | Postman | §5.3 | 有 M2 | `PUT` 改 `detailAddress` | 成功 | | ZCZX-JYSCGL-API-018 | 修改 | 改运营状态 | 接口测试 | Postman | §5.3 | M1 正常 | `PUT` `operateStatus=2` | 详情为停业 | | ZCZX-JYSCGL-API-019 | 修改 | 换照片 | 接口测试 | Postman | §3.4 | M2 无图 | `PUT` 新 url/path | 成功;旧文件已删 | | ZCZX-JYSCGL-API-020 | 修改 | 清除照片 | 接口测试 | Postman | §5.3 | M1 有图 | `PUT` 照片字段空 | 成功;详情无图 | | ZCZX-JYSCGL-API-021 | 修改 | 不存在 id | 接口测试 | Postman | 异常 | 已登录 | 伪造 id `PUT` | 失败 | | ZCZX-JYSCGL-API-022 | 删除 | 单条逻辑删 | 接口测试 | Postman | §5.5 | 无关联新行 | `DELETE /{id}` | 成功;列表无 | | ZCZX-JYSCGL-API-023 | 删除 | 有关联拒绝 | 接口测试 | Postman | §5.5 | 预置有关联 | `DELETE` | 失败;msg 含关联提示 | | ZCZX-JYSCGL-API-024 | 删除 | 重复删除 | 接口测试 | Postman | 幂等 | 已删 id | 再次 `DELETE` | 失败或不存在 | | ZCZX-JYSCGL-API-025 | 端到端 | CRUD 串联 | 接口测试 | Postman | §4 | 已登录 | `POST`→`list`→`GET`→`PUT`→`DELETE` | 每步 `code=200` | | ZCZX-JYSCGL-API-026 | 鉴权 | 未登录 | 接口测试 | curl | 安全 | 无 Token | `GET /list` | 401 或统一未登录 | | ZCZX-JYSCGL-API-027 | 权限 | 无新增权限 | 接口测试 | Postman | §6 | 仅 list | `POST` | 无权限失败 | | ZCZX-JYSCGL-API-028 | 权限 | 无删除权限 | 接口测试 | Postman | §6 | 无 remove | `DELETE` | 无权限失败 | | ZCZX-JYSCGL-API-029 | 响应 | 失败可读 | 接口测试 | Postman | §8 | 已登录 | 触发重复名、手机错、缺地址 | `msg` 可区分 | --- ## 三、界面测试用例(UI) **测试工具**:**Playwright** + **Chromium**(`channel: 'chrome'` 使用本机 **Google Chrome**)。 | 用例编号 | 测试模块 | 测试项 | 测试类型 | 测试工具 | 测试目的 | 前置条件 | 测试步骤 | 预期结果 | | --- | --- | --- | --- | --- | --- | --- | --- | --- | | ZCZX-JYSCGL-UI-001 | 列表 | 默认展示 | UI 测试 | Playwright+Chrome | §5.2.3 | 已登录;有数据 | 进入「交易市场管理」 | 含名称、地址、负责人、电话、状态、操作;**无**地图标点 | | ZCZX-JYSCGL-UI-002 | 列表 | 名称模糊筛选 | UI 测试 | Playwright+Chrome | §2.6 | 有 M1 | 市场名称填「交易」→搜索 | 含 M1 | | ZCZX-JYSCGL-UI-003 | 列表 | 状态筛选 | UI 测试 | Playwright+Chrome | §2.6 | 有 M2 停业 | 运营状态选「停业」→搜索 | 仅停业行 | | ZCZX-JYSCGL-UI-004 | 列表 | 重置 | UI 测试 | Playwright+Chrome | §5.2 | 已筛选 | 搜索→重置 | 条件清空;列表恢复 | | ZCZX-JYSCGL-UI-005 | 新增 | 必填与默认状态 | UI 测试 | Playwright+Chrome | §5.1 | 有 add | 新增→填必填→确定 | 成功;运营状态默认「正常」 | | ZCZX-JYSCGL-UI-006 | 新增 | 上传照片 | UI 测试 | Playwright+Chrome | §2.3 | 有合法 jpg≤10M | 新增→上传照片→保存 | 列表/详情可见图 | | ZCZX-JYSCGL-UI-007 | 新增 | 缺必填校验 | UI 测试 | Playwright+Chrome | §5.1.4 | 新增 | 留空名称或手机→确定 | 校验失败;弹窗不关闭 | | ZCZX-JYSCGL-UI-008 | 新增 | 名称超 10 字 | UI 测试 | Playwright+Chrome | §5.1 | 新增 | 名称超 10 字 | 无法输入或保存失败 | | ZCZX-JYSCGL-UI-009 | 新增 | 取消 | UI 测试 | Playwright+Chrome | §5.1.3 | 新增 | 填一半→取消 | 无新行 | | ZCZX-JYSCGL-UI-010 | 新增 | 照片格式/大小 | UI 测试 | Playwright+Chrome | §2.3 | 新增 | 选非 jpg/png 或 >10M 文件 | 即时提示;不上传 | | ZCZX-JYSCGL-UI-011 | 详情 | 只读含照片 | UI 测试 | Playwright+Chrome | §5.4 | 有 M1 | 查看 | 只读;照片可预览;含审计 | | ZCZX-JYSCGL-UI-012 | 编辑 | 改运营状态 | UI 测试 | Playwright+Chrome | §5.3 | M1 正常 | 改「停业」→保存 | 列表显示停业 | | ZCZX-JYSCGL-UI-013 | 编辑 | 更换照片 | UI 测试 | Playwright+Chrome | §5.3 | 有图市场 | 编辑→换图→保存 | 详情为新图 | | ZCZX-JYSCGL-UI-014 | 删除 | 确认删除 | UI 测试 | Playwright+Chrome | §5.5 | 无关联行 | 删除→确认(含市场名) | 行消失 | | ZCZX-JYSCGL-UI-015 | 删除 | 取消删除 | UI 测试 | Playwright+Chrome | §5.5 | 任意行 | 删除→取消 | 行仍在 | | ZCZX-JYSCGL-UI-016 | 端到端 | 全流程 | UI 集成 | Playwright+Chrome | §4 | 权限齐备 | 新增→名/状态筛选→看→改→删 | 无报错 | | ZCZX-JYSCGL-UI-017 | 权限 | 只读角色 | UI 测试 | Playwright+Chrome | §6 | 仅 list/query | 进入模块 | 无新增/编辑/删除 | | ZCZX-JYSCGL-UI-018 | 详情 | 从详情编辑 | UI 测试 | Playwright+Chrome | §5.4 | 查看 M1 | 点「编辑」 | 进入编辑弹窗 | | ZCZX-JYSCGL-UI-019 | 列表 | 地图标点不做 | UI 测试 | Playwright+Chrome | §5.6 | 有数据行 | 查看操作列 | 无「地图标点」或置灰暂未开放 | | ZCZX-JYSCGL-UI-020 | 列表 | 电话脱敏 | UI 测试 | Playwright+Chrome | §5.2.3 | 有 M1 完整手机 | 查看列表电话列 | 按项目规范脱敏(如 138****8000) | --- ## Playwright 与谷歌浏览器(实施提示) - 安装:`npm i -D @playwright/test`;`npx playwright install chrome`。 - 配置:`use: { channel: 'chrome', locale: 'zh-CN', baseURL: 'http://localhost:80' }`;`storageState` 复用登录态。 - 路由:`page.goto('/livestock/tradeMarket')`(以菜单 `component` 为准)。 - 筛选:`page.getByLabel('市场名称').fill('交易')`;`page.getByLabel('运营状态').click()` 后选「停业」。 - 上传:在新增弹窗内 `input[type=file]`,仅 `image/jpeg`、`image/png`;超 10MB 应被 `before-upload` 拦截。 --- ## 覆盖对照 | 类别 | 单元 UT | 接口 API | 界面 UI | | --- | --- | --- | --- | | 正常流程 | UT-008 | API-007~008、015、017~019、025 | UI-005~006、011~013、016 | | 异常流程 | UT-001~005 | API-009~013、014、016、021、023~024 | UI-007~010、014~015 | | 业务约束 | UT-006~007 | API-002~005、011、018 | UI-002~004、008 | | 运营状态 | UT-005 | API-003、013、018 | UI-003、005、012 | | 照片 | UT-007、011 | API-007~008、019~020 | UI-006、010~011、013 | | 逻辑删除 | UT-009 | API-006、022~024 | UI-014 | | 地图不做 | — | — | UI-001、019 | | 权限/鉴权 | — | API-026~028 | UI-017 | | 脱敏/提示 | — | API-029 | UI-020 | --- ## 功能需求追溯(自查) | 需求章节 | 要点 | 主要对应用例 | | --- | --- | --- | | §5.1 新增 | 字段、照片、默认正常 | UT-001~008;API-007~014;UI-005~010 | | §5.2 列表 | 名称模糊+状态精确 | UT-012~013;API-001~006;UI-001~004、020 | | §5.3 修改 | 全字段可改 | API-017~021;UI-012~013、018 | | §5.4 详情 | 只读 | API-015~016;UI-011、018 | | §5.5 删除 | 逻辑删、二次确认 | UT-009~011;API-022~024;UI-014~015 | | §2.2 运营状态 | 三档 | UT-005;API-003、013、018;UI-003、005、012 | | §5.6 地图 | 本期不做 | UI-001、019 | | §6 权限 | 按钮级 | API-026~028;UI-017 | | §8 业务提示 | 可读 msg | API-011、029;UI-007、010 | --- ## 修订记录 | 版本 | 说明 | | --- | --- | | 1.0 | 初版:单元 14、接口 29、UI 20;覆盖 CRUD、双维筛选、照片、运营状态;无地图标点;Playwright+Chrome;前缀 **ZCZX-JYSCGL** |