市场栏位管理 — 测试用例
依据:市场栏位管理功能需求.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 |
| §6 权限 |
按钮级 |
API-019~021;UI-016 |
修订记录
| 版本 |
说明 |
| 1.0 |
初版:单元 11、接口 22、UI 17;覆盖 CRUD、模糊筛选、编号分域;无隔离天数配置;Playwright+Chrome;前缀 ZCZX-SCLWGL |