风险因子设置 — 测试用例
依据:风险因子设置功能需求.md、风险因子设置技术方案.md
接口 Base Path(示例):/diseaseDetection/riskFactorWeight;若含 context-path 或网关前缀须补齐。鉴权与若依一致(Cookie / Token)。
通用前置(无特殊说明):具备本模块菜单权限的账号已登录。五项因子固定:养殖密度、交通流动性、检疫强度、气象适宜度、既往发病水平。权重规则:每项 > 0;五项之和 = 1(容差建议 |Σ − 1| ≤ 0.0001)。本模块无列表分页、删除、新增因子项接口。
合法保存示例 Body(五项各 0.2):breedingDensityWeight、trafficMobilityWeight、quarantineIntensityWeight、meteorologicalSuitabilityWeight、pastDiseaseLevelWeight 均为 0.2。
界面(UI)测试:借助 Playwright 启动 Chromium(与 Google Chrome 同源内核);可配置 channel: 'chrome' 调用本机已安装的谷歌浏览器。
一、单元测试用例
| 用例编号 |
测试模块 |
测试项 |
测试类型 |
测试工具 |
测试目的 |
前置条件 |
测试步骤 |
预期结果 |
| FXYZ-UT-001 |
权重校验 |
单项正数 |
单元测试 |
JUnit5 |
>0 |
无 |
传 0.2、-0.1、0 |
0.2 通过;-0.1、0 失败 |
| FXYZ-UT-002 |
权重校验 |
五项必填 |
单元测试 |
JUnit5 |
非空 |
无 |
任一项为 null |
失败 |
| FXYZ-UT-003 |
权重校验 |
合计等于 1 |
单元测试 |
JUnit5 |
§2.3 |
无 |
0.2×5;0.1×10(和为1) |
通过 |
| FXYZ-UT-004 |
权重校验 |
合计不为 1 |
单元测试 |
JUnit5 |
§2.3 |
无 |
0.2×4+0.3;0.5×5 |
失败 |
| FXYZ-UT-005 |
权重校验 |
容差边界 |
单元测试 |
JUnit5 |
0.0001 |
无 |
和 1.00005、和 0.9999 |
前者通过/后者按规则失败(与实现一致) |
| FXYZ-UT-006 |
权重校验 |
非法小数 |
单元测试 |
JUnit5 |
数字合法 |
无 |
传非数字、空串 |
失败 |
| FXYZ-UT-007 |
合计计算 |
weightSum |
单元测试 |
JUnit5 |
响应字段 |
五项已知 |
calcSum(five) |
与五项之和一致 |
| FXYZ-UT-008 |
Service |
首次保存 insert |
单元测试 |
JUnit5+Mockito |
upsert |
库无 id=1 |
save(valid) |
insert;id=1 |
| FXYZ-UT-009 |
Service |
再次保存 update |
单元测试 |
JUnit5+Mockito |
upsert |
已有 id=1 |
save(新五项) |
update 全部字段 |
| FXYZ-UT-010 |
Service |
原子更新 |
单元测试 |
JUnit5+Mockito |
§3.3 |
已有配置 |
模拟仅写成功 3 列 |
事务回滚或拒绝部分更新 |
| FXYZ-UT-011 |
Service |
查询单例 |
单元测试 |
JUnit5 |
id=1 |
有数据 |
selectConfig() |
仅一行;五项齐全 |
| FXYZ-UT-012 |
Service |
无记录查询 |
单元测试 |
JUnit5+Mockito |
空库 |
无行 |
selectConfig() |
null 或默认对象(与产品约定) |
二、接口测试用例
| 用例编号 |
测试模块 |
测试项 |
测试类型 |
测试工具 |
测试目的 |
前置条件 |
测试步骤 |
预期结果 |
| FXYZ-API-001 |
查询 |
获取当前权重 |
接口测试 |
Postman/curl |
§3.1 |
已登录;库有 id=1 |
GET .../riskFactorWeight |
code=200;data 含五项驼峰字段;可选 weightSum=1 |
| FXYZ-API-002 |
查询 |
无配置记录 |
接口测试 |
Postman |
空库 |
表无行 |
GET .../riskFactorWeight |
data 为 null 或默认五项(与约定一致) |
| FXYZ-API-003 |
保存 |
合法五项各 0.2 |
接口测试 |
Postman |
§3.2 |
已登录 |
PUT 五项均为 0.2 |
成功;再 GET 五项均为 0.2 |
| FXYZ-API-004 |
保存 |
合法非均分 |
接口测试 |
Postman |
和为 1 |
已登录 |
PUT 0.3,0.25,0.2,0.15,0.1 |
成功;GET 与提交一致 |
| FXYZ-API-005 |
保存 |
合计不为 1 |
接口测试 |
Postman |
§3.3 |
已登录 |
PUT 五项均为 0.3 |
失败;库中数据不变 |
| FXYZ-API-006 |
保存 |
某项为 0 |
接口测试 |
Postman |
正数 |
已登录 |
breedingDensityWeight=0,其余凑 1 |
失败 |
| FXYZ-API-007 |
保存 |
某项为负数 |
接口测试 |
Postman |
正数 |
已登录 |
trafficMobilityWeight=-0.1 |
失败 |
| FXYZ-API-008 |
保存 |
必填缺失 |
接口测试 |
Postman |
五项必填 |
已登录 |
Body 缺 pastDiseaseLevelWeight |
失败 |
| FXYZ-API-009 |
保存 |
容差内合计 |
接口测试 |
Postman |
0.0001 |
已登录 |
五项和 1.0000(如 0.2001×4+0.1996) |
按实现:通过或失败须与 §2.1 一致并文档化 |
| FXYZ-API-010 |
保存 |
首次 insert |
接口测试 |
Postman |
upsert |
空库 |
PUT 合法五项 |
成功;库出现 id=1 一行 |
| FXYZ-API-011 |
端到端 |
查询→改→查 |
接口测试 |
Postman |
§4 |
已登录 |
GET→PUT 改检疫 0.3 并调整其余使和=1→GET |
两次查询与最后一次保存一致 |
| FXYZ-API-012 |
鉴权 |
未登录 |
接口测试 |
curl |
安全 |
无 Token |
GET / PUT |
401 或统一未登录 |
| FXYZ-API-013 |
权限 |
无 query 权限 |
接口测试 |
Postman |
越权 |
无 query |
GET |
无权限失败 |
| FXYZ-API-014 |
权限 |
无 edit 权限 |
接口测试 |
Postman |
越权 |
仅 query |
PUT 合法 Body |
无权限失败 |
| FXYZ-API-015 |
响应 |
失败可读 |
接口测试 |
Postman |
§7 |
已登录 |
触发 API-005、006、008 |
msg 可区分合计/正数/必填 |
三、界面测试用例(UI)
测试工具:Playwright + Chromium(channel: 'chrome' 使用本机 Google Chrome)。
| 用例编号 |
测试模块 |
测试项 |
测试类型 |
测试工具 |
测试目的 |
前置条件 |
测试步骤 |
预期结果 |
| FXYZ-UI-001 |
页面 |
进入加载配置 |
UI 测试 |
Playwright+Chrome |
§5.1 |
已登录;库有配置 |
菜单进入「风险因子权重」 |
展示五项因子名称与权重;有加载态 |
| FXYZ-UI-002 |
页面 |
五项因子固定 |
UI 测试 |
Playwright+Chrome |
§2.1 |
已登录 |
查看表单项标签 |
含养殖密度、交通流动性、检疫强度、气象适宜度、既往发病水平;无增删因子入口 |
| FXYZ-UI-003 |
录入 |
占位与正数提示 |
UI 测试 |
Playwright+Chrome |
原型 |
已登录 |
查看输入框与旁注 |
占位「请输入权重」;有「正数」类提示 |
| FXYZ-UI-004 |
录入 |
实时合计展示 |
UI 测试 |
Playwright+Chrome |
§2.3 |
已登录 |
修改任一项权重 |
页面展示当前合计(如 0.85);提示「权重之和=1」 |
| FXYZ-UI-005 |
保存 |
合法保存成功 |
UI 测试 |
Playwright+Chrome |
§5.3 |
有 edit 权限 |
五项设为各 0.2→点「保存」 |
成功提示;刷新后仍为 0.2 |
| FXYZ-UI-006 |
保存 |
合计不为 1 拦截 |
UI 测试 |
Playwright+Chrome |
§5.2 |
已登录 |
五项均为 0.3→保存 |
校验失败或保存按钮不可用;提示合计须为 1 |
| FXYZ-UI-007 |
保存 |
非正数拦截 |
UI 测试 |
Playwright+Chrome |
§5.2 |
已登录 |
某项填 0 或负数→保存 |
字段级错误提示;不提交 |
| FXYZ-UI-008 |
保存 |
必填拦截 |
UI 测试 |
Playwright+Chrome |
§5.2 |
已登录 |
清空一项→保存 |
提示该项必填 |
| FXYZ-UI-009 |
保存 |
非均分合法保存 |
UI 测试 |
Playwright+Chrome |
§5.3 |
已登录 |
填 0.3,0.25,0.2,0.15,0.1→保存 |
成功;重新进入仍为该组值 |
| FXYZ-UI-010 |
权限 |
无保存按钮 |
UI 测试 |
Playwright+Chrome |
§6 |
仅 query 权限 |
进入页面 |
可查看权重;无「保存」或点击被拒绝 |
| FXYZ-UI-011 |
异常 |
加载失败提示 |
UI 测试 |
Playwright+Chrome |
§7 |
模拟接口失败 |
进入页面 |
错误提示;可重试(若有) |
| FXYZ-UI-012 |
端到端 |
改一项联动合计 |
UI 集成 |
Playwright+Chrome |
§4 |
已登录 |
加载→改「养殖密度」为 0.4 并调整其余使合计 1→保存→重进 |
合计实时变化;保存后持久化正确 |
Playwright 与谷歌浏览器(实施提示)
- 安装:
npm i -D @playwright/test;npx playwright install chromium;use: { channel: 'chrome' }。
- 导航:
page.getByText('风险因子权重') 或 goto('/diseaseDetection/riskFactorWeight')。
- 录入:按标签定位五项
el-input-number 或 input,填 0.2 等。
- 合计:
expect(page.getByText(/当前合计|1\.00/)).toBeVisible()(以实际文案为准)。
- 保存:
getByRole('button', { name: '保存' }).click();expect(page.locator('.el-message--success')).toBeVisible()。
覆盖对照
| 类别 |
单元 UT |
接口 API |
界面 UI |
| 正常流程 |
UT-003、007~009、011 |
API-001、003~004、010~011 |
UI-001、005、009、012 |
| 异常流程 |
UT-001、002、004、006 |
API-005~008、012~015 |
UI-006~008、011 |
| 业务约束 |
UT-005、010 |
API-009 |
UI-002、004、006 |
功能需求追溯(自查)
| 需求章节 |
要点 |
主要对应用例 |
| §5.1 展示加载 |
五项固定、占位 |
UI-001~003;API-001、002 |
| §5.2 录入校验 |
正数、合计=1 |
UT-001~006;API-005~009;UI-004、006~008 |
| §5.3 保存 |
原子 upsert |
UT-008~010;API-003、004、010、011;UI-005、009 |
| §6 权限 |
query/edit |
API-013、014;UI-010 |
| §7 错误提示 |
可读 |
API-015;UI-006~008、011 |
修订记录
| 版本 |
说明 |
| 1.0 |
初版:单元 12、接口 15、UI 12;前缀 FXYZ-;单页 GET/PUT;Playwright+Chrome |