西藏巴青项目

市场进栏登记测试用例.md 21KB

市场进栏登记 — 测试用例

依据:市场进栏登记功能需求.md市场进栏登记技术方案.md
接口 Base Path/tradeMarket/marketEntry;鉴权与若依一致(Cookie / Token)。

通用前置(无特殊说明):具备本模块权限的账号已登录(tradeMarket:marketEntry:list|query|add|edit|remove)。关联主数据宜预置:

类型 样本 要点
供应商 biz_supplier S1 id=1 扎西合作社、S2 id=2 del_flag=0
市场栏位 biz_market_stall M1 id=1 stall_code=01M2 id=2 02 del_flag=0
入场隔离 biz_entry_isolation EI-END supplier_id=1del_flag=0expected_release_date <= 今天;主表 ear_tags=E101,E102,E103
入场隔离 EI-ING 同 S1;expected_release_date > 今天进可选池 A)
隔离巡查 biz_isolation_patrol P-SICK del_flag=0sick_dead_qty>0ear_tags=E102全表汇总为 B,不按供应商)
隔离巡查 P-SICK-OTHER 同上;ear_tags=E999(其他供应商圈位巡查,仍计入 B)
进栏登记 biz_market_entry ME-OTHER del_flag=0supplier_id=1;子表含 E103(保存时占用 C,不影响 supplierEarTags

合法新增 Body 示例(1 头):

{
  "entryTime": "2026-05-20 14:00:00",
  "stallId": 1,
  "supplierId": 1,
  "earTagList": ["E101"]
}

可选耳标池速查

场景 公式 说明
GET /supplierEarTags A − B A:该供应商隔离已结束主表耳标;B:全表巡查病死耳标(逗号拆分)
保存 R4 (A − B) − C C:他单有效进栏占用;编辑时 excludeEntryId 释放本条

界面(UI)测试Playwright + Chromiumchannel: 'chrome' 使用本机 Google Chrome)。组件路径:tradeMarket/marketEntry/index

自动化对照com.ruoyi.web.modules.trading.**.*MarketEntry*(JUnit5 / MockMvc)。


一、单元测试用例

