Files
Yb-QaAutomationHub/output/analysis/运单资料文件包下载需求_测试数据.md
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

298 lines
33 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.
# 运单资料文件包下载需求 测试数据
> 本文件由 data-builder Agent 自动生成,为测试用例提供精确数据支持。
> 生成时间:2026-09-08
> 数据依据:requirements/运单资料文件包下载需求.md(v1.0 定稿)、output/analysis/运单资料文件包下载需求_分析.md(REQ-001~026)、knowledge_base/00_project/project_profile.md、knowledge_base/01_standards/terminology.md、resources/prototypes/anhuibaba_file_package.html
> 来源标注说明:**需求提取**=可直接追溯至需求原文;**原型提取**=来自 UI 原型演示数据;**构造**=按需求示例风格构造的结构化数据;**需补充**=必须从测试环境获取/创建的真实数据,不得编造。
> 数据ID前缀:ACC-账号 / XLS-上传清单行 / BND-边界值 / STT-状态 / IDC-ID与命名 / ERR-异常 / CMB-组合 / CNC-并发。
---
## 自动提取数据
### 账号数据
| 数据ID | 角色 | 账号 | 权限 | 用途 | 来源 |
| :--- | :--- | :--- | :--- | :--- | :--- |
| ACC-001 | 超级管理员(代行运营人员) | super_admin / 951260684NiAn.. | 全部权限(含"运单文件包"菜单) | 主流程上传/下载/审计日志操作人 | 项目画像 §1(测试环境真实账号) |
| ACC-002 | 运营人员(受控权限) | 需补充 | 仅授权"运单文件包"菜单 | 权限正向验证(REQ-002:菜单仅授权运营人员) | 需求提取(4.1/七章);账号需在平台管理-角色管理创建 |
| ACC-003 | 非授权角色(对照) | 需补充 | 未授权"运单文件包"菜单 | 菜单不可见/接口越权验证(敏感证件照片隔离) | 构造(需求 4.1 权限控制要求的反向场景) |
| ACC-004 | 车队长 | 13113113113 / 88888888 | 车队长端权限 | 后台造数:接单并分派运单,形成"车队长运单" | 项目画像 §1 |
| ACC-005 | 司机 | 15188888888 / 88888888 | 司机端权限 | 后台造数:司机接单/上传装卸货资料,形成可打款运单 | 项目画像 §1 |
| ACC-006 | 第二运营账号 | 需补充 | 与 ACC-001 等同 | 多账号并发上传、下载审计日志"操作人"字段区分验证 | 构造(需求 4.5 审计日志:操作人/时间/任务编号) |
### 上传清单数据(合法行)
> 模板 3 列:序号(正整数、全文件唯一)/ 货源单号 / 运单号(需求 4.2.1)。下表"系统内三要素"指该运单在系统中挂载的司机档案,用于批次划分(需求 4.4.1)。单号为需求示例风格格式,落地时须映射为测试环境真实运单(见数据缺口 #1)。
| 数据ID | 序号 | 货源单号 | 运单号 | 系统内三要素(司机/身份证/车牌) | 用途 | 来源 |
| :--- | :---: | :--- | :--- | :--- | :--- | :--- |
| XLS-001 | 1 | HY202609001 | YD20260901001 | 张三 / 340102199001011234 / 皖A12345 | 基准合法行(批次①成员) | 需求提取(五章示例);真实单号需补充 |
| XLS-002 | 2 | HY202609002 | YD20260901002 | 李四 / 340102199001015678 / 皖B67890 | 单运单批次(批次②) | 需求提取(五章示例);真实单号需补充 |
| XLS-003 | 3 | HY202609001 | YD20260901003 | 张三 / 340102199001011234 / 皖A12345 | 与 XLS-001 同批成员 | 需求提取(五章示例);真实单号需补充 |
| XLS-004 | 5 / 10 | HY202609001 | YD20260901004 / YD20260901005 | 张三 / 340102199001011234 / 皖A12345 | 非连续、乱序序号合法(最小序号判定与行顺序无关) | 构造(依据 4.4.1"非按上传行顺序") |
| XLS-005 | 50000 | HY202609001 | YD20260901006 | 张三 / 340102199001011234 / 皖A12345 | 大数值序号合法(序号不要求连续、不与行数挂钩) | 构造 |
| XLS-006 | 1~2000 | 真实货源单号 | 2000 个真实运单号 | 混合(多批次) | 行数上限合法文件(2000 行全有效) | 构造;运单号需补充 |
| XLS-007 | 1 | 真实货源单号 | 真实运单号 | 任意有效运单 | 最小合法清单(1 行) | 构造;运单号需补充 |
| XLS-008 | — | 序号 | 货源单号 | 运单号 | 模板下载产物(仅表头),作为后续所有清单的格式基准 | 需求提取(REQ-003);原型提取(运单清单模板.xlsx) |
### 上传清单数据(非法行——数据级校验,行级剔除)
> 预期处理:该行计入失败清单(xlsx,含序号/货源单号/运单号/失败原因),剔除后有效行继续处理,任务记"已完成·部分失败"(需求 4.2.2、确认决议 #7)。
| 数据ID | 构造行(序号/货源单号/运单号) | 预期失败原因 | 关联需求 | 来源 |
| :--- | :--- | :--- | :---: | :--- |
| XLS-101 | 0 / HY202609001 / YD20260901001 | 序号非正整数 | 4.2.2 | 构造 |
| XLS-102 | -1 / HY202609001 / YD20260901001 | 序号非正整数 | 4.2.2 | 构造 |
| XLS-103 | 1.5 / HY202609001 / YD20260901001 | 序号非正整数(小数) | 4.2.2 | 构造 |
| XLS-104 | abc / HY202609001 / YD20260901001 | 序号非正整数(非数字文本) | 4.2.2 | 构造 |
| XLS-105 | (空)/ HY202609001 / YD20260901001 | 序号非正整数(为空) | 4.2.2 | 构造 |
| XLS-106 | 两行序号均为 1(运单号不同) | 序号重复(重复行计入失败,首行有效性需验证) | 4.2.2、决议#13 | 构造 |
| XLS-107 | 1 / (空) / YD20260901001 | 货源单号为空 | 4.2.2 | 构造 |
| XLS-108 | 1 / HY202609001 / (空) | 运单号为空 | 4.2.2 | 构造 |
| XLS-109 | 1 / (空) / (空) | 货源单号、运单号均为空(验证失败原因提示合并或并列) | 4.2.2 | 构造 |
| XLS-110 | 1 / HY202609001 / YD20991231001 | 运单号在系统中不存在 | 4.2.2 | 构造 |
| XLS-111 | 1 / HY202609009 / 真实运单号 | 文件中货源单号与该运单实际所属货源不一致 | 4.2.2、决议#6 | 构造;真实运单号需补充 |
| XLS-112 | 两行同一运单号(序号 1、2 不同) | 同一运单号在文件中重复(重复行失败,首行保留) | 4.2.2 | 构造 |
| XLS-113 | 1 / 真实货源单号 / 系统内缺司机信息的运单号 | 运单缺少司机信息,无法归批 | 4.2.2、六#5 | 需补充(依赖环境运单) |
| XLS-114 | 1 / 真实货源单号 / 系统内缺车辆信息的运单号 | 运单缺少车辆信息,无法归批 | 4.2.2、六#5 | 需补充(依赖环境运单) |
| XLS-115 | 序号 4 与前文重复、且运单号与序号 2 行相同 | 单行多重非法(验证失败原因取值与优先级) | 4.2.2 | 构造 |
### 状态数据
#### 任务状态机(需求 4.3.1)
| 数据ID | 对象 | 状态值 | 驱动数据 | 来源 |
| :--- | :--- | :--- | :--- | :--- |
| STT-001 | 任务 | 待处理 | 上传成功但并发占满排队中(配合 CNC-003) | 需求提取(4.3.1) |
| STT-002 | 任务 | 处理中 | 有效行打包进行中,列表可见进度条(成功/失败条数,如原型 186/200) | 需求提取(4.3.1/七章);原型提取 |
| STT-003 | 任务 | 已完成 | 全部有效行成功(如 XLS-001~003 三行清单) | 需求提取(4.3.1) |
| STT-004 | 任务 | 已完成·部分失败 | 部分行数据级失败(如 5 行 3 成 2 败,同原型 RW20260907002) | 需求提取(4.3.1/决议#7);原型提取 |
| STT-005 | 任务 | 失败 | 系统级错误整体未生成文件包(如 OBS 不可用,见项目画像 §6.1) | 需求提取(4.3.1/六#10) |
| STT-006 | 任务 | 已过期(原型展示标签) | 文件包超 7 天保留期。注意:需求 4.3.1 状态机不含该状态,原型任务列表却显示"已过期"tag——状态字段值 vs 文件包生命周期标记的实现口径需澄清 | 原型提取(与需求差异标注) |
| STT-007 | 任务 | 已删除 | 失败任务支持删除后重新上传(原型"删除"按钮) | 需求提取(六#10);原型提取 |
#### 运单侧驱动状态(决定电子回单/合同数据的有无,术语以 terminology.md 为准)
| 数据ID | 对象 | 状态值 | 对文件包的影响 | 来源 |
| :--- | :--- | :--- | :--- | :--- |
| STT-011 | 运单 | 已结算/已打款 | 有支付记录 → 有银行电子回单(术语表:电子回单=运单产生支付记录后银行推送的回单) | 需求提取(4.4.3)+术语表 |
| STT-012 | 运单 | 运单关闭(司机取消) | 无支付记录 → 无电子回单,不阻断,记失败清单 | 需求提取(六#4)+术语表 |
| STT-013 | 运单 | 运输中(未产生支付) | 无电子回单,处理同 STT-012 | 构造(依据 4.4.3 回单口径推断) |
| STT-014 | 运单 | 含承运合同附件 | 合同目录导出该附件(含承运合同) | 需求提取(决议#5) |
| STT-015 | 运单 | 仅含委托合同/框架合同 | 合同目录不导出(不含委托合同/框架合同),原因记失败清单 | 需求提取(决议#5) |
#### 文件包生命周期
| 数据ID | 对象 | 状态值 | 说明 | 来源 |
| :--- | :--- | :--- | :--- | :--- |
| STT-021 | 文件包 | 已生成(≤7 天) | 可重复下载、幂等不重复生成;zip 不加密(决议#12),下载记审计日志 | 需求提取(4.5/七章/决议#12) |
| STT-022 | 文件包 | 过期已清理(>7 天) | 不可下载,提示重新上传(原型提示文案:"文件包已超过 7 天保留期,请重新上传清单生成") | 需求提取(七章);原型提取 |
### ID/编码数据
| 数据ID | 对象 | ID值/命名规则 | 说明 | 来源 |
| :--- | :--- | :--- | :--- | :--- |
| IDC-001 | 任务编号 | RW20260908001(原型格式:RW+日期+3位流水) | 系统生成;实际编码规则以实现为准,用例断言不得写死格式 | 原型提取;实现口径需补充 |
| IDC-002 | 运单号 | YD20260901001 | 需求示例格式;环境中真实运单号需补充 | 需求提取(五章示例) |
| IDC-003 | 货源单号 | HY202609001 | 需求示例格式;环境中真实货源单号需补充 | 需求提取(五章示例) |
| IDC-004 | 司机身份证号 | 340102199001011234(张三)、340102199001015678(李四) | 需求示例值(非真实档案);批次包名含完整身份证号(决议#3) | 需求提取(五章示例) |
| IDC-005 | 车牌号 | 皖A12345 / 皖B67890 | 需求示例值 | 需求提取(五章示例) |
| IDC-006 | 任务总包名 | `运单资料_【任务编号】.zip` | 一层目录 | 需求提取(4.4.2) |
| IDC-007 | 批次包名 | `【司机姓名】-【身份证号】-【车牌号】` | 二层目录,含完整 18 位身份证号 | 需求提取(4.4.2/决议#3) |
| IDC-008 | 运单包名 | `【序号】-【运单号】-【货源单号】`;最小序号追加 `-含司机及车辆证件` | 三层目录 | 需求提取(4.4.2) |
| IDC-009 | 子目录名 | 合同 / 电子回单 / 司机证件 / 车辆证件 | 四个固定子目录 | 需求提取(4.4.2/决议#4) |
| IDC-010 | 失败清单文件 | `失败清单_【任务编号】.xlsx`(原型:失败清单_RW20260907002.xlsx) | 含序号/货源单号/运单号/失败原因 4 列 | 需求提取(4.3.2);文件名原型提取 |
| IDC-011 | 模板文件名 | 运单清单模板.xlsx | 模板下载按钮产物 | 原型提取 |
| IDC-012 | 源文件名示例 | 运单清单_合肥仓0908.xlsx | 任务列表"源文件名"字段展示值 | 原型提取 |
### 边界值数据
#### 行数边界(数据行数,不含表头行;上限 2000 行,需求 4.2.1/决议#9)
| 数据ID | 字段 | 边界类型 | 边界值 | 预期行为 | 来源 |
| :--- | :--- | :--- | :---: | :--- | :--- |
| BND-001 | 行数 | 最小值-1 | 0(仅表头) | 需求未明确:按文件级拒绝 or 0 行任务——见数据缺口 #15 | 构造(边界推导) |
| BND-002 | 行数 | 最小值 | 1 | 正常创建任务 | 需求提取(上限规则的合法侧) |
| BND-003 | 行数 | 最小值+1 | 2 | 正常创建任务 | 构造 |
| BND-004 | 行数 | 最大值-1 | 1999 | 正常创建任务 | 构造 |
| BND-005 | 行数 | 最大值 | 2000 | 正常创建任务(≤2000 合法) | 需求提取(4.2.1) |
| BND-006 | 行数 | 最大值+1 | 2001 | 文件级整体拒绝,提示行数超限,不创建任务 | 需求提取(4.2.2) |
| BND-007 | 行数 | 性能基准 | 1000 | 1000 单规模任务 30 分钟内完成(REQ-020) | 需求提取(七章) |
#### 文件大小边界(上限 10MB,需求 4.2.1/决议#9)
| 数据ID | 字段 | 边界类型 | 边界值 | 预期行为 | 来源 |
| :--- | :--- | :--- | :---: | :--- | :--- |
| BND-011 | 文件大小 | 最大值-1 | 10MB-1B | 合法 | 构造(按上限推导);10MB=10^6 还是 2^20 字节需确认(缺口 #16) |
| BND-012 | 文件大小 | 最大值 | 10MB 整 | 合法("不超过 10MB"含等于) | 需求提取(原型 hintbox:"大小不超过 10MB") |
| BND-013 | 文件大小 | 最大值+1 | 10MB+1B | 文件级整体拒绝 | 需求提取(4.2.2"大小超上限") |
| BND-014 | 文件大小 | 下限 | 0 字节(空文件) | 文件级拒绝(损坏/空文件) | 构造 |
| BND-015 | 文件大小 | 典型值 | 12KB(3 行清单) | 合法 | 原型提取 |
#### 序号数值边界(正整数,需求 4.2.1)
| 数据ID | 字段 | 边界类型 | 边界值 | 预期行为 | 来源 |
| :--- | :--- | :--- | :---: | :--- | :--- |
| BND-021 | 序号 | 最小值-1 | 0 | 行级失败(非正整数) | 需求提取(4.2.2) |
| BND-022 | 序号 | 最小值 | 1 | 合法,可被判定为批次最小序号 | 需求提取(4.2.1) |
| BND-023 | 序号 | 最小值+1 | 2 | 合法 | 构造 |
| BND-024 | 序号 | 无上限合法值 | 50000 | 合法(序号唯一即可,不要求连续) | 构造 |
| BND-025 | 序号 | int32 上限 | 2147483647 | 合法(若后端用 32 位整型存储则为存储上限) | 构造 |
| BND-026 | 序号 | int32 上限+1 | 2147483648 | 溢出风险验证:合法或明确报错,不得异常成功/静默截断 | 构造 |
| BND-027 | 序号 | 超 Excel 精度 | 12345678901234567890(20 位) | Excel 15 位精度截断风险:验证读取值与录入值一致性,溢出须失败 | 构造 |
#### 文件包保留期边界(7 天,需求七章/决议#10)
| 数据ID | 字段 | 边界类型 | 边界值 | 预期行为 | 来源 |
| :--- | :--- | :--- | :---: | :--- | :--- |
| BND-031 | 保留期 | 最大值-1 | 完成后第 6 天 23:59 | 可下载 | 构造(按 7 天推导) |
| BND-032 | 保留期 | 最大值 | 完成后满 7 天整 | 临界:可下载/进入清理(以"完成时间+7天"为界的实现口径需确认) | 需求提取(七章) |
| BND-033 | 保留期 | 最大值+1 | 第 7 天+1(第 8 天) | 过期清理,不可下载,提示重新上传 | 需求提取(六#9);原型提示文案 |
#### 单文件下载重试边界(重试 3 次,需求 4.4.4)
| 数据ID | 字段 | 边界类型 | 边界值 | 预期行为 | 来源 |
| :--- | :--- | :--- | :---: | :--- | :--- |
| BND-041 | 重试次数 | -/最小 | 第 1、2 次失败 | 自动重试,任务继续 | 需求提取(4.4.4) |
| BND-042 | 重试次数 | 最大值 | 第 3 次成功 | 不记失败清单,文件正常入包 | 需求提取(4.4.4) |
| BND-043 | 重试次数 | 最大值+1 | 3 次全失败后第 4 次 | 不再重试,记入失败清单,不阻断其余文件 | 需求提取(4.4.4) |
#### 并发上限边界(1~2,需求六#8)
| 数据ID | 字段 | 边界类型 | 边界值 | 预期行为 | 来源 |
| :--- | :--- | :--- | :---: | :--- | :--- |
| BND-051 | 并发任务数 | 最小值 | 1 | 单任务直接处理 | 需求提取(六#8) |
| BND-052 | 并发任务数 | 最大值 | 2 | 两任务同时处理 | 需求提取(六#8) |
| BND-053 | 并发任务数 | 最大值+1 | 3 | 第 3 个任务排队"待处理",前序完成后自动开始 | 需求提取(六#8"后台排队") |
#### 电子回单数量边界(回单=全部支付记录对应回单,需求 4.4.3)
| 数据ID | 字段 | 边界类型 | 边界值 | 预期行为 | 来源 |
| :--- | :--- | :--- | :---: | :--- | :--- |
| BND-061 | 支付记录数 | 最小值-1 | 0 笔(无支付/运单关闭) | 不阻断:无"电子回单"子目录,失败清单记原因(原型文案示例:"无电子回单:运单无支付记录") | 需求提取(4.4.4/六#4) |
| BND-062 | 支付记录数 | 最小值 | 1 笔 | 电子回单目录 1 份回单 | 术语表+需求 4.4.3 |
| BND-063 | 支付记录数 | 最大值+方向 | 2 笔及以上 | 多份回单;同名回单自动追加 (1)、(2) | 需求提取(4.4.3/4.4.2) |
#### 子目录内文件重名边界(原文件名保留、重名追加 (1)(2),需求 4.4.2)
| 数据ID | 字段 | 边界类型 | 边界值 | 预期行为 | 来源 |
| :--- | :--- | :--- | :---: | :--- | :--- |
| BND-071 | 证件文件重名 | 重名+1 | 同目录第 2 个同名文件(如 身份证.jpg ×2) | 第 2 个命名为 身份证(1).jpg | 需求提取(4.4.2) |
| BND-072 | 证件文件重名 | 重名+2 | 同目录第 3 个同名文件 | 命名为 身份证(2).jpg | 需求提取(4.4.2) |
| BND-073 | 证件文件重名 | 名字已含后缀 | 档案中同时存在 身份证.jpg 与 身份证(1).jpg,再导出一份 身份证.jpg | 追加规则不与既有文件冲突(去重基于实际文件集合) | 构造 |
---
## 构造数据
### 异常数据
#### 文件级异常(整体拒绝,不创建任务,需求 4.2.2)
| 数据ID | 字段/对象 | 测试值 | 预期行为 | 类型 | 来源 |
| :--- | :--- | :--- | :--- | :--- | :--- |
| ERR-001 | 文件格式 | .xls(97-2003 老格式) | 上传即拒绝,提示仅支持 .xlsx | 参数非法 | 构造 |
| ERR-002 | 文件格式 | .csv / .docx / .jpg | 上传即拒绝 | 参数非法 | 构造 |
| ERR-003 | 文件格式 | 伪造 xlsx:zip/docx 改后缀名为 .xlsx | 拒绝(需魔数校验,防仅校验后缀) | 伪造格式 | 构造 |
| ERR-004 | 列名 | 缺失一列(仅"序号/运单号"两列) | 整体拒绝,提示列名缺失或不符 | 列名校验 | 需求提取(4.2.2) |
| ERR-005 | 列名 | 列名不符:`序号 `(尾空格)、`单号`、`序号(必填)`、`No.` | 整体拒绝 | 列名校验 | 构造(需求"列名缺失或不符") |
| ERR-006 | 列名 | 全半角/大小写变体:`序 号`、`货源单号` 全角空格分隔 | 整体拒绝(是否 trim 后匹配以实现为准,需验证) | 列名校验 | 构造 |
| ERR-007 | 列顺序 | 运单号列在货源单号列之前(列名均正确) | 需求未明确:按列名匹配应通过——预期口径需澄清(缺口 #15) | 边界探讨 | 构造 |
| ERR-008 | 文件完整性 | 截断的 xlsx / 伪 xlsx(zip 包无 workbook.xml) | 整体拒绝,提示文件损坏 | 文件损坏 | 需求提取(4.2.2) |
| ERR-009 | 多 Sheet | Sheet1 合法 + Sheet2 含额外数据 | 需求未明确(仅读 Sheet1 or 拒绝)——见缺口 #15 | 边界探讨 | 构造 |
| ERR-010 | 表头结构 | 表头行后含说明行/合并单元格/空行间隔 | 需求未明确;合并单元格读取行为需验证 | 边界探讨 | 构造 |
#### 数据级行异常(行级失败清单,需求 4.2.2——数据构造见 XLS-101~115,此处为校验维度汇总)
| 数据ID | 字段 | 测试值 | 预期行为 | 类型 | 来源 |
| :--- | :--- | :--- | :--- | :--- | :--- |
| ERR-020 | 序号 | 0 / -1 / 1.5 / abc / 空(对应 XLS-101~105) | 行级失败:序号非正整数 | 参数非法 | 需求提取 |
| ERR-021 | 序号 | 全文件内重复(对应 XLS-106) | 重复行计入失败清单 | 重复 | 需求提取(决议#13:全文件唯一) |
| ERR-022 | 货源单号/运单号 | 空串、纯空格 ` `(对应 XLS-107~109) | 行级失败:单号为空;验证空格是否等同空值(trim 行为) | 参数非法 | 需求提取+构造 |
| ERR-023 | 运单号 | 系统中不存在的单号(对应 XLS-110) | 行级失败:运单号在系统中不存在 | 数据不存在 | 需求提取 |
| ERR-024 | 货源单号 | 与运单实际所属货源不一致(对应 XLS-111) | 行级失败:货源单号不一致 | 数据不一致 | 需求提取(决议#6) |
| ERR-025 | 运单号 | 文件内重复出现(对应 XLS-112) | 重复行计入失败清单 | 重复 | 需求提取 |
| ERR-026 | 归批条件 | 运单缺司机信息或车辆信息(对应 XLS-113/114) | 行级失败:无法归批 | 数据缺失 | 需求提取(六#5) |
| ERR-027 | 运单号 | 前后带空格 `YD20260901001 `(系统存在该运单) | 需求未明确:trim 后匹配 or 判不存在——预期需确认 | 边界探讨 | 构造 |
#### 安全异常数据(注入/超长/穿越——文件名类数据 Windows 本地选择文件时受系统限制,需通过接口层直传构造)
| 数据ID | 字段 | 测试值 | 预期行为 | 类型 | 来源 |
| :--- | :--- | :--- | :--- | :--- | :--- |
| ERR-030 | 货源单号(SQL 注入) | `HY202609001' OR '1'='1` | 行级失败(查无此单),不得注入生效、不得 500 | SQL注入 | 构造 |
| ERR-031 | 运单号(SQL 注入) | `YD20260901001'; DROP TABLE waybill;--` | 行级失败,数据库无异常 | SQL注入 | 构造 |
| ERR-032 | 序号(SQL 注入) | `1 OR 1=1` | 行级失败:序号非正整数 | SQL注入 | 构造 |
| ERR-033 | 运单号(XSS) | `<script>alert('xss')</script>` | 行级失败;失败清单 xlsx 与页面回显转义,不执行脚本 | XSS | 构造 |
| ERR-034 | 源文件名(XSS) | `<img src=x onerror=alert(1)>.xlsx`(接口构造) | 任务列表"源文件名"展示转义,不触发弹窗 | XSS | 构造 |
| ERR-035 | 运单号(超长文本) | 256+ 字符连续字符串 | 行级失败,不崩溃、不截断误判为存在 | 超长文本 | 构造 |
| ERR-036 | 源文件名(超长) | 255 字节边界文件名 / 300 字符文件名 | 正常处理或明确拒绝;列表展示截断(原型 `.te` 省略样式),下载失败清单文件名不异常 | 超长文本 | 构造 |
| ERR-037 | 源文件名(路径穿越) | `..\..\etc\passwd.xlsx`、`../../webapps/evil.xlsx`(接口构造) | 不得逃逸上传/下载目录;总包/失败清单命名不受污染 | 路径穿越 | 构造 |
| ERR-038 | 源文件名(特殊字符) | 含 `# % & { } ~ $ ! ' " @ + = 空格 全角字符` 的合法 xlsx | 正常上传处理,任务列表/失败清单展示与下载不异常 | 特殊字符 | 构造 |
| ERR-039 | 源文件名(Unicode) | emoji 文件名(运单清单🚛.xlsx)、生僻字(𠮷)、繁体 | 编码/存储/展示正常(UTF-8 兼容) | 编码兼容 | 构造 |
| ERR-040 | 司机姓名(影响批次包目录名) | 系统档案司机姓名含 `.` `-` 空格 `·`(如 阿依古丽·买买提)、含 Windows 非法字符 `\/:*?"<>|` 的档案 | 批次包命名 `【司机姓名】-【身份证号】-【车牌号】` 在 Windows/zip 内合法可解压;非法字符需实现侧处理 | 命名兼容 | 构造;档案需补充 |
| ERR-041 | 身份证号(敏感数据合规) | 批次包名含完整 18 位身份证号(340102199001011234) | 按决议#3/#12:zip 不加密,依赖菜单权限+下载审计日志;验证越权不可达、日志完整 | 敏感合规 | 需求提取(决议#3、#12) |
### 组合数据
> 批次划分核心规则:系统内司机姓名+身份证号+车牌号三要素完全一致归一批(需求 4.4.1)。
| 数据ID | 组合场景 | 数据构成 | 预期行为 | 来源 |
| :--- | :--- | :--- | :--- | :--- |
| CMB-001 | 同司机同车多运单(基准示例) | 序号 1、3 均为 张三/340102199001011234/皖A12345 | 归 1 批;运单包 `1-…-含司机及车辆证件`(合同+回单+双方证件)、`3-…`(仅合同+回单) | 需求提取(五章示例) |
| CMB-002 | 单运单批次 | 序号 2:李四/340102199001015678/皖B67890 | 独立 1 批;运单包仍含司机及车辆证件 | 需求提取(五章/4.4.3) |
| CMB-003 | 同司机换车 | 序号 1:张三+皖A12345;序号 2:张三+皖C88888(身份证相同) | 拆分为 2 批 | 需求提取(4.4.1) |
| CMB-004 | 同车换司机 | 序号 1:张三+皖A12345;序号 2:王五+皖A12345 | 拆分为 2 批 | 需求提取(4.4.1) |
| CMB-005 | 同名同车不同身份证 | 序号 1:张三/340102199001011234/皖A12345;序号 2:张三/330102199201012345/皖A12345 | 拆分为 2 批(身份证号不同即不同批,验证三要素缺一不可) | 构造 |
| CMB-006 | 最小序号运单被剔除(校验失败) | 同批序号 1、3、5;序号 1 行运单号不存在 | 序号 1 记失败清单;重新计算最小序号,证件改挂序号 3,包名 `3-…-含司机及车辆证件` | 需求提取(4.4.4/六#6、决议#8) |
| CMB-007 | 跨货源归批 | 张三+皖A12345 的运单分属 HY202609001、HY202609002 两个货源 | 仍归 1 批(归批不看货源单号),两个运单包分属不同货源目录名 | 构造(依据 4.4.1) |
| CMB-008 | 乱序/非连续序号 | 同批序号 10、2、5 | 最小序号=2;序号 2 运单包含证件,命名按各自序号 | 需求提取(二章"最小序号运单"定义) |
| CMB-009 | 批次内混合成功失败 | 同批 3 行(序号 1、2、3),序号 1 运单不存在 | 有效 2 行成批,任务"已完成·部分失败";证件挂有效行最小序号 2 | 构造(组合 4.2.2+4.4.1) |
| CMB-010 | 最小序号运单全部文件下载失败 | 批次内序号 1 运单的合同/回单/证件 OBS 拉取均 3 次重试失败 | 需求 4.4.4 条款二"因文件缺失剔除、重算改挂"是否适用需澄清(缺口 #17);验证不阻断其余运单 | 需求提取(4.4.4)+构造 |
| CMB-011 | 最小序号运单无电子回单 | 批次内序号 1 运单无支付记录,序号 2 正常 | 解读一(不剔除):1 号包仍为最小序号、缺"电子回单"子目录、含证件;解读二(剔除改挂):证件改挂 2 号——两种解读需澄清(缺口 #17) | 需求提取(4.4.4 两条款并存)+构造 |
| CMB-012 | 多批次混合清单 | 张三批(2 运单)+李四批(1 运单)+王五批(1 运单),共 4 行 | 总包含 3 个批次包;每批各自最小序号含证件 | 需求提取(五章示例扩展) |
| CMB-013 | 同文件重复上传 | 同一 xlsx 上传 2 次 | 生成 2 个独立任务,各自打包、互不合并去重(REQ-023) | 需求提取(六#7) |
| CMB-014 | 多支付记录运单 | 1 个运单含 2 笔支付记录,2 份银行电子回单同名 | 电子回单目录 2 份回单,第 2 份追加 (1)(结合 BND-063/071) | 构造(术语表回单定义+4.4.2) |
| CMB-015 | 合同口径组合 | 运单 A 含承运合同;运单 B 仅委托合同;运单 C 含承运+框架合同 | A 导出;B 不导出并记失败清单;C 仅导出承运合同 | 需求提取(决议#5/REQ-013) |
| CMB-016 | 无合同运单 | 运单详情-合同附件为空 | 合同子目录不生成,不阻断,记失败清单 | 需求提取(4.4.4) |
| CMB-017 | 2000 行同司机单批次 | 2000 行全部为 张三/340102199001011234/皖A12345 的运单 | 归 1 批、1 个运单包层级树含 2000 个运单包(仅序号 1 含证件);验证打包性能与目录深度 | 构造 |
| CMB-018 | 全部行失败(0 有效行) | 2000 行全部非法(或 3 行全非法) | 需求未明确 0 有效行时任务终态(已完成·部分失败 or 失败 or 其他)与是否生成空文件包——见缺口 #14 | 构造(边界推导) |
### 并发数据
| 数据ID | 场景 | 账号数 | 并发量 | 数据构成与说明 | 来源 |
| :--- | :--- | :---: | :---: | :--- | :--- |
| CNC-001 | 单任务处理(并发下限) | 1 | 1 | 1 个 1000 行清单任务独占处理 | 需求提取(六#8) |
| CNC-002 | 双任务并发(并发上限) | 1~2 | 2 | 2 个合法清单(如 500 行+500 行)几乎同时上传,两任务同时"处理中" | 需求提取(六#8) |
| CNC-003 | 三任务排队(超上限) | 1 | 3 | 第 3 个任务保持"待处理",任一前序完成后自动开始(配合 STT-001/BND-053) | 需求提取(六#8) |
| CNC-004 | 大小任务混跑 | 1 | 2 | 2000 行任务(XLS-006)+3 行任务(XLS-001~003)并发,小任务不被大任务长时间阻塞 | 构造 |
| CNC-005 | 同一任务并发下载 | 1 | 2+ | 已完成任务并发双击/双会话同时点"下载文件包":幂等,不重复生成文件包,均返回合法 zip | 需求提取(4.5/七章幂等) |
| CNC-006 | 性能基准 | 1 | 1 | 1000 单规模清单(如 500 批×2 运单混合 CMB-001/002 结构)30 分钟内完成 | 需求提取(七章 REQ-020) |
| CNC-007 | 多账号并发上传 | 2 | 2 | ACC-001 与 ACC-006 同时上传不同清单,任务互不干扰,上传人字段各自正确 | 构造 |
| CNC-008 | 上传按钮防重复提交 | 1 | 2+ | 同一文件选中后快速重复点击"开始上传并创建任务":仅创建 1 个任务(项目画像 §8.2 必测幂等) | 项目画像提取+构造 |
---
## 数据缺口
| 序号 | 缺失数据 | 用途(关联数据ID) | 建议来源 |
| :--- | :--- | :--- | :--- |
| 1 | 测试环境真实运单号+货源单号映射(≥20 单:已完成且已打款、含 ≥1 笔支付记录与银行电子回单、运单详情含承运合同附件) | XLS-001~003/006/007、CMB-001/002/012 等全部合法行落地 | 测试环境运单管理/承运结算-电子回单查询现有数据;不足时用 ACC-004/005 走"发货源→接单→卸货→打款"完整流程造数 |
| 2 | 仅含委托合同的运单 1 单(合同附件仅委托合同) | CMB-015(合同口径排除验证)、STT-015 | 测试环境查找或通过合同管理-委托书合同造数 |
| 3 | 含框架合同(或仅框架合同)的运单 1 单 | CMB-015("不含框架合同"口径验证) | 测试环境合同管理模块查找 |
| 4 | 无支付记录的已关闭运单 1 单(司机取消终止流转) | BND-061、STT-012(无回单不阻断记失败清单) | 司机端接单后取消,或测试环境查找已关闭运单 |
| 5 | 系统内缺司机信息的运单 1 单、缺车辆信息的运单 1 单 | XLS-113/114、ERR-026(无法归批) | 承运管理后台造数清空关联字段,或查找历史脏数据 |
| 6 | 含 ≥2 笔支付记录的运单 1 单(多笔货主支付/分笔打款) | BND-063、CMB-014(多回单+回单重名 (1) 追加) | 对同一运单执行 2 次货主打款+财务打款流程 |
| 7 | 同名同车不同身份证号的司机档案 1 组(两个司机档案:姓名相同、车牌相同、身份证不同) | CMB-005(三要素缺一不可验证) | 承运管理-司机管理创建两个档案,车辆绑定同一辆车 |
| 8 | 同司机换车历史运单组、同车换司机历史运单组各 1 组 | CMB-003/004(拆批验证) | 司机档案换绑车辆后各跑 1 单;或两司机先后接同一车辆货源 |
| 9 | 运营人员专用账号(角色仅授权"运单文件包"菜单)+ 无该菜单权限的对照账号 | ACC-002/003(REQ-002 权限正向/反向、越权) | 平台管理-角色管理新建角色并配置菜单权限 |
| 10 | 第二运营账号(可与 #9 复用) | ACC-006、CNC-007(多账号并发上传、审计日志操作人区分) | 同 #9 |
| 11 | OBS 文件失效/证件照片缺失的运单(合同或回单或证件对象被删除、URL 失效) | BND-041~043、CMB-010(单文件下载失败重试 3 次场景) | 后台直接删除 OBS 对象或篡改档案文件 URL(需开发/运维配合) |
| 12 | 大文件构造物:2001 行 xlsx、10MB±1B xlsx、截断损坏 xlsx、伪装后缀 xlsx | BND-006/011~013/014、ERR-001/003/008 | 本地 Python(openpyxl) 脚本生成后存入测试数据目录,纳入版本管理之外的 fixtures |
| 13 | 司机/车辆档案中同名字件照片(同一档案上传 2~3 个同名附件) | BND-071~073、CMB-014(重名 (1)(2) 追加) | 司机管理-证件照片处重复上传同名文件 |
| 14 | "0 有效行"任务的预期终态(全部行数据级失败时:已完成·部分失败 / 失败 / 是否生成空包) | CMB-018、STT-004/005 边界 | 需求方/开发确认(需求 4.2.2 未覆盖全失败场景) |
| 15 | 文件级边界处理预期:0 行文件(仅表头)、多 Sheet、表头后附加行、列顺序颠倒 | BND-001、ERR-007/009/010 | 需求方/开发确认读取与拒绝口径 |
| 16 | 上限口径确认:10MB=10^6 还是 2^20 字节;2000 行是否含表头行;序号与运单号单元格为数值型 vs 文本型时的读取规则 | BND-005/011、XLS-006 | 开发确认实现口径后回填边界值定义 |
| 17 | "最小序号运单因文件缺失剔除改挂"的触发口径:无合同/无回单(4.4.4 条款一:不阻断仅记清单)是否也触发条款二的剔除改挂 | CMB-010/011(证件挂载预期直接冲突,影响 P0 断言) | 需求方/开发澄清 4.4.4 两条款关系 |
| 18 | 多机构部署形态确认 + B 机构运营账号与 B 机构有效运单(含证件回单资料) | ACC-B01(B 机构运营账号,行内临时记号)、YDB-001(B 机构运单,007/008 机构隔离断言) | 开发/运维确认部署形态;多机构环境由平台管理-机构管理造数;若为单机构部署或 super_admin 按设计跨机构可见,007/008 改用绑定 A 机构的非超管账号(ACC-002 补机构绑定)执行 |