Files
xst 901b6741ff test(运单资料文件包下载): 需求文档与 QE Fleet 全流程测试设计产物入库
- 需求 v1.0 定稿(md+docx)与 UI 原型入库;确认单判定 docx 为同文载体、安徽运八并行无冲突
- 全流程产物:分析 + 59 测试点 + 85 用例 + 测试数据 145 组;评审 3 阻断与覆盖缺口 GAP-001 已修复,裁决 PASS_WITH_FIX
- 导出 Excel(云效模型)+ XMind + 版本快照 v1;含 docx 生成脚本与转换校验产物
- .gitignore 排除 node_modules 与 Excel 锁文件
2026-09-09 09:31:55 +08:00

576 lines
39 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 运单资料文件包下载需求 测试点
> 生成时间: 2026-09-08
> 依据: output/analysis/运单资料文件包下载需求_分析.md(26 条 REQ)、_风险评估.md(RISK-AVAILABILITY P1 等 5 项)、_测试策略.md、_关联与冲突.md(无冲突,与安徽运八需求并行)
> 知识库: project_profile.md、common_missed_scenes.md、historical_defects.md、definition_of_done.md、terminology.md
> 原型: resources/prototypes/anhuibaba_file_package.html
> 术语: 批次 / 文件包(批次包)/ 运单包 / 最小序号运单 / 电子回单 / 失败清单 / 审计日志 / 幂等性,均与 knowledge_base/01_standards/terminology.md 一致
## 测试点概览
- 总测试点数: 59
- P0: 25 / P1: 26 / P2: 6 / P3: 2
- 来源分布: [需求] 47, [漏测清单] 14, [风险矩阵] 7, [项目画像] 7, [历史缺陷] 4, [最佳实践] 3, [冲突修订] 1([营销规则] 不适用:本项目无营销域,见"不适用说明")
### 覆盖维度对照(12/12 全覆盖)
| 维度 | 对应测试点 |
| :--- | :--- |
| 主流程 | TP-M-001、TP-U-001/002、TP-T-001、TP-P-001/003/004、TP-D-001 |
| 异常流程 | TP-U-003/004/005、TP-T-007、TP-P-008、TP-N-006、TP-N-003 |
| 边界条件 | TP-U-006/007、TP-P-011/012、TP-N-004 |
| 数据校验 | TP-U-008~016、TP-T-004/006、TP-P-005/006/010 |
| 状态流转 | TP-T-001/002/003/007、TP-D-004、TP-N-004 |
| 权限控制 | TP-M-002/003/004/005、TP-N-005 |
| 并发幂等 | TP-D-002、TP-U-018、TP-N-002/003、TP-P-009 |
| 弱网超时 | TP-D-006、TP-N-003、TP-U-017 |
| 规则组合 | TP-P-002/007、TP-U-015、TP-T-002 |
| 历史缺陷防御 | TP-P-012/013、TP-D-004、TP-N-003 |
| 跨需求冲突防御 | TP-N-008(关联与冲突报告未识别冲突条目,落"并行不干扰"回归验证点) |
| 项目高风险场景 | TP-N-005/006、TP-M-005、TP-U-007(OBS 依赖/敏感合规/机构隔离/Excel 边界) |
### 不适用说明(显式标注,非静默省略)
- [营销规则] 维度不适用:项目画像 §4 明确本项目无营销活动/优惠券/积分体系,本需求亦无营销规则。
- [历史缺陷] BUG-202607-04(省份代码硬编码)不适用:本需求为资料导出打包,无监管上报省份字段;其余 3 条历史缺陷(阶段依赖链前后端双重校验、重试幂等、跨模块数据溯源)均已转化为 TP-D-004、TP-N-003、TP-P-012/013。
### 待确认项汇总(评审时确认,确认后重点回归)
| 编号 | 待确认问题 | 影响测试点 |
| :--- | :--- | :--- |
| Q1 | "查看结构/文件包结构预览"与"失败任务删除"仅见于原型,需求正文未定义 | TP-T-008 |
| Q2 | 仅表头 0 数据行的空清单如何处理(拒绝 or 创建空任务) | TP-U-006 |
| Q3 | 2000 行上限口径是否含表头行(本文件按"数据行 2000"设计) | TP-U-006 |
| Q4 | 打包期间源数据变更(新回单/换证件照/运单关闭)按任务开始时刻快照还是实时拉取 | TP-P-013 |
| Q5 | 过期任务的列表展示形态(原型有"已过期"标签,需求状态机仅 5 态) | TP-N-004 |
| Q6 | 失败清单下载是否同样记审计日志 | TP-D-003 |
---
## 模块 TP-M 菜单与权限(5 个测试点)
### TP-M-001: 菜单入口与页面骨架
- 优先级: P0
- 类型: 功能测试
- 覆盖维度: 主流程
- 来源: [需求]
- 描述: 对应 REQ-001。运八平台端"运单管理"相关模块下出现独立菜单"运单文件包",页面自上而下为上传任务入口(模板下载 + 上传按钮)与任务列表。
- 关键验证点: 菜单名称逐字为"运单文件包"且挂载位置正确;页面含"下载模板""上传清单"按钮与任务列表表格;面包屑/菜单高亮正确;上传入口在前、任务列表在后。
### TP-M-002: 运营人员可见可操作
- 优先级: P0
- 类型: 权限测试
- 覆盖维度: 权限控制
- 来源: [需求]
- 描述: 对应 REQ-002。被授权的运营人员(super_admin 验证)登录后可见菜单并可完成上传、查看进度、下载文件包全链路。
- 关键验证点: 运营角色菜单可见;上传/下载操作不被拦截;页面内无其他角色越权入口;权限分配由平台管理员在角色管理完成(项目画像 §2.2)。
### TP-M-003: 非授权角色不可见且 URL 直达被拦截
- 优先级: P0
- 类型: 权限测试
- 覆盖维度: 权限控制
- 来源: [需求][漏测清单]
- 描述: 对应 REQ-002。财务、客服、车队长、司机等非授权角色登录平台端不可见该菜单;未登录或低权限账号直接输入页面 URL 访问被拦截跳转登录/403。
- 关键验证点: 各非授权角色侧边栏无"运单文件包"入口;直接 URL 访问返回 403 或跳登录页(漏测清单 §3 未登录访问);页面不渲染任务列表数据。
### TP-M-004: 接口层越权防御
- 优先级: P1
- 类型: 安全测试
- 覆盖维度: 权限控制
- 来源: [项目画像][风险矩阵]
- 描述: 对应 REQ-002,风险矩阵 RISK-COMPLIANCE(P2 合规)缓解。前端隐藏菜单不够,服务端接口必须独立鉴权——无菜单权限账号直接调用任务列表/上传/下载 API 应被拒绝(对应项目画像必测异常"越权操作")。
- 关键验证点: 无权限会话调用上传/列表/下载接口返回 401/403;携带他人任务编号调用下载接口被数据权限拦截;接口不因缺少前端入口而放行。
### TP-M-005: 机构数据隔离
- 优先级: P2
- 类型: 安全测试
- 覆盖维度: 权限控制
- 来源: [项目画像]
- 描述: 对应 REQ-002/REQ-026。项目画像要求权限类用例必须验证机构数据隔离:多机构部署下,任务列表、上传任务、下载文件包均不得跨机构泄露运单与证件资料。
- 关键验证点: A 机构运营账号不可见 B 机构任务;上传清单含 B 机构运单号时按"运单号不存在/无权限"类行级失败处理(不导出);下载 zip 内不含他机构运单资料。
---
## 模块 TP-U 上传与校验(18 个测试点)
### TP-U-001: 模板下载
- 优先级: P0
- 类型: 功能测试
- 覆盖维度: 主流程
- 来源: [需求]
- 描述: 对应 REQ-003。上传入口提供模板下载,模板为 .xlsx 且仅含三列:序号、货源单号、运单号。
- 关键验证点: 下载得到合法 .xlsx;列名与需求 4.2.1 逐字一致;用下载模板填写 1 条合法数据可直接上传成功(模板自洽);模板内含填写说明不参与数据解析。
### TP-U-002: 正常上传创建任务(正向成功链路)
- 优先级: P0
- 类型: 功能测试
- 覆盖维度: 主流程
- 来源: [需求][漏测清单]
- 描述: 对应 REQ-001/REQ-004/REQ-005。合法清单上传后系统创建打包任务并开始异步处理——不能只测"校验失败",正向成功链路必须覆盖。
- 关键验证点: 上传成功提示含任务编号;任务列表置顶新增一行(待处理→处理中);源文件名/上传人/上传时间正确;总行数与清单数据行数一致;"全部任务"统计卡片计数 +1(原型)。
### TP-U-003: 非 xlsx 格式整体拒绝
- 优先级: P0
- 类型: 异常测试
- 覆盖维度: 异常流程
- 来源: [需求]
- 描述: 对应 REQ-005。上传 .docx/.xls/.csv/.zip/.png 或将 zip 改后缀为 .xlsx 的文件,上传即整体拒绝。
- 关键验证点: 提示具体原因(格式不支持);不创建任务(列表无新增行);文件选择器与后端双重限制(前端过滤 + 后端再校验,防绕过前端直传 API)。
### TP-U-004: 列名缺失或不符整体拒绝
- 优先级: P0
- 类型: 异常测试
- 覆盖维度: 异常流程
- 来源: [需求]
- 描述: 对应 REQ-005。表头缺列、列名错别字、多出未知列均整体拒绝;但三列名正确仅顺序不同时应允许(需求约束的是列名而非列顺序)。
- 关键验证点: 缺"序号"列拒绝、缺"货源单号"列拒绝、列名拼写错误拒绝、多余列拒绝;列顺序打乱(列名齐全)上传成功;提示信息指明具体列问题。
### TP-U-005: 文件损坏整体拒绝
- 优先级: P1
- 类型: 异常测试
- 覆盖维度: 异常流程
- 来源: [需求]
- 描述: 对应 REQ-005。上传截断文件、伪造 xlsx 头的非法文件、加密带密码的 xlsx,上传即拒绝且服务端不抛 500 白屏。
- 关键验证点: 提示"文件损坏/无法读取"类明确原因;不创建任务;后台无残留半任务;加密 xlsx 给出可理解提示(非堆栈报错)。
### TP-U-006: 行数边界(2000/2001/空清单)
- 优先级: P1
- 类型: 边界测试
- 覆盖维度: 边界条件
- 来源: [需求]
- 描述: 对应 REQ-004(确认决议 #9)。单文件数据行 2000 行成功、2001 行整体拒绝。
- 关键验证点: 恰好 2000 行有效清单上传成功且成功数=2000;2001 行拒绝且不创建任务;空清单(仅表头 0 数据行)的处理——⚠️ 待确认 Q2:建议拒绝并提示"清单无数据行",不得生成空 zip;⚠️ 待确认 Q3:行数口径是否含表头。
### TP-U-007: 文件大小边界(10MB 临界)
- 优先级: P1
- 类型: 边界测试
- 覆盖维度: 边界条件
- 来源: [需求][项目画像]
- 描述: 对应 REQ-004(确认决议 #9)。项目画像 §8.3 提示本项目 Excel 处理有大数据量惯例,需验证行数与大小两条限制相互独立生效。
- 关键验证点: 恰好 10MB(临界值)上传成功、10MB+1B 拒绝;行数少但体积超 10MB(如嵌大图/长文本)被大小限制拒绝;行数超限但体积小于 10MB 被行数限制拒绝;两类超限提示原因可区分。
### TP-U-008: 序号非正整数行级失败
- 优先级: P0
- 类型: 数据校验
- 覆盖维度: 数据校验
- 来源: [需求]
- 描述: 对应 REQ-006。序号为 0、负数、小数(1.5)、文本(abc)、空、全角数字的行计入失败清单,其余行正常处理。
- 关键验证点: 各非法序号行进入失败清单且失败原因准确;有效行不受影响;任务记"已完成·部分失败";失败数统计准确。
### TP-U-009: 序号重复行级失败(全文件唯一)
- 优先级: P0
- 类型: 数据校验
- 覆盖维度: 数据校验
- 来源: [需求][最佳实践]
- 描述: 对应 REQ-006(确认决议 #13:序号全文件唯一)。同一序号出现多行时,重复行计入失败清单;重复序号跨批次出现同样生效(唯一性范围是全文件而非批次内)。
- 关键验证点: 重复行失败原因明确;保留行与剔除行的判定规则稳定(如首现行保留);序号决定"最小序号运单"判定,重复序号被剔除后不得影响证件挂载(联动 TP-P-007)。
### TP-U-010: 货源单号/运单号为空行级失败
- 优先级: P0
- 类型: 数据校验
- 覆盖维度: 数据校验
- 来源: [需求]
- 描述: 对应 REQ-006。货源单号或运单号为空串、纯空格、Excel 空单元格的行计入失败清单。
- 关键验证点: 空串与纯空格均判为空;失败原因区分"货源单号为空"/"运单号为空";仅表头行不误判为数据行。
### TP-U-011: 运单号在系统中不存在行级失败
- 优先级: P0
- 类型: 数据校验
- 覆盖维度: 数据校验
- 来源: [需求]
- 描述: 对应 REQ-006。运单号在系统无匹配记录的行计入失败清单(原型失败原因文案:"运单号在系统中不存在")。
- 关键验证点: 不存在运单号失败且原因准确;运单号大小写/前后空格的匹配口径一致(同一规则应用于存在性校验与实际导出);一行失败不影响同文件其他有效行。
### TP-U-012: 货源单号与运单实际所属货源不一致行级失败
- 优先级: P0
- 类型: 数据校验
- 覆盖维度: 数据校验
- 来源: [需求]
- 描述: 对应 REQ-006(确认决议 #6)。运单号存在但货源单号与该运单在系统中实际所属货源不一致,该行失败;运单号+其正确货源单号配对则成功(正向配对验证)。
- 关键验证点: 错配行失败原因准确(原型文案:"文件中货源单号与该运单实际所属货源不一致");正确配对行正常打包;同一运单在不同货源下的归属以系统数据为准,不因清单填写顺序改变。
### TP-U-013: 运单号文件内重复行级失败
- 优先级: P0
- 类型: 数据校验
- 覆盖维度: 数据校验
- 来源: [需求]
- 描述: 对应 REQ-006。同一运单号在文件内出现两行,重复行计入失败清单,首次出现行保留处理,防止同一运单被重复打包。
- 关键验证点: 首现行打包且仅出现一次;重复行进失败清单且原因明确(区别于序号重复的原因文案);两行序号不同的重复运单不产生两个运单包。
### TP-U-014: 运单缺司机或车辆信息无法归批行级失败
- 优先级: P0
- 类型: 数据校验
- 覆盖维度: 数据校验
- 来源: [需求]
- 描述: 对应 REQ-006。运单在系统内缺少司机或车辆信息导致三要素不全、无法归批的行计入失败清单,失败原因标注"无法归批"。
- 关键验证点: 缺司机信息的运单失败且原因准确;缺车辆信息的运单失败且原因准确;该行剔除后批次划分正确重算(若其本应为某批次最小序号,联动 TP-P-007)。
### TP-U-015: 单文件混合多类错误(规则组合)
- 优先级: P1
- 类型: 异常测试
- 覆盖维度: 规则组合
- 来源: [需求][最佳实践]
- 描述: 对应 REQ-006/REQ-007。同一文件同时含多类数据级错误(序号重复+运单不存在+货源不匹配+无法归批)时各行独立判定;文件级错误与数据级错误共存时文件级优先整体拒绝。
- 关键验证点: 各失败行原因分别准确、互不串行;成功行数+失败行数=总行数;任务状态"已完成·部分失败";文件级+数据级共存时整体拒绝且不进入失败清单流程。
### TP-U-016: 单元格特殊字符与超长内容防御
- 优先级: P1
- 类型: 异常测试
- 覆盖维度: 数据校验
- 来源: [漏测清单]
- 描述: 对应 REQ-006。清单单元格含 Emoji、SQL 注入字符、HTML 标签、超长字符串(超过系统字段长度)时系统不崩溃、不误吞有效行;源文件名含特殊字符/超长时列表展示与 zip 命名不异常。
- 关键验证点: 单号含 `'; DROP TABLE--`、`<script>`、Emoji 的行按"运单号不存在"或对应数据级原因失败,系统无 SQL/HTML 注入副作用;超长单号行失败不截断误判;超长源文件名在任务列表截断省略并有 tooltip 完整名(原型 .te 样式)。
### TP-U-017: 上传弹窗交互细项
- 优先级: P1
- 类型: 功能测试
- 覆盖维度: 主流程
- 来源: [漏测清单][需求]
- 描述: 对应 REQ-004(原型交互)。上传弹窗的按钮态与交互流:未选文件时"开始上传并创建任务"置灰;选择文件后激活并回显文件名/大小/行数;取消/关闭/遮罩点击关闭;重复打开弹窗状态重置;上传请求发出后按钮防重复点击。
- 关键验证点: 初始态按钮 disabled;选择文件后 drop 区变绿色态并显示"已选择:文件名(大小·行数)";关闭后重开弹窗不残留上一次文件;上传中快速连点"开始上传"仅产生一个任务(防抖,联动 TP-N-003);拖拽上传与点击选择均可。
### TP-U-018: 同一文件重复上传生成独立任务
- 优先级: P2
- 类型: 功能测试
- 覆盖维度: 并发幂等
- 来源: [需求][漏测清单]
- 描述: 对应 REQ-023(异常场景 #7,确认决议口径:允许、不合并去重)。同一 xlsx 先后上传两次生成两个独立任务,各自打包、各自下载,互不影响。
- 关键验证点: 两个任务编号不同、总行数一致;两任务各自完成且 zip 内容一致互不覆盖;删除其中一个任务不影响另一个。
---
## 模块 TP-T 任务与列表(8 个测试点)
### TP-T-001: 任务状态机正向流转与状态标签
- 优先级: P0
- 类型: 功能测试
- 覆盖维度: 状态流转
- 来源: [需求][漏测清单]
- 描述: 对应 REQ-008。待处理 → 处理中 → 已完成 全链路状态流转正确,各状态标签独立验证颜色与文案(漏测清单 §6 标签颜色映射:蓝/绿/红/橙不得混用)。
- 关键验证点: 五种状态(待处理/处理中/已完成/已完成·部分失败/失败)各自标签文案与颜色正确;状态单向推进不回跳;已完成任务完成时间有值,未完成任务完成时间为"—"。
### TP-T-002: 已完成·部分失败状态
- 优先级: P0
- 类型: 功能测试
- 覆盖维度: 状态流转
- 来源: [需求]
- 描述: 对应 REQ-008/REQ-007(确认决议 #7)。存在失败行但有效行打包成功时,任务记"已完成·部分失败",且仍可下载文件包(不是失败态)。
- 关键验证点: 状态标签为橙色"已完成·部分失败";成功/失败数准确;该状态同时出现"下载文件包"与"失败清单"两个操作按钮;成功数>0 时总包内只有成功运单。
### TP-T-003: 失败状态与删除重传
- 优先级: P1
- 类型: 异常测试
- 覆盖维度: 状态流转
- 来源: [需求]
- 描述: 对应 REQ-008/REQ-024(异常场景 #10)。系统级错误导致整体未生成文件包的任务置"失败",支持删除后重新上传。
- 关键验证点: 失败任务无下载按钮(总行数有值、成功 0 失败 0、完成时间"—");删除按钮仅失败任务可见(状态与按钮映射,漏测清单 §4);删除后列表移除且确认交互防误删;删除后重新上传同清单可成功。
### TP-T-004: 任务列表字段、排序与分页
- 优先级: P1
- 类型: 数据校验
- 覆盖维度: 数据校验
- 来源: [需求][漏测清单]
- 描述: 对应 REQ-009。列表展示任务编号/源文件名/上传人/上传时间/任务状态/总行数/成功/失败/完成时间/操作十项字段;默认排序、分页、查询重置完整(漏测清单 §4 后台 CRUD 检查项)。
- 关键验证点: 字段与需求 4.3.2 一致无缺漏;默认按上传时间倒序(最新在上);分页总数/页码/翻页正确,翻页后数据不重复不丢失;若提供状态筛选/搜索则验证筛选结果与重置(未提供则确认设计取舍)。
### TP-T-005: 异步处理与进度可见
- 优先级: P1
- 类型: 功能测试
- 覆盖维度: 主流程
- 来源: [需求]
- 描述: 对应 REQ-019。上传后无需等待,任务后台异步处理;处理中任务展示进度(成功/失败条数),离开页面再返回进度持续推进。
- 关键验证点: 上传后页面立即可操作不阻塞;处理中行显示进度条与"已处理/总数"(原型 186/200 形式);退出登录或关闭浏览器后任务仍在后台推进,重新进入进度继续;进度最终与成功/失败数一致。
### TP-T-006: 失败清单下载内容
- 优先级: P1
- 类型: 数据校验
- 覆盖维度: 数据校验
- 来源: [需求]
- 描述: 对应 REQ-018。存在失败行的任务显示"失败清单"操作,下载 xlsx 含序号/货源单号/运单号/失败原因四列且与实际失败行一一对应。
- 关键验证点: 全部成功任务不显示失败清单按钮;下载的 xlsx 行数=失败数;每行四列内容与上传清单原值一致、失败原因与 TP-U-008~014 定义的文案一致;文件级被拒任务无失败清单(未创建任务)。
### TP-T-007: 任务处理中系统异常的一致性
- 优先级: P1
- 类型: 异常测试
- 覆盖维度: 异常流程
- 来源: [需求][漏测清单]
- 描述: 对应 REQ-024。打包过程中服务重启/打包进程崩溃,任务置"失败"而不是永远停留在"处理中",不产生半成品 zip 供下载。
- 关键验证点: 异常后任务状态最终为"失败"(无僵尸"处理中"任务);下载接口对该任务返回不可下载;删除重传后新任务正常完成;半成品临时文件被清理不占用保留期配额。
### TP-T-008: 任务详情与文件包结构预览弹窗(原型功能)
- 优先级: P3
- 类型: 功能测试
- 覆盖维度: 主流程
- 来源: [需求]
- 描述: 对应 REQ-011。原型提供"查看结构"弹窗(任务信息 + 文件包结构树预览),需求正文未定义此功能——⚠️ 待确认 Q1:若确认实现,验证弹窗展示源文件名/上传人时间/处理结果/批次划分及结构树;若确认裁剪,本点作废并从用例中移除。
- 关键验证点: 弹窗批次划分说明与实际归批一致;结构树命名与实际 zip 逐层一致;处理中任务不提供结构预览(原型仅"结构预览"按钮无下载);关闭按钮/遮罩关闭可用。
---
## 模块 TP-P 打包归批与文件包结构(14 个测试点)
### TP-P-001: 三要素归批正向
- 优先级: P0
- 类型: 功能测试
- 覆盖维度: 主流程
- 来源: [需求]
- 描述: 对应 REQ-010。按系统内司机姓名+身份证号+车牌号三要素归批:需求第五章示例(序号 1、3 同为张三+皖A12345)归一批并生成一个批次包。
- 关键验证点: 归批依据是系统内数据而非清单填写内容(清单不含司机列,无法误填);zip 内批次包数量与三要素去重数一致;需求第五章示例结果逐项复现(批次①含运单包 1、3;批次②单运单 2)。
### TP-P-002: 换车/换司机拆批(规则组合)
- 优先级: P0
- 类型: 功能测试
- 覆盖维度: 规则组合
- 来源: [需求]
- 描述: 对应 REQ-010。任一要素不同即拆分批次:同一司机换车牌拆两批;同一车牌换司机拆两批;同名同证司机换车不合并。
- 关键验证点: 同司机+同身份证+不同车牌 → 两个批次包;同车牌+不同司机(或同司机不同身份证)→ 两个批次包;各批次内运单包归属正确、最小序号按各自批次独立判定。
### TP-P-003: 三层目录结构与命名规则
- 优先级: P0
- 类型: 数据校验
- 覆盖维度: 数据校验
- 来源: [需求]
- 描述: 对应 REQ-011。总包 `运单资料_【任务编号】.zip` → 批次包 `【司机姓名】-【身份证号】-【车牌号】` → 运单包 `【序号】-【运单号】-【货源单号】`,最小序号运单包追加 `-含司机及车辆证件` 后缀。
- 关键验证点: 三层命名与需求 4.4.2 示例逐字一致(含连接符"-",下划线"_");批次包身份证号为完整 18 位明文(确认决议 #3);非最小序号运单包名不含证件后缀;zip 顶层无多余目录层级。
### TP-P-004: 运单包内容矩阵与单运单批次
- 优先级: P0
- 类型: 功能测试
- 覆盖维度: 主流程
- 来源: [需求]
- 描述: 对应 REQ-012(验收要点 2、3)。最小序号运单包含合同/电子回单/司机证件/车辆证件四个子目录;其余运单包仅含合同/电子回单;单运单批次的运单包仍含四个子目录。
- 关键验证点: 最小序号运单包 4 子目录齐全;其余运单包确无司机/车辆证件子目录(不是空目录也不得有文件);单运单批次运单包含 4 子目录且带证件后缀;多批次任务中每批次各自满足。
### TP-P-005: 合同口径(含承运、不含委托/框架)
- 优先级: P1
- 类型: 数据校验
- 覆盖维度: 数据校验
- 来源: [需求]
- 描述: 对应 REQ-013(确认决议 #5)。合同以运单详情-合同附件为准:承运合同导出;委托合同、框架合同不导出;运单有多份合同文件时全部导出。
- 关键验证点: 合同子目录文件与运单详情页合同附件列表一致;构造含委托合同/框架合同的运单验证其不入包;多份承运合同全部出现且内容完整可打开。
### TP-P-006: 电子回单与证件档案口径
- 优先级: P1
- 类型: 数据校验
- 覆盖维度: 数据校验
- 来源: [需求]
- 描述: 对应 REQ-013。电子回单=运单全部支付记录对应的银行电子回单(多笔支付多份回单);司机证件来自运单挂载司机档案(身份证人像面/国徽面、驾驶证、从业资格证等),车辆证件来自车辆档案(行驶证、道路运输证等),以最小序号运单挂载的档案为准。
- 关键验证点: 3 笔支付的运单导出 3 份回单;证件文件种类与档案一致、可打开非损坏;批次内其余运单虽挂同批司机车辆,证件只随最小序号运单出现一份(不重复导出)。
### TP-P-007: 最小序号运单被剔除后证件挂载重算
- 优先级: P0
- 类型: 功能测试
- 覆盖维度: 规则组合
- 来源: [需求][最佳实践]
- 描述: 对应 REQ-015(确认决议 #8,异常场景 #6)。批次内最小序号运单因校验失败或文件缺失被剔除时,重新计算最小序号,司机/车辆证件改挂到新最小序号运单,后缀随迁。本规则为全需求最易错点。
- 关键验证点: 构造批次序号 1(校验失败)、3、5:证件挂到 3,运单包名 `3-…-含司机及车辆证件`,原 1 号行进失败清单;最小序号运单仅缺电子回单(文件缺失剔除)时同样重算挂载;重算后原最小序号运单包若无则不生成、若有则不得再含证件子目录;单运单批次唯一运单被剔除 → 该批次整批不出现(与失败清单一致)。
### TP-P-008: 文件缺失不阻断任务
- 优先级: P0
- 类型: 异常测试
- 覆盖维度: 异常流程
- 来源: [需求]
- 描述: 对应 REQ-015(异常场景 #4)。运单无合同、无电子回单(如运单被关闭、无支付记录)不阻断任务:对应子目录不生成,原因记入失败清单。
- 关键验证点: 无支付记录运单包内无"电子回单"子目录且失败清单记"无电子回单:运单无支付记录"类原因;已关闭运单同样不阻断;任务整体状态为"已完成·部分失败"而非"失败";其余运单正常打包。
### TP-P-009: 单文件下载失败自动重试 3 次
- 优先级: P1
- 类型: 异常测试
- 覆盖维度: 并发幂等
- 来源: [需求][项目画像]
- 描述: 对应 REQ-015。单个文件从 OBS 拉取失败自动重试 3 次(项目画像 §6.1 OBS 为关键依赖),仍失败记入失败清单,不阻断其余文件;重试期间不得重复落盘同一文件。
- 关键验证点: 模拟前 2 次 OBS 拉取失败第 3 次成功 → 文件正常入包且仅一份;3 次全失败 → 该文件记失败清单、任务继续;重试期间产生的临时文件/断点不导致 zip 内重复文件(历史缺陷 BUG-202607-02 重试幂等防御的同类场景)。
### TP-P-010: 子目录组织与重名文件处理
- 优先级: P1
- 类型: 数据校验
- 覆盖维度: 数据校验
- 来源: [需求]
- 描述: 对应 REQ-014。运单包内按四个子目录组织;文件保留系统原文件名;同目录重名自动追加 (1)、(2)。
- 关键验证点: 同一运单两份同名合同 → 第二份命名为 原名(1).后缀,两份均可打开且内容对应各自原件;跨运单包同名文件互不影响(不同目录允许同名);原文件名(含中文/日期)未被篡改。
### TP-P-011: 批次包命名的特殊字符与超长防御
- 优先级: P1
- 类型: 边界测试
- 覆盖维度: 边界条件
- 来源: [漏测清单]
- 描述: 对应 REQ-011。批次包名由司机姓名+身份证号+车牌号拼接,司机姓名含 Windows 非法字符(如 `张三/1`、`A"B`)、Emoji 或超长姓名导致目录名接近/超过文件系统 255 字符限制时,打包不失败、不乱码。
- 关键验证点: 非法字符被替换或转义且规则统一可解释;超长组合名不导致打包中断(截断策略需开发确认后写入用例);下载到 Windows 解压无"路径过长/非法字符"错误(联动 TP-N-007)。
### TP-P-012: 大批量打包完整性与统计一致性
- 优先级: P1
- 类型: 边界测试
- 覆盖维度: 边界条件
- 来源: [历史缺陷][漏测清单]
- 描述: 对应 REQ-012/REQ-004(防御历史缺陷 BUG-202607-03 跨模块数据不一致)。2000 行上限规模打包后,zip 内运单包/批次包数量与任务统计数(成功数)严格一致,列表数字与实际包内容不得出现"两张皮"。
- 关键验证点: 成功数=N 则 zip 内恰有 N 个运单包;批次包数量=三要素去重批次数;成功/失败数之和=总行数;多批次混合成功失败的 2000 行任务全量清点无缺包无多包。
### TP-P-013: 打包数据来源溯源与实时性
- 优先级: P1
- 类型: 数据校验
- 覆盖维度: 数据校验
- 来源: [历史缺陷]
- 描述: 对应 REQ-013/REQ-015(防御历史缺陷 BUG-202607-03/漏测清单"上报数据字段溯源")。打包读取的合同/回单/证件必须来源于运单详情-合同附件、支付流水、司机/车辆档案等正确数据源,而非旧缓存。
- 关键验证点: 上传清单后、打包完成前给运单新增一笔支付 → 回单是否纳入按既定口径处理——⚠️ 待确认 Q4(快照 or 实时),用例按确认结论落地;打包前司机档案更换证件照 → 包内为新档案照片;数据溯源核对至少覆盖回单(支付流水表)与合同(运单详情合同附件)两类。
### TP-P-014: zip 不加密的暴露面确认
- 优先级: P2
- 类型: 安全测试
- 覆盖维度: 权限控制
- 来源: [需求][风险矩阵]
- 描述: 对应 REQ-026(确认决议 #12)与 RISK-COMPLIANCE。zip 不加密属既定决策:验证 zip 无密码可直接解压、批次包名含完整身份证号明文,据此确认补偿控制(权限+审计)必须同时生效(联动 TP-N-005),不得出现"既加密又绕过"或"不加密又无审计"的中间态。
- 关键验证点: zip 无密码可解压(决策 #12 实现);批次包目录名身份证号完整非脱敏(决策 #3 实现);zip 内容含证件照片可打开;若实现侧额外加了加密需按变更决策回归本点。
---
## 模块 TP-D 下载与幂等审计(6 个测试点)
### TP-D-001: 任务完成后下载总包
- 优先级: P0
- 类型: 功能测试
- 覆盖维度: 主流程
- 来源: [需求]
- 描述: 对应 REQ-016。任务"已完成/已完成·部分失败"后列表该行显示下载按钮,下载内容为任务总包 zip(含全部批次文件包),可正常解压。
- 关键验证点: 下载文件名=`运单资料_【任务编号】.zip`;zip 完整可解压无损坏;下载不改变任务状态与统计数;"已完成·部分失败"任务同样可下载(只含成功运单)。
### TP-D-002: 重复下载幂等
- 优先级: P0
- 类型: 功能测试
- 覆盖维度: 并发幂等
- 来源: [需求]
- 描述: 对应 REQ-016(非功能"幂等"行)。同一任务重复点击下载不重复生成文件包,每次返回同一份完整 zip。
- 关键验证点: 连续下载 3 次,内容一致(哈希可比对)、服务端不重新打包(完成时间/存储不变化);两个运营账号先后下载同一任务均成功且不互相覆盖;下载中再次点击不产生第二个半成品文件。
### TP-D-003: 下载审计日志
- 优先级: P0
- 类型: 安全测试
- 覆盖维度: 权限控制
- 来源: [需求]
- 描述: 对应 REQ-017。每次下载文件包记录审计日志:操作人、时间、任务编号(术语表"审计日志"定义),敏感个人信息导出必须可追溯。
- 关键验证点: 每次下载产生一条日志且三要素齐全;重复下载逐次留痕(不是只记首次);日志时间与实际下载时间一致;⚠️ 待确认 Q6:失败清单下载是否同样记审计(失败清单含货源/运单号,建议一并留痕)。
### TP-D-004: 处理中/未完成任务不可下载(前后端双重校验)
- 优先级: P1
- 类型: 异常测试
- 覆盖维度: 状态流转
- 来源: [历史缺陷][漏测清单]
- 描述: 对应 REQ-008/REQ-016(防御历史缺陷 BUG-202607-01:仅前端控制、后端无校验)。待处理/处理中/失败/已过期任务无下载按钮,且直接调用下载 API 被后端拒绝;打包刚完成瞬间点击下载不得返回半成品。
- 关键验证点: 三类不可下载状态直接请求下载接口均返回明确错误(非 200 半成品);前端隐藏按钮 + 后端状态校验双拦截;任务完成瞬间并发请求下载 → 等待打包落库完成后返回完整包或明确"处理中"拒绝。
### TP-D-005: 按批次包单独下载不做(负向范围确认)
- 优先级: P3
- 类型: 功能测试
- 覆盖维度: 主流程
- 来源: [需求]
- 描述: 对应 REQ-025(确认决议 #11:本期不做)。页面与接口均不提供按批次文件包单独下载入口,防止过度实现。
- 关键验证点: 任务行与详情弹窗无"按批次下载"类按钮;无批次包独立下载 API 暴露(探测常见路径返回 404/403);总包下载功能不受影响。
### TP-D-006: 下载中断与大文件弱网
- 优先级: P1
- 类型: 异常测试
- 覆盖维度: 弱网超时
- 来源: [漏测清单]
- 描述: 对应 REQ-016。下载过程中网络中断/手动取消后,服务端文件包完好,可重新下载成功;1000 单规模大 zip 下载不因网关超时失败。
- 关键验证点: 中断后重新下载获得完整 zip(服务端不受影响);大 zip(1000 单含证件图)下载耗时在网关超时阈值内或支持断点/流式输出;浏览器取消下载不产生服务端异常日志刷屏。
---
## 模块 TP-N 非功能:性能/并发/保留期/异常恢复(8 个测试点)
### TP-N-001: 性能基线——1000 单 30 分钟
- 优先级: P1
- 类型: 性能测试
- 覆盖维度: 主流程
- 来源: [需求][风险矩阵]
- 描述: 对应 REQ-020(RISK-AVAILABILITY P1 的容量侧面)。1000 单规模任务从上传到"已完成"30 分钟内完成,并记录耗时基线供回归对比。
- 关键验证点: 1000 单任务实测耗时 <30 分钟(分批混合多司机/多批次构造);进度条持续推进不长时间停滞;2000 单上限规模做观测性验证(超出需求值仅记录不设卡);任务完成质量不受规模影响(抽检包完整性)。
### TP-N-002: 多任务并发排队(并发上限 1~2)
- 优先级: P1
- 类型: 并发测试
- 覆盖维度: 并发幂等
- 来源: [需求][风险矩阵]
- 描述: 对应 REQ-022(异常场景 #8,风险矩阵 RISK-AVAILABILITY P1 主场景,不得省略)。同时提交 3 个以上任务时后台排队,并发处理数不超过 1~2,全部任务最终完成不丢失。
- 关键验证点: 并发 5 任务时同时"处理中"的数量 ≤2,其余停留"待处理";排队任务按提交顺序依次转为处理中;5 个任务最终全部完成且包完整;排队期间上传入口不被锁死(可继续新建任务)。
### TP-N-003: 并发提交与重复提交幂等(历史缺陷防御)
- 优先级: P1
- 类型: 并发测试
- 覆盖维度: 并发幂等
- 来源: [漏测清单][历史缺陷]
- 描述: 对应 REQ-022/REQ-023(防御历史缺陷 BUG-202607-02"重试+手动触发并发"与漏测清单"重复提交")。同一瞬间重复提交上传请求不产生重复任务;上传请求超时后重试不落双任务。
- 关键验证点: 前端防抖 + 后端幂等键双保险:同文件毫秒级并发双击仅创建 1 个任务;上传接口超时(30 秒级,漏测清单 §2)有 Loading/超时提示且重试前先查询是否已建任务;项目画像必测项"重复提交(幂等)、并发提交"全部落地。
### TP-N-004: 保留期 7 天过期边界
- 优先级: P1
- 类型: 边界测试
- 覆盖维度: 状态流转
- 来源: [需求]
- 描述: 对应 REQ-021(异常场景 #9)。文件包保留 7 天,过期自动清理、不可下载,需重新上传生成。
- 关键验证点: 第 7 天内可下载、过期时刻后下载被拒并提示重新上传;过期任务在列表的展示形态——⚠️ 待确认 Q5(原型为灰色"已过期"标签,需求状态机仅 5 态,确认新增展示态 or 保持原状态+置灰按钮);过期后存储文件被清理(无静默占用);过期任务重新上传同清单可重新生成完整包。
### TP-N-005: 敏感数据合规补偿控制(权限+审计组合)
- 优先级: P2
- 类型: 安全测试
- 覆盖维度: 权限控制
- 来源: [需求][风险矩阵][项目画像]
- 描述: 对应 REQ-002/REQ-026 与 RISK-COMPLIANCE。zip 不加密决策成立的前提是"权限控制+审计日志"补偿链完整:任何获取路径都必须经过授权与留痕, zip 不得通过免鉴权链接/可猜测 URL 泄露。
- 关键验证点: 下载 URL 携带鉴权(不可离线伪造/转发生效);带签名链接过期或一次性失效(如实现);审计日志可反查"谁在何时下载了哪个任务"(联动 TP-D-003);项目画像"权限隔离"必测要求落地(联动 TP-M-004/005)。
### TP-N-006: OBS 依赖整体不可用的降级与恢复
- 优先级: P1
- 类型: 异常测试
- 覆盖维度: 异常流程
- 来源: [项目画像][风险矩阵]
- 描述: 对应 REQ-015/REQ-024(项目画像必测异常"依赖服务不可用")。打包期间华为云 OBS 整体不可用时:单文件级走 TP-P-009 重试;依赖持续不可用导致任务整体失败时置"失败"可删除重传,不产生僵尸任务;OBS 恢复后重传成功。
- 关键验证点: OBS 断开期间任务不无限"处理中"(超时后置失败);失败任务删除重传(OBS 已恢复)全链路成功;恢复后无需人工修数据;降级期间平台其他 OBS 业务(如装卸货图片)不受本功能拖累。
### TP-N-007: 兼容性——zip 中文目录与多来源 xlsx
- 优先级: P2
- 类型: 兼容性测试
- 覆盖维度: 边界条件
- 来源: [风险矩阵][漏测清单]
- 描述: 对应 REQ-004/REQ-016(RISK-COMPATIBILITY)。zip 含中文目录名(司机姓名/车牌)在 Windows 资源管理器及常用解压工具下不乱码;WPS 等非 MS Office 生成的 xlsx 可正常解析。
- 关键验证点: 中文批次包名解压后显示正确(zip UTF-8 标志位/编码兼容,漏测清单"导入导出兼容");WPS xlsx、xls 改后缀 xlsx 分别验证接受与拒绝口径一致;Chrome/Edge/Firefox 下载文件名完整不乱码。
### TP-N-008: 新增菜单对既有功能的回归隔离(跨需求防御)
- 优先级: P2
- 类型: 回归测试
- 覆盖维度: 异常流程
- 来源: [冲突修订][项目画像]
- 描述: 对应 REQ-001。关联与冲突报告确认与安徽运八需求并行(相似度 0.105)无冲突:本需求不共享其数据口径,但新增菜单与大文件打包 IO 属平台端增量,需回归验证不破坏运单管理既有功能、不与并行需求的异步任务互相干扰。
- 关键验证点: 运单管理列表/详情/导出、运单跟踪等既有菜单功能正常;打包高峰期并发的运单导出等其他下载不受磁盘/带宽拖垮(呼应并发上限 1~2 的设计动机);运单数据被本功能只读消费——打包不修改运单状态与业务数据。
---
## REQ 追溯对照表(26/26 全覆盖)
| REQ | 测试点 |
| :--- | :--- |
| REQ-001 | TP-M-001、TP-U-002、TP-N-008 |
| REQ-002 | TP-M-002/003/004/005、TP-N-005 |
| REQ-003 | TP-U-001 |
| REQ-004 | TP-U-002/006/007/017、TP-N-007 |
| REQ-005 | TP-U-002/003/004/005 |
| REQ-006 | TP-U-008~016 |
| REQ-007 | TP-U-015、TP-T-002 |
| REQ-008 | TP-T-001/002/003、TP-D-004 |
| REQ-009 | TP-T-004 |
| REQ-010 | TP-P-001/002 |
| REQ-011 | TP-P-003/011、TP-T-008 |
| REQ-012 | TP-P-004/012 |
| REQ-013 | TP-P-005/006/013 |
| REQ-014 | TP-P-010 |
| REQ-015 | TP-P-007/008/009/013、TP-N-006 |
| REQ-016 | TP-D-001/002/004/005/006、TP-N-007 |
| REQ-017 | TP-D-003、TP-N-005 |
| REQ-018 | TP-T-006 |
| REQ-019 | TP-T-005 |
| REQ-020 | TP-N-001 |
| REQ-021 | TP-N-004 |
| REQ-022 | TP-N-002/003 |
| REQ-023 | TP-U-018、TP-N-003 |
| REQ-024 | TP-T-003/007、TP-N-006 |
| REQ-025 | TP-D-005 |
| REQ-026 | TP-P-014、TP-N-005 |