# 风险因子设置 — 测试用例 > 依据:`风险因子设置功能需求.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 |