用例编号 测试模块 测试项 测试类型 测试工具 测试目的 前置条件 测试步骤 预期结果
ZCZX-SCJLDJ-UT-001 耳标解析 逗号拆分与 trim 单元测试 JUnit5 §3.4 复用 EarTagCodec.parse(" E101 , E102 ") ["E101","E102"]
ZCZX-SCJLDJ-UT-002 耳标解析 本条内重复 单元测试 JUnit5 R5 resolveMainTags 含重复段 抛异常;提示重复耳标
ZCZX-SCJLDJ-UT-003 耳标解析 单段超长 单元测试 JUnit5 §3.4 33 字符耳标 校验失败
ZCZX-SCJLDJ-UT-004 保存校验 R6 以耳标数为准 单元测试 JUnit5 R6 Mock 合法主数据 quantity=9earTagList 2 个 → prepareAndValidate 通过后 quantity=2
ZCZX-SCJLDJ-UT-005 保存校验 R1 无耳标 单元测试 JUnit5 R1 Mock earTagList 失败;请至少选择一个耳标号
ZCZX-SCJLDJ-UT-006 保存校验 R1 合法通过 单元测试 JUnit5 R1 Mock;池含 E101 MarketEntryTestSamples.normalSaveRow() 通过;quantity=1
ZCZX-SCJLDJ-UT-007 保存校验 R4 他单占用 单元测试 JUnit5 §4.3 池不含 E103;occupied 含 E103 保存含 E103 失败;msg 含「已被其他进栏记录占用」
ZCZX-SCJLDJ-UT-008 保存校验 R4 编辑释放本条 单元测试 JUnit5 §4.3 id=1001;池含 E103 excludeEntryId 参与校验 本条 E103 可保存
ZCZX-SCJLDJ-UT-009 保存校验 R4 病死剔除 单元测试 JUnit5 §4.2 池不含 E102(B) 保存 E102 失败;不可进栏或不在可选范围
ZCZX-SCJLDJ-UT-010 保存校验 R4 可选池内 单元测试 JUnit5 §4 池含 E101 保存 E101 通过
ZCZX-SCJLDJ-UT-011 保存校验 R2 未来时间 单元测试 JUnit5 R2 Mock entryTime 为明天 失败;不能晚于当前时间
ZCZX-SCJLDJ-UT-012 保存校验 R2 当前时刻 单元测试 JUnit5 R2 Mock entryTime=now 通过
ZCZX-SCJLDJ-UT-013 列表校验 日期区间颠倒 单元测试 JUnit5 §6.2 validateDateRange("2026-05-21","2026-05-20") 失败;开始不能晚于结束
ZCZX-SCJLDJ-UT-014 保存校验 R3 栏位已删 单元测试 JUnit5+Mockito R3 biz_market_stall 不存在 validate 失败;栏位不存在或已删除
ZCZX-SCJLDJ-UT-015 保存校验 R3 供应商已删 单元测试 JUnit5+Mockito R3 供应商 del_flag=2 validate 失败;供应商不存在或已删除
ZCZX-SCJLDJ-UT-016 耳标池 supplierEarTags A−B 单元测试 JUnit5+Mockito §4.1~4.2、§5.1 Mock A 含 E101,E102,E103;B 含 E102 listSupplierEarTagOptions(1) ["E101","E103"];不含 E102
ZCZX-SCJLDJ-UT-017 耳标池 保存 (A−B)−C 单元测试 JUnit5+Mockito §4.3、§5.2 Mock 同上;C 含 E101 listEligible(1,null) ["E103"]
ZCZX-SCJLDJ-UT-018 耳标池 占用集合 单元测试 JUnit5+Mockito §4.3 Mock 子表占用 loadOccupiedEarTags(null) 含 ME-OTHER 的 E103
ZCZX-SCJLDJ-UT-019 耳标池 A 未结束隔离 单元测试 JUnit5+Mockito §4.1 仅 EI-ING 有耳标 listSupplierEarTagOptions 空列表
ZCZX-SCJLDJ-UT-020 耳标池 全表 B 剔除 单元测试 JUnit5+Mockito §4.2 A 含 E101;B 含 P-SICK-OTHER 的 E999 listSupplierEarTagOptions 不含 E999(即使非 S1 巡查)
ZCZX-SCJLDJ-UT-021 Service 新增冗余栏位号 单元测试 JUnit5+Mockito §3.2 Mock Mapper insert 合法行 主表 stall_code=01;子表 batchInsert
ZCZX-SCJLDJ-UT-022 Service 修改覆盖子表 单元测试 JUnit5+Mockito 技术方案 §3.2 已有子表 updateearTagList 先删子表再插;quantity 更新
ZCZX-SCJLDJ-UT-023 Service 逻辑删除 单元测试 JUnit5+Mockito §2.2 Mock remove(id) 主表 del_flag=2;子表保留
ZCZX-SCJLDJ-UT-024 Service 删除有关联 单元测试 JUnit5+Mockito §6.5 hasReference=true remove ServiceException;关联文案
ZCZX-SCJLDJ-UT-025 Service 详情组装耳标 单元测试 JUnit5+Mockito §6.4 子表 2 行 selectById earTagList 2 项;earTags 逗号串
ZCZX-SCJLDJ-UT-026 Mapper 列表 SQL 单元测试 JUnit5 §6.2 检查 BizMarketEntryMapper.xml del_flag=0entry_time DESCGROUP_CONCAT
ZCZX-SCJLDJ-UT-027 Mapper 巡查 B SQL 单元测试 JUnit5 §5.1 检查 selectSickDeadEarTagRows supplierIdsick_dead_qty>0
ZCZX-SCJLDJ-UT-028 Mapper 耳标筛选 EXISTS 单元测试 JUnit5 §6.2 检查 XML 子表 ear_tag LIKE + EXISTS

二、接口测试用例

