# 市场栏位管理 — 测试用例 > 依据:`市场栏位管理功能需求.md`、`市场栏位管理技术方案.md` > **接口 Base Path**:`/tradeMarket/marketStall`;鉴权与若依一致(Cookie / Token)。 **通用前置(无特殊说明)**:具备本模块权限的账号已登录(`tradeMarket:marketStall:list|query|add|edit|remove`)。`biz_market_stall` 宜预置(`del_flag=0`): | 样本 | 编号 | 备注 | 要点 | | --- | --- | --- | --- | | **S1** | `01` | A区东侧摊位 | 有备注 | | **S2** | `02` | (空) | 无备注 | | **S3** | `03` | B区临时栏 | 模糊/修改用 | **合法新增 Body**:`{"remark":"测试栏位甲"}` 或 `{}`(无备注)。 **编号分域**:隔离圈位表可同时存在 `pen_code=01`;本模块 `stall_code=01` **应允许并存**(独立序列表)。 **界面(UI)测试**:**Playwright** + **Chromium**(`channel: 'chrome'` 使用本机 **Google Chrome**)。 --- ## 一、单元测试用例 | 用例编号 | 测试模块 | 测试项 | 测试类型 | 测试工具 | 测试目的 | 前置条件 | 测试步骤 | 预期结果 | | --- | --- | --- | --- | --- | --- | --- | --- | --- | | ZCZX-SCLWGL-UT-001 | 编号生成 | 首条编号 | 单元测试 | JUnit5 | §2.4 | 本表无未删栏位 | `StallCodeGenerator.next()` | 返回 `01` | | ZCZX-SCLWGL-UT-002 | 编号生成 | 递增补零 | 单元测试 | JUnit5 | §2.4 | 本表最大 `08` | `next()` | 返回 `09` | | ZCZX-SCLWGL-UT-003 | 编号生成 | 上限拒绝 | 单元测试 | JUnit5 | §2.4 | 本表最大 `99` | `next()` | 抛异常;提示栏位编号上限 | | ZCZX-SCLWGL-UT-004 | 编号生成 | 与隔离圈位独立 | 单元测试 | JUnit5 | §1 分域 | 隔离表已有 `01` | 本表 `next()` | 仍可从本表规则生成 `01`(若本表空) | | ZCZX-SCLWGL-UT-005 | 参数校验 | 备注长度 | 单元测试 | JUnit5 | §3.4 | 无 | 51 字、50 字、空、仅空白 | 51 失败;50/空通过 | | ZCZX-SCLWGL-UT-006 | Service | 新增落库 | 单元测试 | JUnit5+Mockito | 正常 | Mock Mapper | `insert` 合法行 | `del_flag=0`;`stall_code` 非空 | | ZCZX-SCLWGL-UT-007 | Service | 修改禁改编号 | 单元测试 | JUnit5 | §3.3 | 记录 `01` | 入参 `stallCode=99` 更新 | 库仍为 `01` | | ZCZX-SCLWGL-UT-008 | Service | 逻辑删除 | 单元测试 | JUnit5+Mockito | §3.5 | Mock | `remove(id)` | `del_flag=2` | | ZCZX-SCLWGL-UT-009 | Service | 删除有关联 | 单元测试 | JUnit5+Mockito | §3.4 | `hasReference=true` | `remove` | 抛 `ServiceException` | | ZCZX-SCLWGL-UT-010 | Mapper | 模糊筛选 SQL | 单元测试 | JUnit5 | §3.6 | 无 | 检查 XML | `stall_code LIKE CONCAT('%',…,'%')`;`del_flag=0` | | ZCZX-SCLWGL-UT-011 | Mapper | 列表排序 | 单元测试 | JUnit5 | §3.1 | 无 | 检查 XML | `stall_code ASC, id ASC` | --- ## 二、接口测试用例 | 用例编号 | 测试模块 | 测试项 | 测试类型 | 测试工具 | 测试目的 | 前置条件 | 测试步骤 | 预期结果 | | --- | --- | --- | --- | --- | --- | --- | --- | --- | | ZCZX-SCLWGL-API-001 | 列表 | 默认分页排序 | 接口测试 | Postman | §3.1 | 有 S1~S3 | `GET /list` | `code=200`;≤20 条;`stallCode` 升序 | | ZCZX-SCLWGL-API-002 | 列表 | 编号模糊 | 接口测试 | Postman | §2.5 | 有 S1 `01` | `stallCode=1` | 含 S1;`stallCode=01` 亦命中 | | ZCZX-SCLWGL-API-003 | 列表 | 模糊无匹配 | 接口测试 | Postman | §2.5 | 已登录 | `stallCode=不存在xyz` | `rows` 为空 | | ZCZX-SCLWGL-API-004 | 列表 | 不含已删除 | 接口测试 | Postman | 逻辑删除 | 某 id 已删 | `GET /list` | 无该 id | | ZCZX-SCLWGL-API-005 | 新增 | 有备注 | 接口测试 | Postman | §5.1 | 已登录 | `POST` `remark=测试栏位` | `code=200`;返回 2 位 `stallCode` | | ZCZX-SCLWGL-API-006 | 新增 | 无备注 | 接口测试 | Postman | §5.1 | 已登录 | `POST` `{}` | 成功;`remark` 为空 | | ZCZX-SCLWGL-API-007 | 新增 | 备注超长 | 接口测试 | Postman | §5.1.4 | 已登录 | `remark` 51 字 | `code≠200`;`msg` 含长度 | | ZCZX-SCLWGL-API-008 | 新增 | 传编号无效 | 接口测试 | Postman | §3.3 | 已登录 | `POST` 含 `stallCode=88` | 忽略入参;按本表规则生成 | | ZCZX-SCLWGL-API-009 | 新增 | 与隔离编号并存 | 接口测试 | Postman | §7 分域 | 隔离表已有 `pen_code=01` | `POST` 本模块新增 | 本模块可得 `stallCode=01`(若本表尚无 `01`) | | ZCZX-SCLWGL-API-010 | 详情 | 有效 id | 接口测试 | Postman | §5.4 | 有 S1 | `GET /{id}` | 含 `stallCode`、`remark`、审计字段 | | ZCZX-SCLWGL-API-011 | 详情 | 无效/已删 id | 接口测试 | Postman | 异常 | 已登录 | 不存在或已删 id | 失败或 `data` 为空 | | ZCZX-SCLWGL-API-012 | 修改 | 改备注 | 接口测试 | Postman | §5.3 | 有 S2 | `PUT` 改 `remark` | 成功;`stallCode` 仍为 `02` | | ZCZX-SCLWGL-API-013 | 修改 | 传编号无效 | 接口测试 | Postman | §3.3 | 有 S1 | `PUT` `stallCode=99` | 库仍为 `01` | | ZCZX-SCLWGL-API-014 | 修改 | 不存在 id | 接口测试 | Postman | 异常 | 已登录 | 伪造 id `PUT` | 失败 | | ZCZX-SCLWGL-API-015 | 删除 | 单条逻辑删 | 接口测试 | Postman | §5.5 | 无关联新行 | `DELETE /{id}` | 成功;列表不可见 | | ZCZX-SCLWGL-API-016 | 删除 | 有关联拒绝 | 接口测试 | Postman | §5.5 | 预置 `hasReference` | `DELETE` | 失败;提示关联 | | ZCZX-SCLWGL-API-017 | 删除 | 重复删除 | 接口测试 | Postman | 幂等 | 已删 id | 再次 `DELETE` | 失败或不存在 | | ZCZX-SCLWGL-API-018 | 端到端 | CRUD 串联 | 接口测试 | Postman | §4 | 已登录 | `POST`→`list`→`GET`→`PUT`→`DELETE` | 每步 `code=200` | | ZCZX-SCLWGL-API-019 | 鉴权 | 未登录 | 接口测试 | curl | 安全 | 无 Token | `GET /list` | 401 或统一未登录 | | ZCZX-SCLWGL-API-020 | 权限 | 无新增权限 | 接口测试 | Postman | §6 | 仅 list | `POST` | 无权限失败 | | ZCZX-SCLWGL-API-021 | 权限 | 无删除权限 | 接口测试 | Postman | §6 | 无 remove | `DELETE` | 无权限失败 | | ZCZX-SCLWGL-API-022 | 响应 | 失败可读 | 接口测试 | Postman | §8 | 已登录 | 触发备注超长 | `msg` 可区分场景 | --- ## 三、界面测试用例(UI) **测试工具**:**Playwright** + **Chromium**(`channel: 'chrome'` 使用本机 **Google Chrome**)。 | 用例编号 | 测试模块 | 测试项 | 测试类型 | 测试工具 | 测试目的 | 前置条件 | 测试步骤 | 预期结果 | | --- | --- | --- | --- | --- | --- | --- | --- | --- | | ZCZX-SCLWGL-UI-001 | 列表 | 默认展示 | UI 测试 | Playwright+Chrome | §5.2.3 | 已登录;有 S1~S3 | 进入「市场栏位管理」 | 含栏位编号、备注、操作;**无**「设置隔离天数」 | | ZCZX-SCLWGL-UI-002 | 列表 | 编号模糊筛选 | UI 测试 | Playwright+Chrome | §2.5 | 有 S1 `01` | 编号填 `1`→搜索 | 列表含 S1 | | ZCZX-SCLWGL-UI-003 | 列表 | 无结果 | UI 测试 | Playwright+Chrome | §2.5 | 已登录 | 输入不存在编号→搜索 | 空列表或空状态 | | ZCZX-SCLWGL-UI-004 | 列表 | 重置 | UI 测试 | Playwright+Chrome | §5.2 | 已筛选 | 搜索→重置 | 条件清空;列表恢复 | | ZCZX-SCLWGL-UI-005 | 新增 | 有备注保存 | UI 测试 | Playwright+Chrome | §5.1 | 有 add 权限 | 新增→填备注→确定 | 成功提示;列表新行 2 位编号 | | ZCZX-SCLWGL-UI-006 | 新增 | 无备注保存 | UI 测试 | Playwright+Chrome | §5.1 | 已登录 | 新增→备注留空→确定 | 成功;备注为空或「—」 | | ZCZX-SCLWGL-UI-007 | 新增 | 备注超长 | UI 测试 | Playwright+Chrome | §5.1.4 | 新增 | 超 50 字或保存 | 无法输入或校验失败 | | ZCZX-SCLWGL-UI-008 | 新增 | 编号只读 | UI 测试 | Playwright+Chrome | §2.2 | 打开新增 | 查看栏位编号控件 | 禁用/「保存后自动生成」 | | ZCZX-SCLWGL-UI-009 | 新增 | 取消 | UI 测试 | Playwright+Chrome | §5.1.3 | 新增 | 填备注→取消 | 弹窗关闭;无新行 | | ZCZX-SCLWGL-UI-010 | 详情 | 只读展示 | UI 测试 | Playwright+Chrome | §5.4 | 有 S1 | 点击查看 | 编号、备注只读;含审计信息 | | ZCZX-SCLWGL-UI-011 | 编辑 | 改备注 | UI 测试 | Playwright+Chrome | §5.3 | 有 S3 | 编辑→改备注→确定 | 列表已更新;编号不变 | | ZCZX-SCLWGL-UI-012 | 编辑 | 编号不可改 | UI 测试 | Playwright+Chrome | §5.3 | 编辑 S1 | 查看编号控件 | 只读 | | ZCZX-SCLWGL-UI-013 | 删除 | 确认删除 | UI 测试 | Playwright+Chrome | §5.5 | 无关联行 | 删除→确认 | 行消失 | | ZCZX-SCLWGL-UI-014 | 删除 | 取消删除 | UI 测试 | Playwright+Chrome | §5.5 | 任意行 | 删除→取消 | 行仍在 | | ZCZX-SCLWGL-UI-015 | 端到端 | 全流程 | UI 集成 | Playwright+Chrome | §4 | 权限齐备 | 新增→模糊查→看→改→删 | 无报错 | | ZCZX-SCLWGL-UI-016 | 权限 | 只读角色 | UI 测试 | Playwright+Chrome | §6 | 仅 list/query | 进入模块 | 无新增/编辑/删除按钮 | | ZCZX-SCLWGL-UI-017 | 详情 | 从详情编辑 | UI 测试 | Playwright+Chrome | §5.4 | 查看 S1 | 点「编辑」 | 进入编辑弹窗;编号只读 | --- ## Playwright 与谷歌浏览器(实施提示) - 安装:`npm i -D @playwright/test`;`npx playwright install chrome`。 - 配置:`use: { channel: 'chrome', locale: 'zh-CN', baseURL: 'http://localhost:80' }`;`storageState` 复用登录态。 - 路由:`page.goto('/tradeMarket/marketStall')`(以菜单 `component` 为准)。 - 模糊搜索:`page.getByLabel('栏位编号').fill('1')` 后 `page.getByRole('button', { name: '搜索' }).click()`。 --- ## 覆盖对照 | 类别 | 单元 UT | 接口 API | 界面 UI | | --- | --- | --- | --- | | 正常流程 | UT-006 | API-005~006、010、012、018 | UI-005~006、010~012、015 | | 异常流程 | UT-003、005 | API-007、011、014、016~017 | UI-007、013~014 | | 业务约束 | UT-001~005、007 | API-002~004、008、013 | UI-002~004、008、012 | | 编号 01~99 | UT-001~004 | API-005、008~009 | UI-008、012 | | 模糊筛选 | UT-010 | API-002~003 | UI-002~003 | | 逻辑删除 | UT-008 | API-004、015~017 | UI-013 | | 分域独立 | UT-004 | API-009 | — | | 权限/鉴权 | — | API-019~021 | UI-016 | --- ## 功能需求追溯(自查) | 需求章节 | 要点 | 主要对应用例 | | --- | --- | --- | | §5.1 新增 | 备注、编号自动 | UT-005~006;API-005~008;UI-005~009 | | §5.2 列表 | 编号模糊 | UT-010~011;API-001~004;UI-001~004 | | §5.3 修改 | 编号不可改 | UT-007;API-012~013;UI-011~012 | | §5.4 详情 | 只读 | API-010~011;UI-010、017 | | §5.5 删除 | 逻辑删 | UT-008~009;API-015~017;UI-013~014 | | §2.2 编号 | 2 位、本表独立 | UT-001~004;API-009;UI-008 | | §7 与隔离圈位 | 分表分序列 | UT-004;API-009 | UI-001(无配置按钮) | | §6 权限 | 按钮级 | API-019~021;UI-016 | --- ## 修订记录 | 版本 | 说明 | | --- | --- | | 1.0 | 初版:单元 11、接口 22、UI 17;覆盖 CRUD、模糊筛选、编号分域;无隔离天数配置;Playwright+Chrome;前缀 **ZCZX-SCLWGL** |