依据:
实验室检测功能需求.md、实验室检测技术方案.md
接口 Base Path(示例):/diseaseDetection/labDetection;若含context-path或网关前缀须补齐。鉴权与若依一致(Cookie / Token)。
通用前置(无特殊说明):具备本模块菜单与按钮权限的账号已登录。样本来源枚举:1 场地抽检 / 2 疫情上报送检 / 3 调运检疫 / 4 日常检测。检出率:服务端计算 positiveCount ÷ testQuantity(testQuantity=0 时为 0),比值存库;前端 ×100 展示为百分比(建议 2 位小数)。客户端不得在新增/修改 Body 中写入 detectionRate 生效。
界面(UI)测试:借助 Playwright 启动 Chromium(与 Google Chrome 同源内核);可配置 channel: 'chrome' 调用本机已安装的谷歌浏览器。
| 用例编号 | 测试模块 | 测试项 | 测试类型 | 测试工具 | 测试目的 | 前置条件 | 测试步骤 | 预期结果 |
|---|---|---|---|---|---|---|---|---|
| SYJC-UT-001 | 参数校验 | 样本来源枚举 | 单元测试 | JUnit5 | 1~4 合法 | 无 | 传 1、4、0、5 | 1、4 通过;0、5 失败 |
| SYJC-UT-002 | 参数校验 | 检测日期格式 | 单元测试 | JUnit5 | YYYY-MM-DD | 无 | 2026-05-01 通过;20260501、空 失败 |
与 §3.2 一致 |
| SYJC-UT-003 | 参数校验 | 检测量非负整数 | 单元测试 | JUnit5 | ≥0 整数 | 无 | 传 0、100、-1、1.5 | 0、100 通过;-1、1.5 失败 |
| SYJC-UT-004 | 参数校验 | 阳性数非负整数 | 单元测试 | JUnit5 | ≥0 整数 | 无 | 传 0、10、-1、2.3 | 0、10 通过;-1、2.3 失败 |
| SYJC-UT-005 | 数量约束 | 阳性不大于检测量 | 单元测试 | JUnit5 | §5.1 | 无 | testQuantity=10, positiveCount=11 / 10 |
前者失败;后者通过 |
| SYJC-UT-006 | 数量约束 | 零检测量 | 单元测试 | JUnit5 | §5.1 | 无 | testQuantity=0, positiveCount=1 / 0 |
前者失败;后者通过 |
| SYJC-UT-007 | 检出率计算 | 常规比值 | 单元测试 | JUnit5 | §2.3 | 无 | calcRate(100, 12) |
返回 0.1200(与 decimal(8,4) 一致) |
| SYJC-UT-008 | 检出率计算 | 零检测量 | 单元测试 | JUnit5 | §2.3 | 无 | calcRate(0, 0) |
返回 0 |
| SYJC-UT-009 | 检出率计算 | 全阴性 | 单元测试 | JUnit5 | 边界 | 无 | calcRate(50, 0) |
返回 0 |
| SYJC-UT-010 | Service | 新增忽略客户端检出率 | 单元测试 | JUnit5+Mockito | §3.3.1 | 合法 Body 且 detectionRate=0.99 |
insert 前清洗并重算 |
落库 detection_rate 按数量计算,非 0.99 |
| SYJC-UT-011 | Service | 修改重算检出率 | 单元测试 | JUnit5+Mockito | §3.4 | 已有记录 10/2→0.2 | 改为 testQuantity=20, positiveCount=4 后 update |
库中 detection_rate=0.2 |
| SYJC-UT-012 | Service | 修改无状态限制 | 单元测试 | JUnit5+Mockito | §5.3 | 任意有效记录 | update 改 sampleSource |
成功 |
| SYJC-UT-013 | Service | 列表筛选 SQL | 单元测试 | JUnit5 | §3.1.1 | 无 | sampleSource=3 |
XML 含 sample_source = 3 |
| SYJC-UT-014 | Service | 列表排序 | 单元测试 | JUnit5 | 技术方案 | 无 | 检查 ORDER BY | test_date DESC, create_time DESC |
| SYJC-UT-015 | Service | 删除无状态限制 | 单元测试 | JUnit5+Mockito | §5.4 | 任意记录 | deleteById |
成功 |
| SYJC-UT-016 | 检疫点 | 必填 | 单元测试 | JUnit5 | §5.1 | 无 | quarantineStationId=null |
失败 |
| SYJC-UT-017 | 检疫点 | 仅正常运营 | 单元测试 | JUnit5+Mockito | §2.5 | Mock 停业站 | validateQuarantineStationId |
失败;正常站通过 |
| SYJC-UT-018 | 检疫点 | 列表 SQL 筛选 | 单元测试 | JUnit5 | §3.1.1 | 无 | 检查 Mapper XML | 含 quarantine_station_id = #{quarantineStationId} |
| 用例编号 | 测试模块 | 测试项 | 测试类型 | 测试工具 | 测试目的 | 前置条件 | 测试步骤 | 预期结果 |
|---|---|---|---|---|---|---|---|---|
| SYJC-API-001 | 列表 | 默认分页排序 | 接口测试 | Postman/curl | §5.2 | 已登录;有多条 | GET .../labDetection/list |
rows≤20;testDate 倒序 |
| SYJC-API-002 | 列表 | 样本来源筛选 | 接口测试 | Postman | 精确 | 含来源 1、2 各一条 | sampleSource=2 |
仅「疫情上报送检」 |
| SYJC-API-003 | 列表 | 未选来源不过滤 | 接口测试 | Postman | 可空 | 多种来源 | 不传 sampleSource |
返回全部 |
| SYJC-API-004 | 新增 | 合法全字段 | 接口测试 | Postman | §5.1 | 已登录 | POST testDate、sampleSource=1、testQuantity=100、positiveCount=5 |
成功;detectionRate=0.05 |
| SYJC-API-005 | 新增 | 零检测量合法 | 接口测试 | Postman | §5.1 | 已登录 | testQuantity=0, positiveCount=0 |
成功;detectionRate=0 |
| SYJC-API-006 | 新增 | 非法样本来源 | 接口测试 | Postman | §3.2 | 已登录 | sampleSource=9 |
失败 |
| SYJC-API-007 | 新增 | 必填缺失 | 接口测试 | Postman | 必填 | 已登录 | 缺 testDate |
失败 |
| SYJC-API-008 | 新增 | 阳性大于检测量 | 接口测试 | Postman | §5.1 | 已登录 | testQuantity=10, positiveCount=11 |
失败 |
| SYJC-API-009 | 新增 | 零检测量阳性非零 | 接口测试 | Postman | §5.1 | 已登录 | testQuantity=0, positiveCount=1 |
失败 |
| SYJC-API-010 | 新增 | 客户端检出率被忽略 | 接口测试 | Postman | §3.3.1 | 已登录 | POST 带 detectionRate=0.99,实际 10/1 |
成功;详情 detectionRate=0.1 |
| SYJC-API-011 | 详情 | 有效 id | 接口测试 | Postman | §5.5 | 已登录 | GET .../labDetection/{id} |
含 testDate、sampleSource、数量、detectionRate、审计字段 |
| SYJC-API-012 | 详情 | 无效 id | 接口测试 | Postman | 异常 | 已登录 | 不存在 id | 404 或业务失败 |
| SYJC-API-013 | 修改 | 合法修改并重算率 | 接口测试 | Postman | §5.3 | 记录 100/10 | PUT 改 testQuantity=50, positiveCount=5 |
成功;detectionRate=0.1 |
| SYJC-API-014 | 修改 | 修改后阳性超量 | 接口测试 | Postman | §3.2 | 有效记录 | PUT positiveCount 大于 testQuantity |
失败;数据不变 |
| SYJC-API-015 | 修改 | 携带检出率被忽略 | 接口测试 | Postman | §3.3.1 | 有效记录 | PUT 带 detectionRate=0.5,数量 10/2 |
成功;detectionRate=0.2 |
| SYJC-API-016 | 删除 | 单条删除 | 接口测试 | Postman | §5.4 | 已登录 | DELETE .../{id} |
成功;详情不可查 |
| SYJC-API-017 | 删除 | 批量删除 | 接口测试 | Postman | 批量 | 多条 id | DELETE id1,id2 |
均不可查 |
| SYJC-API-018 | 端到端 | 登记至删除 | 接口测试 | Postman | §4 | 已登录 | 新增→列表→详情→改→再详情→删 | 各步成功;删除后列表无该条 |
| SYJC-API-019 | 鉴权 | 未登录 | 接口测试 | curl | 安全 | 无 Token | GET .../list |
401 或统一未登录 |
| SYJC-API-020 | 权限 | 无写权限 | 接口测试 | Postman | 越权 | 仅 list 权限 | POST / PUT / DELETE |
无权限失败 |
| SYJC-API-021 | 响应 | 失败可读 | 接口测试 | Postman | §8 | 已登录 | 触发 API-008、009、014 | code、msg 可区分场景 |
| SYJC-API-022 | 列表 | 检疫点精确筛选 | 接口测试 | Postman | §5.2 | 两检疫点各一条 | quarantineStationId=2 |
仅该站记录 |
| SYJC-API-023 | 下拉 | 检疫点选项 | 接口测试 | Postman | §3.6 | 库有正常/停业站 | GET .../quarantineStationOptions |
仅 operate_status=1;含 id、stationName |
| SYJC-API-024 | 新增 | 检疫点必填 | 接口测试 | Postman | §5.1 | 已登录 | POST 缺 quarantineStationId |
失败 |
| SYJC-API-025 | 新增 | 非正常检疫站 | 接口测试 | Postman | §2.5 | 停业站 id=3 | quarantineStationId=3 |
失败 |
测试工具:Playwright + Chromium(channel: 'chrome' 使用本机 Google Chrome)。
| 用例编号 | 测试模块 | 测试项 | 测试类型 | 测试工具 | 测试目的 | 前置条件 | 测试步骤 | 预期结果 |
|---|---|---|---|---|---|---|---|---|
| SYJC-UI-001 | 列表 | 默认加载排序 | UI 测试 | Playwright+Chrome | §5.2 | 已登录;有数据 | 进入「实验室检测」 | 分页默认 20;检测日期新在前 |
| SYJC-UI-002 | 列表 | 样本来源筛选 | UI 测试 | Playwright+Chrome | 精确 | 含多种来源 | 选「调运检疫」→搜索 | 仅对应行 |
| SYJC-UI-003 | 列表 | 重置筛选 | UI 测试 | Playwright+Chrome | 恢复 | 已筛选 | 点「重置」 | 条件清空;显示全部 |
| SYJC-UI-004 | 列表 | 操作列完整 | UI 测试 | Playwright+Chrome | §6 | 任意有效行 | 查看操作列 | 查看、编辑、删除可见(按权限) |
| SYJC-UI-005 | 新增 | 合法提交 | UI 测试 | Playwright+Chrome | §5.1 | 已登录 | 新增→填日期、来源、检测量 100、阳性 8→确定 | 成功;列表检出率显示 8.00%(或 8%) |
| SYJC-UI-006 | 新增 | 必填校验 | UI 测试 | Playwright+Chrome | 必填 | 已登录 | 漏选样本来源或空检测量→提交 | 校验失败,未提交 |
| SYJC-UI-007 | 新增 | 阳性大于检测量 | UI 测试 | Playwright+Chrome | §5.1 | 已登录 | 检测量 10、阳性 11→提交 | 提示「阳性检出数不能大于检测量」等 |
| SYJC-UI-008 | 新增 | 检出率只读 | UI 测试 | Playwright+Chrome | §2.3 | 已登录 | 打开新增表单;改检测量/阳性 | 检出率自动变化且不可手输 |
| SYJC-UI-009 | 编辑 | 修改成功并重算率 | UI 测试 | Playwright+Chrome | §5.3 | 已有行 | 编辑→检测量改 200、阳性 20→保存 | 列表检出率 10.00% |
| SYJC-UI-010 | 编辑 | 任意记录可编辑 | UI 测试 | Playwright+Chrome | §5.3 | 旧数据行 | 点「编辑」并保存 | 无「已结案不可改」类拦截 |
| SYJC-UI-011 | 删除 | 单条确认删除 | UI 测试 | Playwright+Chrome | §5.4 | 任意行 | 删除→确认 | 行消失 |
| SYJC-UI-012 | 删除 | 取消确认 | UI 测试 | Playwright+Chrome | 确认框 | 任意行 | 删除→取消 | 行仍在 |
| SYJC-UI-013 | 删除 | 批量删除 | UI 测试 | Playwright+Chrome | 批量 | 多条 | 勾选→批量删→确认 | 选中均消失 |
| SYJC-UI-014 | 详情 | 字段完整 | UI 测试 | Playwright+Chrome | §5.5 | 任意记录 | 点「查看」 | 含日期、来源、检测量、阳性、检出率、创建时间等 |
| SYJC-UI-015 | 端到端 | 全流程 | UI 集成 | Playwright+Chrome | §4 | 可新增 | 新增→筛选→编辑→查看→删除 | 与需求一致 |
| SYJC-UI-016 | 权限 | 只读账号 | UI 测试 | Playwright+Chrome | §9 | 无 add/edit/remove | 登录进模块 | 无对应按钮或操作拒绝 |
| SYJC-UI-017 | 错误提示 | 业务失败可读 | UI 测试 | Playwright+Chrome | §8 | 已登录 | 触发阳性超量提交 | Message 含明确原因 |
| SYJC-UI-018 | 列表 | 列展示单位 | UI 测试 | Playwright+Chrome | §2.2 | 有数据 | 查看列表检测量/阳性列 | 带「份」或与需求一致的单位展示 |
npm i -D @playwright/test;npx playwright install chromium;配置 use: { channel: 'chrome' }。page.getByText('实验室检测') 或 goto('/diseaseDetection/labDetection')(以实际路由为准)。el-select 选样本来源后点「搜索」。expect(rateInput).toBeDisabled() 且文案含 %;如 100 + 8 → 8.00%。el-message-box 确认;批量勾选后点工具栏删除。| 类别 | 单元 UT | 接口 API | 界面 UI |
|---|---|---|---|
| 正常流程 | UT-007~012、014 | API-001~005、011、013、016~018 | UI-001~006、009~011、014~015 |
| 异常流程 | UT-001~006 | API-006~009、012、014、019~021 | UI-006~007、012、017 |
| 业务约束 | UT-005~010、015 | API-002~003、008~010、015 | UI-002~004、008、018 |
| 需求章节 | 要点 | 主要对应用例 |
|---|---|---|
| §5.1 新增 | 四字段必填、检出率系统算 | UT-001~010;API-004~010;UI-005~008 |
| §5.2 列表 | 来源筛选、排序 | UT-013~014;API-001~003;UI-001~003 |
| §5.3 修改 | 均可改、重算率 | UT-011~012;API-013~015;UI-009~010 |
| §5.4 删除 | 均可删、批量 | UT-015;API-016~017;UI-011~013 |
| §5.5 详情 | 全字段含检出率 | API-011;UI-014 |
| §2.3 检出率 | 公式、零检测量、只读 | UT-006~009;API-005、010;UI-008 |
| §6 矩阵 | 查看/改/删 | UI-004、010 |
| §8 错误 | 可读提示 | API-021;UI-017 |
| 版本 | 说明 |
|---|---|
| 1.0 | 初版:单元 15、接口 21、UI 18;Playwright+Chrome;Base /diseaseDetection/labDetection |