用例编号 测试模块 测试项 测试类型 测试工具 测试目的 前置条件 测试步骤 预期结果
ZCZX-SCJLDJ-API-001 列表 默认分页排序 接口测试 Postman §6.2 有进栏数据 GET /list code=200;≤20 条;entryTime 倒序
ZCZX-SCJLDJ-API-002 列表 进栏日期区间 接口测试 Postman §6.2 已知进栏日 entryDateStart/End 闭区间 仅范围内记录
ZCZX-SCJLDJ-API-003 列表 日期区间非法 接口测试 Postman §6.2 已登录 start>end code≠200;开始不能晚于结束
ZCZX-SCJLDJ-API-004 列表 栏位编号模糊 接口测试 Postman §6.2 M1=01 stallCode=1 含 M1
ZCZX-SCJLDJ-API-005 列表 供应商精确 接口测试 Postman §6.2 S1、S2 各有记录 supplierId=1 仅 S1
ZCZX-SCJLDJ-API-006 列表 耳标号模糊 接口测试 Postman §6.2 子表含 E101 earTag=101 命中对应行
ZCZX-SCJLDJ-API-007 列表 组合筛选 接口测试 Postman §6.2 已登录 日期+栏位+供应商+耳标 同时满足才命中
ZCZX-SCJLDJ-API-008 列表 不含已删除 接口测试 Postman §2.2 某 id 已删 GET /list 无该 id
ZCZX-SCJLDJ-API-009 辅助 栏位下拉 接口测试 Postman §6.1 M1、M2 有效 GET /stallOptions [{stallId,stallCode}];仅 del_flag=0
ZCZX-SCJLDJ-API-010 辅助 可选耳标 A−B 接口测试 Postman §4.1~4.2 EI-END、P-SICK GET /supplierEarTags?supplierId=1 含 E101;不含 E102(病死剔除); ME-OTHER 占用的 E103
ZCZX-SCJLDJ-API-011 辅助 无隔离结束数据 接口测试 Postman §4.1 S2 无 EI-END supplierEarTags?supplierId=2 data=[]
ZCZX-SCJLDJ-API-012 辅助 全表 B 剔除 接口测试 Postman §4.2 EI-END 含 E101;P-SICK-OTHER 含 E999 supplierEarTags?supplierId=1 不含 E999、E102
ZCZX-SCJLDJ-API-013 辅助 无 excludeEntryId 接口测试 Postman §5.1 已登录 仅传 supplierId 成功;不接受 excludeEntryId
ZCZX-SCJLDJ-API-014 新增 合法单耳标 接口测试 Postman §6.1 样本数据齐备 POST 合法 Body code=200quantity=1;子表 1 行
ZCZX-SCJLDJ-API-015 新增 合法双耳标 接口测试 Postman R6 池含 E101、E104 earTagList=["E101","E104"] quantity=2
ZCZX-SCJLDJ-API-016 新增 备注与逗号串 接口测试 Postman §3 已登录 remark+earTags="E101" 成功;与 earTagList 等价解析
ZCZX-SCJLDJ-API-017 新增 备注超长 接口测试 Postman 技术方案 已登录 remark 501 字 失败;长度提示
ZCZX-SCJLDJ-API-018 新增 缺进栏时间 接口测试 Postman R1 已登录 entryTime 失败
ZCZX-SCJLDJ-API-019 新增 缺栏位/供应商 接口测试 Postman R1 已登录 stallIdsupplierId 失败;对应必填提示
ZCZX-SCJLDJ-API-020 新增 无耳标 接口测试 Postman R1 已登录 earTagList 失败;至少一个耳标
ZCZX-SCJLDJ-API-021 新增 R2 未来时间 接口测试 Postman R2 已登录 entryTime 明天 失败;不能晚于当前
ZCZX-SCJLDJ-API-022 新增 R3 无效栏位 接口测试 Postman R3 已删 stallId POST 失败;栏位不存在
ZCZX-SCJLDJ-API-023 新增 R3 无效供应商 接口测试 Postman R3 已删供应商 POST 失败;供应商不存在
ZCZX-SCJLDJ-API-024 新增 R5 耳标重复 接口测试 Postman R5 已登录 ["E101","E101"] 失败;重复耳标
ZCZX-SCJLDJ-API-025 新增 R4 他单占用 接口测试 Postman §4.3 ME-OTHER 占 E103;supplierEarTags 仍含 E103 POST 含 E103 失败;已被占用
ZCZX-SCJLDJ-API-026 新增 R4 病死耳标 接口测试 Postman §4.2 P-SICK 剔 E102 POST 含 E102 失败;不可进栏
ZCZX-SCJLDJ-API-027 新增 R4 未结束隔离耳标 接口测试 Postman §4.1 仅 EI-ING 有 E201 POST E201 失败;不在可选范围
ZCZX-SCJLDJ-API-028 详情 有效 id 接口测试 Postman §6.4 有 ME-OTHER GET /{id} supplierNameearTagList、审计字段
ZCZX-SCJLDJ-API-029 详情 无效/已删 接口测试 Postman 异常 已登录 不存在或已删 id 失败或 data
ZCZX-SCJLDJ-API-030 修改 改栏位与时间 接口测试 Postman §6.3 有记录 PUTstallIdentryTime 成功;stallCode 随栏位更新
ZCZX-SCJLDJ-API-031 修改 改耳标集合 接口测试 Postman §6.3 有记录 PUTearTagList 子表全量覆盖;quantity 同步
ZCZX-SCJLDJ-API-032 修改 保留原耳标 接口测试 Postman §4.3、§5.2 编辑本条占 E103 PUT 原耳标不变 成功(服务端 excludeEntryId 释放 C)
ZCZX-SCJLDJ-API-033 修改 不存在 id 接口测试 Postman 异常 已登录 伪造 id PUT 失败
ZCZX-SCJLDJ-API-034 删除 单条逻辑删 接口测试 Postman §6.5 无关联新行 DELETE /{id} 成功;列表不可见
ZCZX-SCJLDJ-API-035 删除 释放后可保存 接口测试 Postman §4.3 删 ME-OTHER POST 含 E103 成功(C 已释放;supplierEarTags 本已含 E103)
ZCZX-SCJLDJ-API-036 删除 有关联拒绝 接口测试 Postman §6.5 hasReference=true DELETE 失败;存在关联业务
ZCZX-SCJLDJ-API-037 删除 重复删除 接口测试 Postman 幂等 已删 id 再次 DELETE 失败或不存在
ZCZX-SCJLDJ-API-038 端到端 CRUD 串联 接口测试 Postman §7 已登录 POSTlistGETPUTDELETE 每步 code=200
ZCZX-SCJLDJ-API-039 鉴权 未登录 接口测试 curl 安全 无 Token GET /list 401 或统一未登录
ZCZX-SCJLDJ-API-040 权限 无新增权限 接口测试 Postman §8 仅 list POST 无权限失败
ZCZX-SCJLDJ-API-041 权限 无删除权限 接口测试 Postman §8 无 remove DELETE 无权限失败
ZCZX-SCJLDJ-API-042 路由 辅助在详情前 接口测试 Postman 技术方案 §7 已登录 GET /stallOptions/supplierEarTags 非 404(不被 /{id} 吞掉)

