市场行情登记 — 测试用例
依据:市场行情登记功能需求.md、市场行情登记技术方案.md
接口 Base Path:/tradeMarket/marketQuote;鉴权与若依一致(Cookie / Token)。
通用前置(无特殊说明):具备本模块权限的账号已登录(tradeMarket:marketQuote:list|query|add|edit|remove)。biz_trade_market 宜有运营状态正常的市场 TM1(如 id=1,名称「巴青交易市场」)。biz_market_daily_quote 宜预置(del_flag=0):
| 样本 |
行情日期 |
渠道 |
产地县码 |
公母 |
要点 |
| D1 |
昨天 |
TM1 |
540628(示例) |
公牛(1) |
完整维度;prob 40/30/30;有变化因素 |
| D2 |
昨天 |
TM1 |
另一县码 |
母牛(2) |
重量档=3;用于组合筛选 |
| D3 |
7 天前 |
TM1 |
同 D1 县 |
公牛(1) |
日期区间筛选用 |
合法新增 Body 示例(驼峰):quoteDate=2026-05-19,省/市/县 code+name 齐全,tradeMarketId=1,cattleGender=1,priceMin=10,priceMax=14,priceUnit=2,supplyStatus=1,changeFactors=[1,3],probRise=40,probFlat=35,probFall=25,outboundAdvice=出栏平稳(合计 100%)。
界面(UI)测试:Playwright + Chromium(channel: 'chrome' 使用本机 Google Chrome)。
一、单元测试用例
| 用例编号 |
测试模块 |
测试项 |
测试类型 |
测试工具 |
测试目的 |
前置条件 |
测试步骤 |
预期结果 |
| JYPT-SCDJ-UT-001 |
均价计算 |
公式 |
单元测试 |
JUnit5 |
§3.5 |
无 |
calcAvg(10,14) |
返回 12.00 |
| JYPT-SCDJ-UT-002 |
均价计算 |
不等价 |
单元测试 |
JUnit5 |
§3.5 |
无 |
min=15,max=10 |
抛异常或无效 |
| JYPT-SCDJ-UT-003 |
概率校验 |
合计100 |
单元测试 |
JUnit5 |
§3.5 |
无 |
40+35+25;99+0.5+0.5;50+30+30 |
前两通过;后者失败 |
| JYPT-SCDJ-UT-004 |
概率校验 |
非正 |
单元测试 |
JUnit5 |
§2.9 |
无 |
0、-1、101 |
失败 |
| JYPT-SCDJ-UT-005 |
行情日期 |
未来日 |
单元测试 |
JUnit5 |
§2.2 |
无 |
明天日期 |
失败 |
| JYPT-SCDJ-UT-006 |
变化因素 |
至少一项 |
单元测试 |
JUnit5 |
§2.8 |
无 |
[]、非法码 9、[1,2] |
空/非法失败;合法通过 |
| JYPT-SCDJ-UT-007 |
变化因素 |
入库格式 |
单元测试 |
JUnit5 |
§3.5 |
无 |
输入 [3,1,1] |
存 1,3(去重排序) |
| JYPT-SCDJ-UT-008 |
渠道校验 |
市场不存在 |
单元测试 |
JUnit5+Mockito |
§3.5 |
无此 id |
校验 |
失败 |
| JYPT-SCDJ-UT-009 |
渠道校验 |
市场停业 |
单元测试 |
JUnit5+Mockito |
§2.4 |
status=2 |
校验 |
失败 |
| JYPT-SCDJ-UT-010 |
维度唯一 |
重复组合 |
单元测试 |
JUnit5+Mockito |
§2.4 |
已有 D1 维 |
existsDuplicate |
true |
| JYPT-SCDJ-UT-011 |
维度唯一 |
修改排除自身 |
单元测试 |
JUnit5+Mockito |
§2.4 |
改 D1 |
同 id 查重 |
false |
| JYPT-SCDJ-UT-012 |
出栏建议 |
长度 |
单元测试 |
JUnit5 |
§2.10 |
无 |
空、501 字、500 字 |
空/超长失败;500 通过 |
| JYPT-SCDJ-UT-013 |
枚举 |
公母/单位 |
单元测试 |
JUnit5 |
§2.3 |
无 |
gender=0;unit=3 |
失败 |
| JYPT-SCDJ-UT-014 |
Service |
新增落库均价 |
单元测试 |
JUnit5+Mockito |
正常 |
Mock |
insert min=20,max=30 |
avg_price=25 |
| JYPT-SCDJ-UT-015 |
Service |
逻辑删除 |
单元测试 |
JUnit5+Mockito |
§3.5 |
Mock |
remove |
del_flag=2 |
| JYPT-SCDJ-UT-016 |
Mapper |
日期区间 SQL |
单元测试 |
JUnit5 |
§3.6 |
无 |
检查 XML |
BETWEEN begin/end |
| JYPT-SCDJ-UT-017 |
Mapper |
列表排序 |
单元测试 |
JUnit5 |
§3.1 |
无 |
检查 XML |
quote_date DESC, create_time DESC |
二、接口测试用例
| 用例编号 |
测试模块 |
测试项 |
测试类型 |
测试工具 |
测试目的 |
前置条件 |
测试步骤 |
预期结果 |
| JYPT-SCDJ-API-001 |
列表 |
默认分页排序 |
接口测试 |
Postman |
§3.1 |
有 D1~D3 |
GET /list |
code=200;含 tradeMarketName;日期倒序 |
| JYPT-SCDJ-API-002 |
列表 |
单日精确 |
接口测试 |
Postman |
§3.1.1 |
有 D1 |
quoteDate=昨天 |
含 D1 不含 D3 |
| JYPT-SCDJ-API-003 |
列表 |
日期区间 |
接口测试 |
Postman |
§3.1.1 |
有 D1、D3 |
beginQuoteDate~endQuoteDate |
范围内记录 |
| JYPT-SCDJ-API-004 |
列表 |
渠道精确 |
接口测试 |
Postman |
§2.12 |
TM1 |
tradeMarketId=1 |
均为 TM1 |
| JYPT-SCDJ-API-005 |
列表 |
产地县精确 |
接口测试 |
Postman |
§2.12 |
D1 县码 |
countyCode=… |
含 D1 |
| JYPT-SCDJ-API-006 |
列表 |
组合筛选 |
接口测试 |
Postman |
§2.12 |
已登录 |
日期+渠道+县 |
同时满足 |
| JYPT-SCDJ-API-007 |
列表 |
不含已删 |
接口测试 |
Postman |
逻辑删除 |
id 已删 |
GET /list |
无该 id |
| JYPT-SCDJ-API-008 |
渠道下拉 |
仅正常市场 |
接口测试 |
Postman |
§3.4 |
有停业市场 |
GET /tradeMarketOptions |
仅 operate_status=1 |
| JYPT-SCDJ-API-009 |
新增 |
完整合法 |
接口测试 |
Postman |
§5.1 |
TM1 正常 |
POST 合法 Body |
code=200;avgPrice=12 |
| JYPT-SCDJ-API-010 |
新增 |
默认公母与单位 |
接口测试 |
Postman |
§5.1 |
已登录 |
POST 省略 gender/unit |
存 cattleGender=1,priceUnit=2 |
| JYPT-SCDJ-API-011 |
新增 |
缺必填 |
接口测试 |
Postman |
§5.1.4 |
已登录 |
缺 tradeMarketId 或县码 |
失败 |
| JYPT-SCDJ-API-012 |
新增 |
未来日期 |
接口测试 |
Postman |
§2.2 |
已登录 |
quoteDate=明天 |
失败 |
| JYPT-SCDJ-API-013 |
新增 |
最低价>最高价 |
接口测试 |
Postman |
§2.6 |
已登录 |
min=20,max=10 |
失败 |
| JYPT-SCDJ-API-014 |
新增 |
概率合计≠100 |
接口测试 |
Postman |
§2.9 |
已登录 |
40+40+40 |
失败 |
| JYPT-SCDJ-API-015 |
新增 |
变化因素为空 |
接口测试 |
Postman |
§2.8 |
已登录 |
changeFactors=[] |
失败 |
| JYPT-SCDJ-API-016 |
新增 |
维度重复 |
接口测试 |
Postman |
§2.13 |
已有 D1 维 |
POST 同维 |
失败 |
| JYPT-SCDJ-API-017 |
新增 |
停业渠道 |
接口测试 |
Postman |
§2.4 |
停业市场 id |
POST |
失败 |
| JYPT-SCDJ-API-018 |
详情 |
有效 id |
接口测试 |
Postman |
§5.4 |
有 D1 |
GET /{id} |
含概率、变化因素名、均价 |
| JYPT-SCDJ-API-019 |
详情 |
无效 id |
接口测试 |
Postman |
异常 |
已登录 |
不存在 id |
失败或空 |
| JYPT-SCDJ-API-020 |
修改 |
改价格重算均价 |
接口测试 |
Postman |
§5.3 |
有 D1 avg=12 |
PUT min=8,max=12 |
avgPrice=10 |
| JYPT-SCDJ-API-021 |
修改 |
改概率 |
接口测试 |
Postman |
§5.3 |
有 D1 |
PUT 新 prob 合计100 |
成功 |
| JYPT-SCDJ-API-022 |
修改 |
维度重复他人 |
接口测试 |
Postman |
§2.13 |
有 D1、D2 |
D2 改成 D1 维 |
失败 |
| JYPT-SCDJ-API-023 |
修改 |
不存在 id |
接口测试 |
Postman |
异常 |
已登录 |
伪造 PUT |
失败 |
| JYPT-SCDJ-API-024 |
删除 |
单条逻辑删 |
接口测试 |
Postman |
§5.5 |
无关联新行 |
DELETE /{id} |
成功;列表无 |
| JYPT-SCDJ-API-025 |
删除 |
有关联拒绝 |
接口测试 |
Postman |
§5.5 |
预置引用 |
DELETE |
失败 |
| JYPT-SCDJ-API-026 |
删除 |
重复删除 |
接口测试 |
Postman |
幂等 |
已删 id |
再次 DELETE |
失败 |
| JYPT-SCDJ-API-027 |
端到端 |
CRUD 串联 |
接口测试 |
Postman |
§4 |
TM1 |
POST→list→GET→PUT→DELETE |
每步 code=200 |
| JYPT-SCDJ-API-028 |
鉴权 |
未登录 |
接口测试 |
curl |
安全 |
无 Token |
GET /list |
401 或未登录 |
| JYPT-SCDJ-API-029 |
权限 |
无新增 |
接口测试 |
Postman |
§6 |
仅 list |
POST |
无权限失败 |
| JYPT-SCDJ-API-030 |
响应 |
失败可读 |
接口测试 |
Postman |
§8 |
已登录 |
触发重复维、概率错 |
msg 可区分 |
三、界面测试用例(UI)
测试工具:Playwright + Chromium(channel: 'chrome' 使用本机 Google Chrome)。
| 用例编号 |
测试模块 |
测试项 |
测试类型 |
测试工具 |
测试目的 |
前置条件 |
测试步骤 |
预期结果 |
| JYPT-SCDJ-UI-001 |
列表 |
默认展示 |
UI 测试 |
Playwright+Chrome |
§5.2.3 |
已登录;有数据 |
进入「市场行情登记」 |
含日期、产地、渠道、公母、价格、均价、操作 |
| JYPT-SCDJ-UI-002 |
列表 |
日期筛选 |
UI 测试 |
Playwright+Chrome |
§2.12 |
有 D1、D3 |
选昨天→搜索 |
含 D1 不含 D3 |
| JYPT-SCDJ-UI-003 |
列表 |
渠道筛选 |
UI 测试 |
Playwright+Chrome |
§2.12 |
多市场数据 |
选 TM1→搜索 |
仅 TM1 行 |
| JYPT-SCDJ-UI-004 |
列表 |
重置 |
UI 测试 |
Playwright+Chrome |
§5.2 |
已筛选 |
搜索→重置 |
条件清空 |
| JYPT-SCDJ-UI-005 |
新增 |
默认昨天与枚举 |
UI 测试 |
Playwright+Chrome |
§5.1.2 |
有 add |
打开新增 |
日期默认昨天;公母默认公牛;单位默认元/斤 |
| JYPT-SCDJ-UI-006 |
新增 |
产地三级 |
UI 测试 |
Playwright+Chrome |
§2.3 |
新增 |
级联选至县 |
未选至县不可保存 |
| JYPT-SCDJ-UI-007 |
新增 |
渠道下拉 |
UI 测试 |
Playwright+Chrome |
§2.4 |
TM1 正常 |
选渠道 |
展示市场名称;停业不可选 |
| JYPT-SCDJ-UI-008 |
新增 |
均价自动计算 |
UI 测试 |
Playwright+Chrome |
§2.6 |
新增 |
填 min=10,max=14 |
展示均价 12.00 |
| JYPT-SCDJ-UI-009 |
新增 |
概率合计校验 |
UI 测试 |
Playwright+Chrome |
§2.9 |
新增 |
填 40+40+40→确定 |
提示合计须 100% |
| JYPT-SCDJ-UI-010 |
新增 |
变化因素多选 |
UI 测试 |
Playwright+Chrome |
§2.8 |
新增 |
勾选≥1 项→保存 |
成功;详情展示标签 |
| JYPT-SCDJ-UI-011 |
新增 |
完整保存 |
UI 测试 |
Playwright+Chrome |
§5.1 |
合法数据 |
填全必填→确定 |
成功;列表出现 |
| JYPT-SCDJ-UI-012 |
新增 |
取消 |
UI 测试 |
Playwright+Chrome |
§5.1.3 |
新增 |
填一半→取消 |
无新行 |
| JYPT-SCDJ-UI-013 |
详情 |
只读全字段 |
UI 测试 |
Playwright+Chrome |
§5.4 |
有 D1 |
查看 |
概率、因素、建议只读 |
| JYPT-SCDJ-UI-014 |
编辑 |
改价格 |
UI 测试 |
Playwright+Chrome |
§5.3 |
有 D1 |
改最高价→保存 |
均价联动更新 |
| JYPT-SCDJ-UI-015 |
删除 |
确认删除 |
UI 测试 |
Playwright+Chrome |
§5.5 |
无关联行 |
删除→确认 |
行消失 |
| JYPT-SCDJ-UI-016 |
删除 |
取消删除 |
UI 测试 |
Playwright+Chrome |
§5.5 |
任意行 |
删除→取消 |
行仍在 |
| JYPT-SCDJ-UI-017 |
端到端 |
全流程 |
UI 集成 |
Playwright+Chrome |
§4 |
权限齐备 |
新增→筛选→看→改→删 |
无报错 |
| JYPT-SCDJ-UI-018 |
权限 |
只读角色 |
UI 测试 |
Playwright+Chrome |
§6 |
仅 list/query |
进入模块 |
无新增/编辑/删除 |
| JYPT-SCDJ-UI-019 |
详情 |
从详情编辑 |
UI 测试 |
Playwright+Chrome |
§5.4 |
查看 D1 |
点「编辑」 |
进入编辑弹窗 |
| JYPT-SCDJ-UI-020 |
新增 |
无可用市场提示 |
UI 测试 |
Playwright+Chrome |
§2.4 |
无正常市场 |
打开新增看渠道 |
空列表或引导维护市场 |
Playwright 与谷歌浏览器(实施提示)
- 安装:
npm i -D @playwright/test;npx playwright install chrome。
- 配置:
use: { channel: 'chrome', locale: 'zh-CN', baseURL: 'http://localhost:80' };storageState 复用登录态。
- 路由:
page.goto('/tradeMarket/marketQuote')(以菜单 component 为准)。
- 日期:
page.getByLabel('行情日期');断言默认值为昨天。
- 级联:
RegionCascader 按项目封装点击省/市/县。
- 概率:三个输入框失焦后断言合计提示。
- 变化因素:
el-checkbox-group 至少勾选一项。
覆盖对照
| 类别 |
单元 UT |
接口 API |
界面 UI |
| 正常流程 |
UT-014 |
API-009~010、018、020~021、027 |
UI-005~011、013~014、017 |
| 异常流程 |
UT-002~005、012 |
API-011~017、019、023、025~026 |
UI-009、012、015~016 |
| 业务约束 |
UT-006~011 |
API-016、022 |
UI-006~008、010 |
| 均价/概率 |
UT-001~004 |
API-013~014、020 |
UI-008~009 |
| 渠道/市场 |
UT-008~009 |
API-008、017 |
UI-007、020 |
| 列表筛选 |
UT-016~017 |
API-001~007 |
UI-002~004 |
| 逻辑删除 |
UT-015 |
API-007、024~026 |
UI-015 |
| 权限/鉴权 |
— |
API-028~029 |
UI-018 |
功能需求追溯(自查)
| 需求章节 |
要点 |
主要对应用例 |
| §5.1 新增 |
字段、默认、均价、概率、因素 |
UT-001~014;API-009~017;UI-005~012 |
| §5.2 列表 |
日期/渠道/产地筛选 |
UT-016~017;API-001~007;UI-001~004 |
| §5.3 修改 |
全字段、均价重算 |
API-020~023;UI-014、019 |
| §5.4 详情 |
只读 |
API-018;UI-013、019 |
| §5.5 删除 |
逻辑删 |
UT-015;API-024~026;UI-015~016 |
| §2.4 渠道 |
联动交易市场 |
API-008、017;UI-007、020 |
| §2.13 维度唯一 |
组合唯一 |
UT-010~011;API-016、022 |
| §6 权限 |
按钮级 |
API-028~029;UI-018 |
修订记录
| 版本 |
说明 |
| 1.0 |
初版:单元 17、接口 30、UI 20;覆盖 CRUD、筛选、均价、概率100%、变化因素、维度唯一、渠道联动;Playwright+Chrome;前缀 JYPT-SCDJ |