三、界面测试用例(UI)

测试工具Playwright + Chromiumchannel: 'chrome' 使用本机 Google Chrome)。

用例编号 测试模块 测试项 测试类型 测试工具 测试目的 前置条件 测试步骤 预期结果
ZCZX-SCJLDJ-UI-001 列表 默认展示 UI 测试 Playwright+Chrome §6.2 已登录;有数据 进入「市场进栏登记」 列含进栏时间、栏位、供应商、耳标、数量、操作
ZCZX-SCJLDJ-UI-002 列表 进栏日期筛选 UI 测试 Playwright+Chrome §6.2 已知日期记录 选日期起止→搜索 仅范围内行
ZCZX-SCJLDJ-UI-003 列表 日期区间非法 UI 测试 Playwright+Chrome §6.2 已登录 开始晚于结束→搜索 提示修正;不查询
ZCZX-SCJLDJ-UI-004 列表 栏位模糊筛选 UI 测试 Playwright+Chrome §6.2 M1=01 栏位填 1→搜索 含 M1 行
ZCZX-SCJLDJ-UI-005 列表 供应商精确 UI 测试 Playwright+Chrome §6.2 S1、S2 有数据 下拉选 S1→搜索 仅 S1
ZCZX-SCJLDJ-UI-006 列表 耳标模糊 UI 测试 Playwright+Chrome §6.2 含 E101 耳标填片段→搜索 命中对应行
ZCZX-SCJLDJ-UI-007 列表 重置 UI 测试 Playwright+Chrome §6.2 已筛选 搜索→重置 条件清空;列表恢复
ZCZX-SCJLDJ-UI-008 列表 耳标过长省略 UI 测试 Playwright+Chrome §11 多条耳标行 看列表耳标列 过长省略;详情见全文
ZCZX-SCJLDJ-UI-009 新增 进栏时间默认 UI 测试 Playwright+Chrome §3.1 有 add 权限 打开新增 默认≈当前时间;可选过去时间
ZCZX-SCJLDJ-UI-010 新增 栏位下拉单选 UI 测试 Playwright+Chrome §3.2 M1 有效 打开栏位控件 仅下拉;不可手输编号
ZCZX-SCJLDJ-UI-011 新增 未选供应商禁耳标 UI 测试 Playwright+Chrome §3.4 新增弹窗 未选供应商点耳标 不可选或为空;提示先选供应商
ZCZX-SCJLDJ-UI-012 新增 供应商模糊搜索 UI 测试 Playwright+Chrome §3.3 有 S1 输入关键字→选 S1 选中后展示名称
ZCZX-SCJLDJ-UI-013 新增 选供应商加载耳标 UI 测试 Playwright+Chrome §4.1~4.2 样本 A−B 选 S1 下拉含 E101、E103;不含 E102;可含已占用 E103
ZCZX-SCJLDJ-UI-014 新增 数量联动 UI 测试 Playwright+Chrome §3.5 已选 S1 勾选 2 个耳标 数量(头)=2 且只读
ZCZX-SCJLDJ-UI-015 新增 更换供应商清空耳标 UI 测试 Playwright+Chrome §3.4 已选 S1 与耳标 改选 S2 已选耳标清空;可选项按 S2 刷新
ZCZX-SCJLDJ-UI-016 新增 保存成功 UI 测试 Playwright+Chrome §6.1 权限齐备 填时间/栏位/S1/E101→确定 成功提示;列表新行;数量=1
ZCZX-SCJLDJ-UI-017 新增 取消 UI 测试 Playwright+Chrome §6.1 新增 填数据→取消 弹窗关;无新行
ZCZX-SCJLDJ-UI-018 新增 无耳标校验 UI 测试 Playwright+Chrome R1 新增 不选耳标→确定 前端或提交失败;至少一个耳标
ZCZX-SCJLDJ-UI-019 新增 未来时间 UI 测试 Playwright+Chrome R2 新增 进栏时间选未来→确定 校验失败;不能晚于当前
ZCZX-SCJLDJ-UI-020 新增 无可选耳标提示 UI 测试 Playwright+Chrome §10 S2 无隔离结束 选 S2 看耳标 空列表或提示确认隔离登记
ZCZX-SCJLDJ-UI-021 查看 只读全量耳标 UI 测试 Playwright+Chrome §6.4 多条耳标记录 点击查看 耳标完整;含创建/修改信息
ZCZX-SCJLDJ-UI-022 编辑 改栏位与耳标 UI 测试 Playwright+Chrome §6.3 有记录 编辑→换 M2、改耳标→确定 列表/详情已更新
ZCZX-SCJLDJ-UI-023 编辑 从详情进编辑 UI 测试 Playwright+Chrome §6.4 查看弹窗 点「编辑」 编辑弹窗回显
ZCZX-SCJLDJ-UI-024 删除 二次确认 UI 测试 Playwright+Chrome §6.5 无关联行 删除→确认 确认语含供应商/栏位/时间或头数;行消失
ZCZX-SCJLDJ-UI-025 删除 取消删除 UI 测试 Playwright+Chrome §6.5 任意行 删除→取消 行仍在
ZCZX-SCJLDJ-UI-026 删除 释放后可保存 UI 测试 Playwright+Chrome §4.3 删 ME-OTHER 新增选 E103 保存 保存成功(下拉本已含 E103)
ZCZX-SCJLDJ-UI-029 新增 占用耳标保存失败 UI 测试 Playwright+Chrome §4.3 ME-OTHER 占 E103 选 E103→确定 提示已被占用;不保存
ZCZX-SCJLDJ-UI-027 端到端 全流程 UI 集成 Playwright+Chrome §7 权限齐备 新增→筛选→查看→编辑→删除 无报错;数据一致
ZCZX-SCJLDJ-UI-028 权限 只读角色 UI 测试 Playwright+Chrome §8 仅 list/query 进入模块 无新增/编辑/删除按钮

Playwright 与谷歌浏览器(实施提示)

  • 安装:npm i -D @playwright/testnpx playwright install chrome
  • 配置:use: { channel: 'chrome', locale: 'zh-CN', baseURL: 'http://localhost:80' }storageState 复用登录态。
  • 路由:await page.goto('/tradeMarket/marketEntry')(与菜单 component 一致)。
  • 列表筛选:page.getByLabel('进栏日期') 或占位文案;page.getByRole('button', { name: '搜索' }).click()
  • 新增:page.getByRole('button', { name: '新增' }).click() → 选栏位下拉 → 供应商远程搜索选 S1 → 耳标多选 E101 → 断言数量只读为 1 → getByRole('button', { name: '确定' }).click()
  • 供应商切换:await page.locator('.supplier-select').click() 改 S2 后 expect(earTag).toHaveCount(0)(按实际组件 class 调整)。
  • 删除确认:page.getByRole('button', { name: '删除' }).first().click()page.getByRole('dialog').getByRole('button', { name: '确定' }).click()

覆盖对照

类别 单元 UT 接口 API 界面 UI
正常流程 UT-006、021~025 API-009~016、028~032、038 UI-009~017、021~023、027
异常流程 UT-002~005、007、009、011~015、024 API-017~027、029、033、036~037 UI-003、018~019、024~025、029
业务约束 R1~R6 UT-004~015 API-018~027 UI-011、014~019、029
耳标池 A−B UT-016、019~020 API-010~013 UI-013、020
保存占用 C UT-007~008、017~018 API-025、032、035 UI-026、029
主从表存储 UT-021~022、025~026 API-014~015、031 UI-014、016
列表筛选 UT-013、026~028 API-002~008 UI-002~008
逻辑删除 UT-023 API-008、034~037 UI-024~026
权限/鉴权 API-039~041 UI-028
路由顺序 API-042

功能需求追溯(自查)

需求章节 要点 主要对应用例
§3 字段规则 时间、栏位下拉、供应商、耳标、数量联动 UT-004~006、011~012;API-013~020;UI-009~015、018~019
§4 可选耳标池 A 按供应商;B 全表病死;下拉 A−B;保存 (A−B)−C UT-016~020;API-010~013、025~027、032、035;UI-013、020、026、029
§5 R1~R6 保存校验 UT-004~015;API-017~026;UI-014、018~019
§6.1 新增 CRUD 入口 API-013~016;UI-009~017
§6.2 列表 筛选、排序、仅有效 API-001~008;UI-001~008
§6.3 修改 全字段可改 API-029~031;UI-022~023
§6.4 查看 只读、完整耳标 API-027;UI-008、021
§6.5 删除 二次确认、引用、释放占用 UT-021~022;API-033~036;UI-024~026
§8 权限 按钮级 API-038~040;UI-028
§10 提示语 各失败场景 API-017~026;UI-011、018~020

修订记录

版本 说明
1.0 初版:单元 25、接口 41、UI 28;覆盖 R1~R6、耳标池、主从表 CRUD、Playwright+Chrome;前缀 ZCZX-SCJLDJ
1.1 同步需求 v1.6:supplierEarTags 仅 A−B(B 全表巡查);保存 (A−B)−C;单元 28、接口 42、UI 29