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 锁文件
This commit is contained in:
@@ -0,0 +1,5 @@
|
||||
# 运单资料文件包下载需求 版本索引
|
||||
|
||||
| 版本 | 类型 | 内容摘要 | 目录 |
|
||||
| --- | --- | --- | --- |
|
||||
| v1 | 完整流水线快照 | manifest、analysis、relation_report、test_points、test_cases_markdown、excel、normalized_inputs | `output\versions\运单资料文件包下载需求\v1` |
|
||||
@@ -0,0 +1,247 @@
|
||||
# 运单资料文件包下载需求
|
||||
|
||||
> 文档角色:需求文档
|
||||
> 原始来源:`requirements\运单资料文件包下载需求.md`
|
||||
|
||||
# 运单资料文件包下载 需求文档
|
||||
|
||||
| 项 | 内容 |
|
||||
|:---|:---|
|
||||
| 功能名称 | 运单资料文件包下载(新增菜单) |
|
||||
| 所属端 | 运八平台端(Web 管理后台) |
|
||||
| 版本 | v1.0(定稿) |
|
||||
| 编写日期 | 2026-09-08 |
|
||||
| 确认记录 | 2026-09-08 需求方确认,13 项待确认事项全部采纳本文档建议方案(见第八章) |
|
||||
| 原型 | `resources/prototypes/anhuibaba_file_package.html`(静态演示:任务列表 / 上传弹窗 / 文件包结构预览 / 失败清单) |
|
||||
| 需求来源 | 运营口头需求(2026-09-08),本文档为整理稿 |
|
||||
| 关联术语 | 以 `knowledge_base/01_standards/terminology.md` 为准 |
|
||||
|
||||
---
|
||||
|
||||
## 一、需求背景与目标
|
||||
|
||||
运营人员在线下归档、审计、对账等场景中,需要按批次收集运单资料:运单合同、电子回单,以及司机证件照片、车辆证件照片。目前只能逐单进入运单详情手工下载整理,效率低且易遗漏。
|
||||
|
||||
**目标**:提供一个"上传运单清单 → 系统自动生成资料文件包 → 任务完成后下载"的批量导出能力,按"司机+身份证+车辆"自动归批,资料按运单分目录组织、按规则命名,一次下载即可获得全部资料。
|
||||
|
||||
**本期范围**:仅做资料导出打包;不新增数据采集,合同、电子回单、司机证件、车辆证件均读取运八平台现有数据。
|
||||
|
||||
---
|
||||
|
||||
## 二、名词定义
|
||||
|
||||
| 术语 | 定义 |
|
||||
|:---|:---|
|
||||
| **批次** | 上传清单中,运单在系统内的 **司机姓名 + 司机身份证号 + 车牌号** 三要素完全一致的一组运单。 |
|
||||
| **文件包(批次包)** | 一个批次生成的目录,内含该批次全部运单的运单包。 |
|
||||
| **运单包** | 批次包下按运单维度建立的子目录,内含该运单的合同、电子回单及(仅最小序号运单)司机、车辆证件照片。 |
|
||||
| **最小序号运单** | 同一批次内,上传清单中"序号"最小的运单。该运单的运单包额外包含司机证件照片、车辆证件照片。 |
|
||||
|
||||
---
|
||||
|
||||
## 三、整体流程
|
||||
|
||||
```
|
||||
运营人员 系统
|
||||
│ ① 下载模板,填写运单清单并上传 │
|
||||
│ ────────────────────────────────────→ │ ② 校验模板与数据(见 4.2.2)
|
||||
│ │ ③ 创建打包任务(待处理 → 处理中)
|
||||
│ ④ 任务列表查看处理进度 │ ④ 按批次分组 → 逐运单下载关联文件 → 组装文件包
|
||||
│ ←──────────────────────────────────── │ ⑤ 任务完成(已完成 / 已完成·部分失败 / 失败)
|
||||
│ ⑥ 点击"下载"获取文件包 zip │
|
||||
│ ←──────────────────────────────────── │ ⑦ 返回 zip,记录下载审计日志
|
||||
```
|
||||
|
||||
核心规则:**司机+身份证+车辆算一批运单,生成一个文件包**;文件包内按运单建运单包;批次内**最小序号**的运单包额外含司机及车辆证件照片,其余运单包只含合同与电子回单。
|
||||
|
||||
---
|
||||
|
||||
## 四、功能需求
|
||||
|
||||
### 4.1 菜单入口
|
||||
|
||||
- 运八平台端新增独立菜单,菜单名称 **"运单文件包"**,挂在运单管理相关模块下。
|
||||
- 页面结构:上方"上传任务"入口(模板下载 + 上传按钮),下方"任务列表"。
|
||||
- 可见角色:**运营人员**;菜单需权限控制——文件包含身份证等敏感证件照片。
|
||||
|
||||
### 4.2 文件上传
|
||||
|
||||
#### 4.2.1 上传模板
|
||||
|
||||
| 列名 | 类型 | 必填 | 说明 |
|
||||
|:---|:---|:---:|:---|
|
||||
| 序号 | 整数 | 是 | 正整数,全文件内唯一;决定批次内"最小序号运单"的判定 |
|
||||
| 货源单号 | 文本 | 是 | 系统内货源单号 |
|
||||
| 运单号 | 文本 | 是 | 系统内运单号 |
|
||||
|
||||
- 文件格式:`.xlsx`;页面提供**模板下载**。
|
||||
- 限制:单文件行数上限 **2000 行**;文件大小上限 **10MB**。
|
||||
|
||||
#### 4.2.2 校验规则
|
||||
|
||||
| 级别 | 规则 | 处理方式 |
|
||||
|:---|:---|:---|
|
||||
| 文件级 | 非 xlsx 格式 / 列名缺失或不符 / 文件损坏 | 上传即拒绝,提示具体原因,不创建任务 |
|
||||
| 文件级 | 行数、大小超上限 | 上传即拒绝 |
|
||||
| 数据级 | 序号非正整数或重复 | 该行计入失败清单 |
|
||||
| 数据级 | 货源单号 / 运单号为空 | 该行计入失败清单 |
|
||||
| 数据级 | 运单号在系统中不存在 | 该行计入失败清单 |
|
||||
| 数据级 | 文件中货源单号与该运单实际所属货源不一致 | 该行计入失败清单 |
|
||||
| 数据级 | 同一运单号在文件中重复出现 | 重复行计入失败清单 |
|
||||
| 数据级 | 运单缺少司机或车辆信息,无法归批 | 该行计入失败清单(原因:无法归批) |
|
||||
|
||||
> **处理原则**:文件级错误整体拒绝;数据级错误剔除失败行后继续处理有效行,任务状态记为"已完成·部分失败"。
|
||||
|
||||
### 4.3 任务
|
||||
|
||||
#### 4.3.1 任务状态
|
||||
|
||||
```
|
||||
待处理 → 处理中 → 已完成 (全部有效行成功)
|
||||
→ 已完成·部分失败 (部分行失败,可下载失败清单)
|
||||
→ 失败 (系统级错误导致整体未生成文件包)
|
||||
```
|
||||
|
||||
#### 4.3.2 任务列表
|
||||
|
||||
| 字段 | 说明 |
|
||||
|:---|:---|
|
||||
| 任务编号 | 系统生成 |
|
||||
| 源文件名 | 上传的清单文件名 |
|
||||
| 上传人 / 上传时间 | — |
|
||||
| 任务状态 | 待处理 / 处理中 / 已完成 / 已完成·部分失败 / 失败 |
|
||||
| 总行数 / 成功数 / 失败数 | 处理进度与结果统计 |
|
||||
| 完成时间 | — |
|
||||
| 操作 | 下载文件包(任务成功后显示)、下载失败清单(存在失败行时显示,xlsx,含序号/货源单号/运单号/失败原因) |
|
||||
|
||||
### 4.4 文件包生成规则
|
||||
|
||||
#### 4.4.1 批次划分
|
||||
|
||||
按有效行运单在**系统内**的 `司机姓名 + 司机身份证号 + 车牌号` 三要素归组,三要素完全一致归为一批,每批生成一个文件包。同一司机换车、同一车辆换司机都会拆分为不同批次。
|
||||
|
||||
#### 4.4.2 目录结构与命名
|
||||
|
||||
```
|
||||
运单资料_【任务编号】.zip ← 任务下载总包
|
||||
├─ 【司机姓名】-【身份证号】-【车牌号】/ ← 批次文件包①
|
||||
│ ├─ 1-YD20260901001-HY202609001-含司机及车辆证件/ ← 批次内最小序号运单包
|
||||
│ │ ├─ 合同/(该运单全部合同文件)
|
||||
│ │ ├─ 电子回单/(该运单全部支付记录对应回单)
|
||||
│ │ ├─ 司机证件/(身份证、驾驶证、从业资格证等照片)
|
||||
│ │ └─ 车辆证件/(行驶证、道路运输证等照片)
|
||||
│ └─ 3-YD20260901003-HY202609001/ ← 批次内其余运单包
|
||||
│ ├─ 合同/
|
||||
│ └─ 电子回单/
|
||||
└─ 【司机姓名】-【身份证号】-【车牌号】/ ← 批次文件包②
|
||||
└─ 2-YD20260901002-HY202609002-含司机及车辆证件/ ← 单运单批次,仍含证件
|
||||
```
|
||||
|
||||
- 任务下载总包命名:`运单资料_【任务编号】.zip`。
|
||||
- 批次文件包命名:`【司机姓名】-【身份证号】-【车牌号】`。
|
||||
- 运单包命名(需求明确):
|
||||
- 最小序号运单:`【序号】-【运单号】-【货源单号】-含司机及车辆证件`
|
||||
- 其余运单:`【序号】-【运单号】-【货源单号】`
|
||||
- 运单包内按 `合同 / 电子回单 / 司机证件 / 车辆证件` 建子目录;文件保留系统原文件名,重名时自动追加 `(1)`、`(2)`。
|
||||
|
||||
#### 4.4.3 各运单包内容
|
||||
|
||||
| 内容 | 最小序号运单 | 其余运单 | 数据来源 |
|
||||
|:---|:---:|:---:|:---|
|
||||
| 运单相关合同 | ✅ | ✅ | 运单关联的合同附件(以运单详情-合同附件为准,含承运合同;不含委托合同/框架合同) |
|
||||
| 电子回单 | ✅ | ✅ | 运单全部支付记录对应的银行电子回单 |
|
||||
| 司机证件照片 | ✅ | ❌ | 该运单司机档案:身份证(人像面/国徽面)、驾驶证、从业资格证等 |
|
||||
| 车辆证件照片 | ✅ | ❌ | 该运单车辆档案:行驶证、道路运输证、车辆照片等 |
|
||||
|
||||
> 证件照片以批次内最小序号运单挂载的司机、车辆档案为准(同批次三要素一致,证件相同,故只随最小序号运单导出一份)。
|
||||
|
||||
#### 4.4.4 文件缺失处理
|
||||
|
||||
- 某运单无合同或无电子回单:不阻断任务,对应子目录不生成,原因记入失败清单(如"无电子回单:运单无支付记录")。
|
||||
- 批次内最小序号运单因故剔除(校验失败/文件缺失):**重新计算**批次内最小序号,证件照片改挂到新的最小序号运单。
|
||||
- 单个文件下载失败自动重试 3 次,仍失败则记入失败清单,不阻断其余文件。
|
||||
|
||||
### 4.5 下载
|
||||
|
||||
- 任务完成后,任务列表该行显示"下载"按钮,下载内容为任务总包 zip(含全部批次文件包)。
|
||||
- 支持重复下载,不重复生成。
|
||||
- 下载行为记录审计日志(操作人、时间、任务编号)——文件包含身份证等敏感个人信息。
|
||||
- 按批次文件包单独下载:本期不做。
|
||||
|
||||
---
|
||||
|
||||
## 五、上传示例与生成结果
|
||||
|
||||
上传清单:
|
||||
|
||||
| 序号 | 货源单号 | 运单号 | 司机(系统内) | 车牌(系统内) |
|
||||
|:---:|:---|:---|:---:|:---:|
|
||||
| 1 | HY202609001 | YD20260901001 | 张三 | 皖A12345 |
|
||||
| 2 | HY202609002 | YD20260901002 | 李四 | 皖B67890 |
|
||||
| 3 | HY202609001 | YD20260901003 | 张三 | 皖A12345 |
|
||||
|
||||
生成结果:
|
||||
|
||||
- 批次① = 序号 1、3(张三+同一身份证+皖A12345)→ 文件包"张三-340102199001011234-皖A12345",内含运单包 `1-…-含司机及车辆证件`(合同+回单+张三证件+皖A12345 证件)和 `3-…`(仅合同+回单)。
|
||||
- 批次② = 序号 2(李四)→ 文件包"李四-340102199001015678-皖B67890",运单包 `2-…-含司机及车辆证件`(单运单批次,仍含司机及车辆证件)。
|
||||
|
||||
---
|
||||
|
||||
## 六、异常与边界场景汇总
|
||||
|
||||
| # | 场景 | 处理 |
|
||||
|:---:|:---|:---|
|
||||
| 1 | 模板格式/列名错误 | 上传即拒绝 |
|
||||
| 2 | 序号重复、非正整数 | 行级失败清单 |
|
||||
| 3 | 运单号不存在 / 货源单号不匹配 | 行级失败清单 |
|
||||
| 4 | 运单被关闭、未产生支付记录导致无电子回单 | 不阻断,记失败清单 |
|
||||
| 5 | 运单缺司机或车辆信息无法归批 | 行级失败清单 |
|
||||
| 6 | 批次内最小序号运单被剔除 | 证件改挂重新计算后的最小序号运单 |
|
||||
| 7 | 同一文件重复上传 | 允许,各自生成独立任务,不合并去重 |
|
||||
| 8 | 多任务并发 | 后台排队处理(并发上限 1~2),防磁盘/带宽压力 |
|
||||
| 9 | 文件包超过保留期 | 不可下载,需重新上传生成 |
|
||||
| 10 | 任务处理中系统异常 | 任务置"失败",支持删除后重新上传 |
|
||||
|
||||
---
|
||||
|
||||
## 七、非功能需求
|
||||
|
||||
| 项 | 要求 |
|
||||
|:---|:---|
|
||||
| 异步处理 | 打包为后台异步任务,任务列表可见进度(成功/失败条数);上传后无需等待 |
|
||||
| 性能 | 1000 单规模任务 30 分钟内完成 |
|
||||
| 保留期 | 生成的文件包默认保留 7 天,过期自动清理 |
|
||||
| 敏感数据 | 司机身份证号、证件照片属敏感个人信息:菜单需权限控制、下载记审计日志;批次包命名含完整身份证号,包内数据仅限授权人员获取 |
|
||||
| 幂等 | 同一任务重复点击下载不重复生成文件包 |
|
||||
|
||||
---
|
||||
|
||||
## 八、确认决议记录(2026-09-08)
|
||||
|
||||
> 原 v0.1 草稿 13 项待确认事项,经需求方确认**全部采纳文档建议方案**,逐项记录如下:
|
||||
|
||||
| # | 事项 | 确认结论 |
|
||||
|:---:|:---|:---|
|
||||
| 1 | 菜单名称与挂载位置 | ✅ "运单文件包",挂在运单管理模块下 |
|
||||
| 2 | 可见角色/权限 | ✅ 运营人员 |
|
||||
| 3 | 批次文件包命名 | ✅ `司机姓名-身份证号-车牌号`(含完整身份证号) |
|
||||
| 4 | 运单包内子目录 | ✅ 按 合同/电子回单/司机证件/车辆证件 建子目录 |
|
||||
| 5 | "运单相关合同"范围 | ✅ 以运单详情-合同附件为准(含承运合同),不含委托合同/框架合同 |
|
||||
| 6 | 货源单号与系统不一致时 | ✅ 该行失败 |
|
||||
| 7 | 数据级校验失败行处理 | ✅ 剔除后继续,任务记"已完成·部分失败" |
|
||||
| 8 | 失败行剔除后证件挂载 | ✅ 挂到批次内剩余运单的最小序号运单 |
|
||||
| 9 | 行数/大小上限 | ✅ 2000 行 / 10MB |
|
||||
| 10 | 文件包保留期 | ✅ 7 天 |
|
||||
| 11 | 按批次包单独下载 | ✅ 本期不做 |
|
||||
| 12 | zip 是否加密 | ✅ 不加密(依赖权限+审计) |
|
||||
| 13 | 序号唯一性范围 | ✅ 全文件唯一 |
|
||||
|
||||
---
|
||||
|
||||
## 九、验收要点
|
||||
|
||||
1. 上传合法清单后任务创建成功,完成后可下载 zip;zip 内批次划分与目录命名符合 4.4 规则。
|
||||
2. 同一批次内仅最小序号运单包含司机、车辆证件照片,其余运单仅含合同与电子回单。
|
||||
3. 单运单批次的运单包仍包含司机及车辆证件照片。
|
||||
4. 各类非法数据按 4.2.2 处理,失败清单内容准确可下载。
|
||||
5. 任务失败、部分失败、重复下载、保留期过期等边界行为符合第五、六章定义。
|
||||
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"base_name": "运单资料文件包下载需求",
|
||||
"version": "v1",
|
||||
"snapshot_type": "full_pipeline",
|
||||
"summary": [
|
||||
"manifest",
|
||||
"analysis",
|
||||
"relation_report",
|
||||
"test_points",
|
||||
"test_cases_markdown",
|
||||
"excel",
|
||||
"normalized_inputs"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,543 @@
|
||||
{
|
||||
"_meta": {
|
||||
"base_name": "运单资料文件包下载需求",
|
||||
"merged_zones": [
|
||||
"prepare",
|
||||
"analyze",
|
||||
"design",
|
||||
"execute",
|
||||
"review",
|
||||
"monitor"
|
||||
],
|
||||
"merged_at": "2026-09-08T08:11:23.813211+00:00",
|
||||
"updated_at": "2026-09-08T08:11:23.813211+00:00"
|
||||
},
|
||||
"prepare": {
|
||||
"base_name": "运单资料文件包下载需求",
|
||||
"requirement_source_file": "E:\\Desktop\\xst_files\\test\\QaAutomationHub\\requirements\\运单资料文件包下载需求.md",
|
||||
"requirement_input_type": "md",
|
||||
"normalized_requirement_file": "E:\\Desktop\\xst_files\\test\\QaAutomationHub\\output\\normalized_inputs\\运单资料文件包下载需求\\requirement.md",
|
||||
"normalized_dir": "E:\\Desktop\\xst_files\\test\\QaAutomationHub\\output\\normalized_inputs\\运单资料文件包下载需求",
|
||||
"technical_solution_files": [],
|
||||
"normalized_technical_solution_files": [],
|
||||
"project_profile_file": "E:\\Desktop\\xst_files\\test\\QaAutomationHub\\knowledge_base\\00_project\\project_profile.md",
|
||||
"document_confidence": {
|
||||
"requirement": 1.0,
|
||||
"issues": []
|
||||
},
|
||||
"activated_knowledge": {
|
||||
"terminology": {
|
||||
"permanent": [
|
||||
"E:\\Desktop\\xst_files\\test\\QaAutomationHub\\knowledge_base\\01_standards\\terminology.md"
|
||||
],
|
||||
"optional": []
|
||||
},
|
||||
"semantic_matches": []
|
||||
},
|
||||
"knowledge_gaps": [
|
||||
{
|
||||
"category": "history",
|
||||
"suggestion": "未激活任何历史缺陷/易漏场景,建议补充相关知识库条目"
|
||||
},
|
||||
{
|
||||
"category": "best_practice",
|
||||
"suggestion": "未激活任何最佳实践范例,建议补充同类型需求的优秀用例"
|
||||
}
|
||||
],
|
||||
"attached_source_files": [
|
||||
{
|
||||
"path": "E:\\Desktop\\xst_files\\test\\QaAutomationHub\\resources\\prototypes\\anhuibaba_file_package.html",
|
||||
"type": "project_file",
|
||||
"source": "embedded_relative_path",
|
||||
"exists": "true",
|
||||
"context_line": ""
|
||||
},
|
||||
{
|
||||
"path": "E:\\Desktop\\xst_files\\test\\QaAutomationHub\\knowledge_base\\01_standards\\terminology.md",
|
||||
"type": "project_file",
|
||||
"source": "embedded_relative_path",
|
||||
"exists": "true",
|
||||
"context_line": ""
|
||||
}
|
||||
],
|
||||
"sources_registry": [
|
||||
{
|
||||
"path": "E:\\Desktop\\xst_files\\test\\QaAutomationHub\\requirements\\运单资料文件包下载需求.md",
|
||||
"type": "primary_requirement",
|
||||
"role": "business_background",
|
||||
"format": "md",
|
||||
"authority": "primary"
|
||||
},
|
||||
{
|
||||
"path": "E:\\Desktop\\xst_files\\test\\QaAutomationHub\\resources\\prototypes\\anhuibaba_file_package.html",
|
||||
"type": "attached_project_file",
|
||||
"role": "ui_prototype",
|
||||
"format": "html",
|
||||
"authority": "reference",
|
||||
"exists": "true"
|
||||
},
|
||||
{
|
||||
"path": "E:\\Desktop\\xst_files\\test\\QaAutomationHub\\knowledge_base\\01_standards\\terminology.md",
|
||||
"type": "attached_project_file",
|
||||
"role": "reference",
|
||||
"format": "md",
|
||||
"authority": "reference",
|
||||
"exists": "true"
|
||||
}
|
||||
],
|
||||
"agent_notes": {
|
||||
"document-parser": "解析完成,置信度 100%",
|
||||
"knowledge-activator": "激活 1 常驻 + 0 可选术语"
|
||||
},
|
||||
"_meta": {
|
||||
"zone": "prepare",
|
||||
"base_name": "运单资料文件包下载需求",
|
||||
"updated_at": "2026-09-08T08:11:23.770287+00:00",
|
||||
"status": "completed"
|
||||
}
|
||||
},
|
||||
"base_name": "运单资料文件包下载需求",
|
||||
"requirement_source_file": "E:\\Desktop\\xst_files\\test\\QaAutomationHub\\requirements\\运单资料文件包下载需求.md",
|
||||
"requirement_input_type": "md",
|
||||
"normalized_requirement_file": "E:\\Desktop\\xst_files\\test\\QaAutomationHub\\output\\normalized_inputs\\运单资料文件包下载需求\\requirement.md",
|
||||
"normalized_dir": "E:\\Desktop\\xst_files\\test\\QaAutomationHub\\output\\normalized_inputs\\运单资料文件包下载需求",
|
||||
"technical_solution_files": [],
|
||||
"normalized_technical_solution_files": [],
|
||||
"project_profile_file": "E:\\Desktop\\xst_files\\test\\QaAutomationHub\\knowledge_base\\00_project\\project_profile.md",
|
||||
"document_confidence": {
|
||||
"requirement": 1.0,
|
||||
"issues": []
|
||||
},
|
||||
"activated_knowledge": {
|
||||
"terminology": {
|
||||
"permanent": [
|
||||
"E:\\Desktop\\xst_files\\test\\QaAutomationHub\\knowledge_base\\01_standards\\terminology.md"
|
||||
],
|
||||
"optional": []
|
||||
},
|
||||
"semantic_matches": []
|
||||
},
|
||||
"knowledge_gaps": [
|
||||
{
|
||||
"category": "history",
|
||||
"suggestion": "未激活任何历史缺陷/易漏场景,建议补充相关知识库条目"
|
||||
},
|
||||
{
|
||||
"category": "best_practice",
|
||||
"suggestion": "未激活任何最佳实践范例,建议补充同类型需求的优秀用例"
|
||||
}
|
||||
],
|
||||
"attached_source_files": [
|
||||
{
|
||||
"path": "E:\\Desktop\\xst_files\\test\\QaAutomationHub\\resources\\prototypes\\anhuibaba_file_package.html",
|
||||
"type": "project_file",
|
||||
"source": "embedded_relative_path",
|
||||
"exists": "true",
|
||||
"context_line": ""
|
||||
},
|
||||
{
|
||||
"path": "E:\\Desktop\\xst_files\\test\\QaAutomationHub\\knowledge_base\\01_standards\\terminology.md",
|
||||
"type": "project_file",
|
||||
"source": "embedded_relative_path",
|
||||
"exists": "true",
|
||||
"context_line": ""
|
||||
}
|
||||
],
|
||||
"sources_registry": [
|
||||
{
|
||||
"path": "E:\\Desktop\\xst_files\\test\\QaAutomationHub\\requirements\\运单资料文件包下载需求.md",
|
||||
"type": "primary_requirement",
|
||||
"role": "business_background",
|
||||
"format": "md",
|
||||
"authority": "primary"
|
||||
},
|
||||
{
|
||||
"path": "E:\\Desktop\\xst_files\\test\\QaAutomationHub\\resources\\prototypes\\anhuibaba_file_package.html",
|
||||
"type": "attached_project_file",
|
||||
"role": "ui_prototype",
|
||||
"format": "html",
|
||||
"authority": "reference",
|
||||
"exists": "true"
|
||||
},
|
||||
{
|
||||
"path": "E:\\Desktop\\xst_files\\test\\QaAutomationHub\\knowledge_base\\01_standards\\terminology.md",
|
||||
"type": "attached_project_file",
|
||||
"role": "reference",
|
||||
"format": "md",
|
||||
"authority": "reference",
|
||||
"exists": "true"
|
||||
}
|
||||
],
|
||||
"agent_notes": {
|
||||
"execution-analyst": "等待测试结果输入",
|
||||
"knowledge-curator": "等待执行分析结果"
|
||||
},
|
||||
"analyze": {
|
||||
"base_name": "运单资料文件包下载需求",
|
||||
"analysis_file": "E:\\Desktop\\xst_files\\test\\QaAutomationHub\\output\\analysis\\运单资料文件包下载需求_分析.md",
|
||||
"relation_report_file": "E:\\Desktop\\xst_files\\test\\QaAutomationHub\\output\\analysis\\运单资料文件包下载需求_关联与冲突.md",
|
||||
"risk_report_file": "E:\\Desktop\\xst_files\\test\\QaAutomationHub\\output\\analysis\\运单资料文件包下载需求_风险评估.md",
|
||||
"related_requirements": [
|
||||
{
|
||||
"path": "E:\\Desktop\\xst_files\\test\\QaAutomationHub\\requirements\\运单资料文件包下载需求.docx",
|
||||
"similarity": 0.833565
|
||||
},
|
||||
{
|
||||
"path": "E:\\Desktop\\xst_files\\test\\QaAutomationHub\\requirements\\安徽运八需求.md",
|
||||
"similarity": 0.10511
|
||||
}
|
||||
],
|
||||
"conflict_candidates_count": 0,
|
||||
"conflict_summary": {},
|
||||
"risk_matrix": {
|
||||
"risks": [
|
||||
{
|
||||
"id": "RISK-AVAILABILITY",
|
||||
"category": "可用性",
|
||||
"keywords_matched": [
|
||||
"并发",
|
||||
"重试",
|
||||
"幂等"
|
||||
],
|
||||
"likelihood": 3,
|
||||
"impact": 4,
|
||||
"score": 12,
|
||||
"level": "P1",
|
||||
"conflict_amplified": false
|
||||
},
|
||||
{
|
||||
"id": "RISK-FINANCIAL",
|
||||
"category": "资损",
|
||||
"keywords_matched": [
|
||||
"支付"
|
||||
],
|
||||
"likelihood": 1,
|
||||
"impact": 5,
|
||||
"score": 5,
|
||||
"level": "P2",
|
||||
"conflict_amplified": false
|
||||
},
|
||||
{
|
||||
"id": "RISK-COMPLIANCE",
|
||||
"category": "合规",
|
||||
"keywords_matched": [
|
||||
"加密"
|
||||
],
|
||||
"likelihood": 1,
|
||||
"impact": 5,
|
||||
"score": 5,
|
||||
"level": "P2",
|
||||
"conflict_amplified": false
|
||||
},
|
||||
{
|
||||
"id": "RISK-DATA",
|
||||
"category": "数据",
|
||||
"keywords_matched": [
|
||||
"删除"
|
||||
],
|
||||
"likelihood": 1,
|
||||
"impact": 4,
|
||||
"score": 4,
|
||||
"level": "P2",
|
||||
"conflict_amplified": false
|
||||
},
|
||||
{
|
||||
"id": "RISK-COMPATIBILITY",
|
||||
"category": "兼容性",
|
||||
"keywords_matched": [
|
||||
"版本"
|
||||
],
|
||||
"likelihood": 1,
|
||||
"impact": 3,
|
||||
"score": 3,
|
||||
"level": "P2",
|
||||
"conflict_amplified": false
|
||||
}
|
||||
],
|
||||
"total": 5,
|
||||
"p0_count": 0,
|
||||
"p1_count": 1
|
||||
},
|
||||
"confirmation_gate": {
|
||||
"required": true,
|
||||
"reasons": [
|
||||
"识别到 2 个历史相似需求,需确认与旧需求的关系类型、生效范围和是否需要回写历史需求。"
|
||||
],
|
||||
"pending_markers_count": 0,
|
||||
"decision_file": "E:\\Desktop\\xst_files\\test\\QaAutomationHub\\decisions\\运单资料文件包下载需求_确认结论.md",
|
||||
"decision_status": "confirmed",
|
||||
"decision_status_label": "已确认",
|
||||
"allow_export_before_confirmation": true,
|
||||
"candidate_decision_files": [
|
||||
"E:\\Desktop\\xst_files\\test\\QaAutomationHub\\decisions\\运单资料文件包下载需求_确认结论.md"
|
||||
],
|
||||
"suggested_decision_file": "E:\\Desktop\\xst_files\\test\\QaAutomationHub\\decisions\\运单资料文件包下载需求_确认结论.md"
|
||||
},
|
||||
"agent_notes": {
|
||||
"requirement-analyzer": "识别 2 个关联需求",
|
||||
"conflict-detector": "检测到 0 个冲突候选",
|
||||
"risk-assessor": "识别 5 个风险项"
|
||||
},
|
||||
"_meta": {
|
||||
"zone": "analyze",
|
||||
"base_name": "运单资料文件包下载需求",
|
||||
"updated_at": "2026-09-08T08:11:23.800208+00:00",
|
||||
"status": "completed"
|
||||
}
|
||||
},
|
||||
"analysis_file": "E:\\Desktop\\xst_files\\test\\QaAutomationHub\\output\\analysis\\运单资料文件包下载需求_分析.md",
|
||||
"relation_report_file": "E:\\Desktop\\xst_files\\test\\QaAutomationHub\\output\\analysis\\运单资料文件包下载需求_关联与冲突.md",
|
||||
"risk_report_file": "E:\\Desktop\\xst_files\\test\\QaAutomationHub\\output\\analysis\\运单资料文件包下载需求_风险评估.md",
|
||||
"related_requirements": [
|
||||
{
|
||||
"path": "E:\\Desktop\\xst_files\\test\\QaAutomationHub\\requirements\\运单资料文件包下载需求.docx",
|
||||
"similarity": 0.833565
|
||||
},
|
||||
{
|
||||
"path": "E:\\Desktop\\xst_files\\test\\QaAutomationHub\\requirements\\安徽运八需求.md",
|
||||
"similarity": 0.10511
|
||||
}
|
||||
],
|
||||
"conflict_candidates_count": 0,
|
||||
"conflict_summary": {},
|
||||
"risk_matrix": {
|
||||
"risks": [
|
||||
{
|
||||
"id": "RISK-AVAILABILITY",
|
||||
"category": "可用性",
|
||||
"keywords_matched": [
|
||||
"并发",
|
||||
"重试",
|
||||
"幂等"
|
||||
],
|
||||
"likelihood": 3,
|
||||
"impact": 4,
|
||||
"score": 12,
|
||||
"level": "P1",
|
||||
"conflict_amplified": false
|
||||
},
|
||||
{
|
||||
"id": "RISK-FINANCIAL",
|
||||
"category": "资损",
|
||||
"keywords_matched": [
|
||||
"支付"
|
||||
],
|
||||
"likelihood": 1,
|
||||
"impact": 5,
|
||||
"score": 5,
|
||||
"level": "P2",
|
||||
"conflict_amplified": false
|
||||
},
|
||||
{
|
||||
"id": "RISK-COMPLIANCE",
|
||||
"category": "合规",
|
||||
"keywords_matched": [
|
||||
"加密"
|
||||
],
|
||||
"likelihood": 1,
|
||||
"impact": 5,
|
||||
"score": 5,
|
||||
"level": "P2",
|
||||
"conflict_amplified": false
|
||||
},
|
||||
{
|
||||
"id": "RISK-DATA",
|
||||
"category": "数据",
|
||||
"keywords_matched": [
|
||||
"删除"
|
||||
],
|
||||
"likelihood": 1,
|
||||
"impact": 4,
|
||||
"score": 4,
|
||||
"level": "P2",
|
||||
"conflict_amplified": false
|
||||
},
|
||||
{
|
||||
"id": "RISK-COMPATIBILITY",
|
||||
"category": "兼容性",
|
||||
"keywords_matched": [
|
||||
"版本"
|
||||
],
|
||||
"likelihood": 1,
|
||||
"impact": 3,
|
||||
"score": 3,
|
||||
"level": "P2",
|
||||
"conflict_amplified": false
|
||||
}
|
||||
],
|
||||
"total": 5,
|
||||
"p0_count": 0,
|
||||
"p1_count": 1
|
||||
},
|
||||
"confirmation_gate": {
|
||||
"required": true,
|
||||
"reasons": [
|
||||
"识别到 2 个历史相似需求,需确认与旧需求的关系类型、生效范围和是否需要回写历史需求。"
|
||||
],
|
||||
"pending_markers_count": 0,
|
||||
"decision_file": "E:\\Desktop\\xst_files\\test\\QaAutomationHub\\decisions\\运单资料文件包下载需求_确认结论.md",
|
||||
"decision_status": "confirmed",
|
||||
"decision_status_label": "已确认",
|
||||
"allow_export_before_confirmation": true,
|
||||
"candidate_decision_files": [
|
||||
"E:\\Desktop\\xst_files\\test\\QaAutomationHub\\decisions\\运单资料文件包下载需求_确认结论.md"
|
||||
],
|
||||
"suggested_decision_file": "E:\\Desktop\\xst_files\\test\\QaAutomationHub\\decisions\\运单资料文件包下载需求_确认结论.md"
|
||||
},
|
||||
"design": {
|
||||
"base_name": "运单资料文件包下载需求",
|
||||
"strategy_file": "E:\\Desktop\\xst_files\\test\\QaAutomationHub\\output\\analysis\\运单资料文件包下载需求_测试策略.md",
|
||||
"test_points_file": "E:\\Desktop\\xst_files\\test\\QaAutomationHub\\output\\test_points\\运单资料文件包下载需求_测试点.md",
|
||||
"test_cases_file": "E:\\Desktop\\xst_files\\test\\QaAutomationHub\\output\\test_cases\\运单资料文件包下载需求_测试用例.md",
|
||||
"test_data_file": "E:\\Desktop\\xst_files\\test\\QaAutomationHub\\output\\analysis\\运单资料文件包下载需求_测试数据.md",
|
||||
"p0_required_coverage": "N/A",
|
||||
"agent_notes": {
|
||||
"test-strategist": {
|
||||
"status": "completed",
|
||||
"message": "策略已生成,0 个 P0 风险需 100% 覆盖"
|
||||
},
|
||||
"testpoint-designer": {
|
||||
"status": "pending_ai",
|
||||
"message": "待 AI Agent 生成测试点",
|
||||
"prompt_file": "agents/design/testpoint_designer.md",
|
||||
"output_file": "E:\\Desktop\\xst_files\\test\\QaAutomationHub\\output\\test_points\\运单资料文件包下载需求_测试点.md"
|
||||
},
|
||||
"case-designer": {
|
||||
"status": "pending_ai",
|
||||
"message": "待 AI Agent 生成用例",
|
||||
"prompt_file": "agents/design/case_designer.md",
|
||||
"output_file": "E:\\Desktop\\xst_files\\test\\QaAutomationHub\\output\\test_cases\\运单资料文件包下载需求_测试用例.md"
|
||||
},
|
||||
"data-builder": {
|
||||
"status": "pending_ai",
|
||||
"message": "待 AI Agent 完善测试数据",
|
||||
"prompt_file": "agents/design/data_builder.md",
|
||||
"output_file": "E:\\Desktop\\xst_files\\test\\QaAutomationHub\\output\\analysis\\运单资料文件包下载需求_测试数据.md"
|
||||
}
|
||||
},
|
||||
"_meta": {
|
||||
"zone": "design",
|
||||
"base_name": "运单资料文件包下载需求",
|
||||
"updated_at": "2026-09-08T08:11:23.803209+00:00",
|
||||
"status": "completed"
|
||||
}
|
||||
},
|
||||
"strategy_file": "E:\\Desktop\\xst_files\\test\\QaAutomationHub\\output\\analysis\\运单资料文件包下载需求_测试策略.md",
|
||||
"test_points_file": "E:\\Desktop\\xst_files\\test\\QaAutomationHub\\output\\test_points\\运单资料文件包下载需求_测试点.md",
|
||||
"test_cases_file": "E:\\Desktop\\xst_files\\test\\QaAutomationHub\\output\\test_cases\\运单资料文件包下载需求_测试用例.md",
|
||||
"test_data_file": "E:\\Desktop\\xst_files\\test\\QaAutomationHub\\output\\analysis\\运单资料文件包下载需求_测试数据.md",
|
||||
"p0_required_coverage": "N/A",
|
||||
"execute": {
|
||||
"base_name": "运单资料文件包下载需求",
|
||||
"playwright_script": "E:\\Desktop\\xst_files\\test\\QaAutomationHub\\output\\execution\\运单资料文件包下载需求\\playwright_tests.py",
|
||||
"appium_script": "E:\\Desktop\\xst_files\\test\\QaAutomationHub\\output\\execution\\运单资料文件包下载需求\\appium_tests.py",
|
||||
"execution_report_file": "E:\\Desktop\\xst_files\\test\\QaAutomationHub\\output\\execution\\运单资料文件包下载需求_执行报告.md",
|
||||
"screenshots_dir": "E:\\Desktop\\xst_files\\test\\QaAutomationHub\\output\\screenshots\\运单资料文件包下载需求",
|
||||
"execution_config": {
|
||||
"browsers": [
|
||||
"chromium",
|
||||
"firefox",
|
||||
"webkit"
|
||||
],
|
||||
"mobile_platforms": [
|
||||
"android",
|
||||
"ios"
|
||||
],
|
||||
"screenshot_on_failure": true,
|
||||
"screenshot_on_step": false
|
||||
},
|
||||
"agent_notes": {
|
||||
"web-executor": "Playwright 脚本已生成 → E:\\Desktop\\xst_files\\test\\QaAutomationHub\\output\\execution\\运单资料文件包下载需求\\playwright_tests.py",
|
||||
"mobile-executor": "Appium 脚本已生成 → E:\\Desktop\\xst_files\\test\\QaAutomationHub\\output\\execution\\运单资料文件包下载需求\\appium_tests.py",
|
||||
"result-reporter": "执行报告 → E:\\Desktop\\xst_files\\test\\QaAutomationHub\\output\\execution\\运单资料文件包下载需求_执行报告.md"
|
||||
},
|
||||
"_meta": {
|
||||
"zone": "execute",
|
||||
"base_name": "运单资料文件包下载需求",
|
||||
"updated_at": "2026-09-08T08:11:23.808213+00:00",
|
||||
"status": "completed"
|
||||
}
|
||||
},
|
||||
"playwright_script": "E:\\Desktop\\xst_files\\test\\QaAutomationHub\\output\\execution\\运单资料文件包下载需求\\playwright_tests.py",
|
||||
"appium_script": "E:\\Desktop\\xst_files\\test\\QaAutomationHub\\output\\execution\\运单资料文件包下载需求\\appium_tests.py",
|
||||
"execution_report_file": "E:\\Desktop\\xst_files\\test\\QaAutomationHub\\output\\analysis\\运单资料文件包下载需求_执行分析.md",
|
||||
"screenshots_dir": "E:\\Desktop\\xst_files\\test\\QaAutomationHub\\output\\screenshots\\运单资料文件包下载需求",
|
||||
"execution_config": {
|
||||
"browsers": [
|
||||
"chromium",
|
||||
"firefox",
|
||||
"webkit"
|
||||
],
|
||||
"mobile_platforms": [
|
||||
"android",
|
||||
"ios"
|
||||
],
|
||||
"screenshot_on_failure": true,
|
||||
"screenshot_on_step": false
|
||||
},
|
||||
"review": {
|
||||
"base_name": "运单资料文件包下载需求",
|
||||
"review_report_file": "E:\\Desktop\\xst_files\\test\\QaAutomationHub\\output\\analysis\\运单资料文件包下载需求_评审报告.md",
|
||||
"coverage_report_file": "E:\\Desktop\\xst_files\\test\\QaAutomationHub\\output\\analysis\\运单资料文件包下载需求_覆盖率审计.md",
|
||||
"verdict_file": "E:\\Desktop\\xst_files\\test\\QaAutomationHub\\output\\analysis\\运单资料文件包下载需求_质量裁决.md",
|
||||
"quality_verdict": {
|
||||
"verdict": "PENDING_AI",
|
||||
"reason": "等待 AI Agent 评审(review 战区: case-reviewer → coverage-auditor → quality-gatekeeper)",
|
||||
"case_count": 0,
|
||||
"min_coverage_required": 0.95,
|
||||
"max_blockers_allowed": 0
|
||||
},
|
||||
"agent_notes": {
|
||||
"case-reviewer": {
|
||||
"status": "pending_ai",
|
||||
"message": "待 AI Agent 评审用例",
|
||||
"prompt_file": "agents/review/case_reviewer.md",
|
||||
"output_file": "E:\\Desktop\\xst_files\\test\\QaAutomationHub\\output\\analysis\\运单资料文件包下载需求_评审报告.md"
|
||||
},
|
||||
"coverage-auditor": {
|
||||
"status": "pending_ai",
|
||||
"message": "待 AI Agent 审计覆盖率",
|
||||
"prompt_file": "agents/review/coverage_auditor.md",
|
||||
"output_file": "E:\\Desktop\\xst_files\\test\\QaAutomationHub\\output\\analysis\\运单资料文件包下载需求_覆盖率审计.md"
|
||||
},
|
||||
"quality-gatekeeper": {
|
||||
"status": "pending_ai",
|
||||
"message": "待 AI Agent 质量裁决",
|
||||
"prompt_file": "agents/review/quality_gatekeeper.md",
|
||||
"output_file": "E:\\Desktop\\xst_files\\test\\QaAutomationHub\\output\\analysis\\运单资料文件包下载需求_质量裁决.md"
|
||||
}
|
||||
},
|
||||
"_meta": {
|
||||
"zone": "review",
|
||||
"base_name": "运单资料文件包下载需求",
|
||||
"updated_at": "2026-09-08T08:11:23.810212+00:00",
|
||||
"status": "completed"
|
||||
}
|
||||
},
|
||||
"review_report_file": "E:\\Desktop\\xst_files\\test\\QaAutomationHub\\output\\analysis\\运单资料文件包下载需求_评审报告.md",
|
||||
"coverage_report_file": "E:\\Desktop\\xst_files\\test\\QaAutomationHub\\output\\analysis\\运单资料文件包下载需求_覆盖率审计.md",
|
||||
"verdict_file": "E:\\Desktop\\xst_files\\test\\QaAutomationHub\\output\\analysis\\运单资料文件包下载需求_质量裁决.md",
|
||||
"quality_verdict": {
|
||||
"verdict": "PENDING_AI",
|
||||
"reason": "等待 AI Agent 评审(review 战区: case-reviewer → coverage-auditor → quality-gatekeeper)",
|
||||
"case_count": 0,
|
||||
"min_coverage_required": 0.95,
|
||||
"max_blockers_allowed": 0
|
||||
},
|
||||
"monitor": {
|
||||
"base_name": "运单资料文件包下载需求",
|
||||
"execution_report_file": "E:\\Desktop\\xst_files\\test\\QaAutomationHub\\output\\analysis\\运单资料文件包下载需求_执行分析.md",
|
||||
"agent_notes": {
|
||||
"execution-analyst": "等待测试结果输入",
|
||||
"knowledge-curator": "等待执行分析结果"
|
||||
},
|
||||
"curation_suggestions": [],
|
||||
"_meta": {
|
||||
"zone": "monitor",
|
||||
"base_name": "运单资料文件包下载需求",
|
||||
"updated_at": "2026-09-08T08:11:23.812219+00:00",
|
||||
"status": "completed"
|
||||
}
|
||||
},
|
||||
"curation_suggestions": []
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
# 运单资料文件包下载需求 关联需求与冲突检查
|
||||
|
||||
## 目标需求
|
||||
- `requirements\运单资料文件包下载需求.md`
|
||||
|
||||
## 项目画像
|
||||
- `knowledge_base\00_project\project_profile.md`
|
||||
|
||||
## 关联技术方案
|
||||
- 未识别到同主题技术方案文档。
|
||||
|
||||
## 关联需求识别
|
||||
| 序号 | 关联需求 | 相似度 |
|
||||
| :--- | :--- | :--- |
|
||||
| 1 | `requirements\运单资料文件包下载需求.docx` | 0.8336 |
|
||||
| 2 | `requirements\安徽运八需求.md` | 0.1051 |
|
||||
|
||||
## 潜在冲突与修改建议
|
||||
- 暂未识别到明显冲突条目。建议在需求评审时继续人工确认。
|
||||
@@ -0,0 +1,163 @@
|
||||
# 运单资料文件包下载需求 结构化分析
|
||||
|
||||
> 生成时间: 2026-09-08
|
||||
> 需求文档: requirements/运单资料文件包下载需求.md(v1.0 定稿)
|
||||
> 原始载体: requirements/运单资料文件包下载需求.docx(同版本 Word 载体,内容一致,见 decisions/运单资料文件包下载需求_确认结论.md)
|
||||
> 原型: resources/prototypes/anhuibaba_file_package.html(任务列表 / 上传弹窗 / 文件包结构预览 / 失败清单)
|
||||
> 项目画像: knowledge_base/00_project/project_profile.md
|
||||
> 确认状态: 需求方已于 2026-09-08 确认全部 13 项待确认事项(需求文档第八章),本文档无遗留待确认项
|
||||
|
||||
## 1. 需求背景
|
||||
|
||||
运营人员在线下归档、审计、对账场景中需要按批次收集运单资料:运单合同、电子回单,以及司机证件照片、车辆证件照片。目前只能逐单进入运单详情手工下载整理,效率低且易遗漏。
|
||||
|
||||
## 2. 目标
|
||||
|
||||
提供"上传运单清单 → 系统自动生成资料文件包 → 任务完成后下载"的批量导出能力。核心规则:**司机姓名+身份证号+车牌号三要素完全一致的运单归为一批,生成一个文件包**;文件包内按运单建运单包;批次内**最小序号**运单包额外含司机及车辆证件照片。
|
||||
|
||||
**本期范围**:仅做资料导出打包;不新增数据采集,合同、电子回单、司机证件、车辆证件均读取运八平台现有数据。
|
||||
|
||||
## 3. 用户角色
|
||||
|
||||
| 角色 | 职责 |
|
||||
| :--- | :--- |
|
||||
| 运营人员 | 唯一可见角色:下载模板、上传清单、查看任务进度、下载文件包/失败清单 |
|
||||
| 系统后台 | 异步打包任务:校验、归批、逐运单下载关联文件、组装 zip、清理过期包 |
|
||||
| 平台管理员 | 权限分配(菜单仅授权运营人员) |
|
||||
|
||||
## 4. 功能模块
|
||||
|
||||
### 4.1 菜单入口(运八平台端)
|
||||
运单管理相关模块下新增独立菜单"运单文件包"。页面结构:上方"上传任务"入口(模板下载 + 上传按钮),下方"任务列表"。菜单需权限控制——文件包含身份证等敏感证件照片。
|
||||
|
||||
### 4.2 文件上传
|
||||
- 模板列:序号(正整数,全文件唯一)/ 货源单号 / 运单号,格式 .xlsx,提供模板下载。
|
||||
- 限制:单文件 ≤2000 行,≤10MB。
|
||||
- 文件级校验(整体拒绝,不创建任务):非 xlsx、列名缺失或不符、文件损坏、行数/大小超限。
|
||||
- 数据级校验(该行计入失败清单):序号非正整数或重复、货源单号/运单号为空、运单号不存在、货源单号与运单实际所属货源不一致、运单号文件内重复、运单缺司机或车辆信息无法归批。
|
||||
- 处理原则:文件级错误整体拒绝;数据级错误剔除失败行后继续处理有效行。
|
||||
|
||||
### 4.3 任务
|
||||
- 状态机:待处理 → 处理中 → 已完成(全部有效行成功)/ 已完成·部分失败(部分行失败)/ 失败(系统级错误整体未生成文件包)。
|
||||
- 任务列表字段:任务编号、源文件名、上传人、上传时间、任务状态、总行数/成功数/失败数、完成时间、操作(下载文件包——任务成功后显示;下载失败清单——存在失败行时显示,xlsx,含序号/货源单号/运单号/失败原因)。
|
||||
|
||||
### 4.4 文件包生成
|
||||
- 批次划分:按有效行运单在**系统内**的司机姓名+身份证号+车牌号归组。同一司机换车、同一车辆换司机拆分为不同批次。
|
||||
- 目录结构(三层):任务总包 `运单资料_【任务编号】.zip` → 批次包 `【司机姓名】-【身份证号】-【车牌号】` → 运单包 `【序号】-【运单号】-【货源单号】`(最小序号运单追加 `-含司机及车辆证件` 后缀)。
|
||||
- 运单包子目录:合同 / 电子回单 / 司机证件 / 车辆证件;文件保留系统原文件名,重名自动追加 (1)、(2)。
|
||||
- 内容矩阵:合同+电子回单 → 全部运单;司机证件+车辆证件 → 仅批次内最小序号运单(证件以最小序号运单挂载的司机、车辆档案为准)。
|
||||
- 合同口径:以运单详情-合同附件为准(含承运合同),不含委托合同/框架合同。
|
||||
- 电子回单口径:运单全部支付记录对应的银行电子回单。
|
||||
- 文件缺失:不阻断任务,对应子目录不生成,原因记入失败清单;最小序号运单被剔除时重算最小序号并改挂证件;单个文件下载失败自动重试 3 次,仍失败记入失败清单。
|
||||
|
||||
### 4.5 下载
|
||||
任务完成后任务列表显示"下载"按钮,下载任务总包 zip;支持重复下载,不重复生成(幂等);下载记录审计日志(操作人、时间、任务编号);按批次文件包单独下载本期不做。
|
||||
|
||||
## 5. 核心规则
|
||||
|
||||
### 5.1 归批与证件挂载
|
||||
- 三要素 = 系统内司机姓名+身份证号+车牌号,完全一致归一批(非按上传行顺序、非按货源单号)。
|
||||
- 最小序号 = 上传清单中该批次内序号最小的运单;序号全文件唯一。
|
||||
- 单运单批次的运单包仍含司机及车辆证件。
|
||||
- 失败行剔除后,证件挂载到批次内剩余运单中序号最小者。
|
||||
|
||||
### 5.2 校验与失败处理
|
||||
- 文件级 → 整体拒绝;数据级 → 行级剔除继续。
|
||||
- 无电子回单(如运单被关闭、无支付记录):不阻断,子目录不生成,原因记失败清单。
|
||||
|
||||
### 5.3 异步与性能
|
||||
- 打包为后台异步任务,上传后无需等待;任务列表可见进度(成功/失败条数)。
|
||||
- 1000 单规模任务 30 分钟内完成。
|
||||
- 多任务并发:后台排队处理,并发上限 1~2,防磁盘/带宽压力。
|
||||
|
||||
### 5.4 存储与幂等
|
||||
- 文件包默认保留 7 天,过期自动清理,不可下载,需重新上传生成。
|
||||
- 同一任务重复点击下载不重复生成文件包。
|
||||
- 同一文件重复上传:允许,各自生成独立任务,不合并去重。
|
||||
|
||||
### 5.5 敏感数据合规
|
||||
- 司机身份证号、证件照片属敏感个人信息:菜单需权限控制、下载记审计日志。
|
||||
- 批次包命名含完整身份证号(确认决议 #3);zip 不加密,依赖权限+审计(确认决议 #12)。
|
||||
|
||||
## 6. 状态流转
|
||||
|
||||
```
|
||||
任务:待处理 → 处理中 → 已完成 | 已完成·部分失败 | 失败
|
||||
失败/完成后可删除任务重新上传(系统异常场景)
|
||||
文件包:已生成 →(7天)→ 过期清理 → 不可下载
|
||||
```
|
||||
|
||||
## 7. 异常与边界场景(需求第六章汇总)
|
||||
|
||||
1. 模板格式/列名错误 → 上传即拒绝
|
||||
2. 序号重复、非正整数 → 行级失败清单
|
||||
3. 运单号不存在 / 货源单号不匹配 → 行级失败清单
|
||||
4. 运单被关闭、未产生支付记录无电子回单 → 不阻断,记失败清单
|
||||
5. 运单缺司机或车辆信息无法归批 → 行级失败清单
|
||||
6. 批次内最小序号运单被剔除 → 证件改挂重算后的最小序号运单
|
||||
7. 同一文件重复上传 → 允许,独立任务
|
||||
8. 多任务并发 → 排队,并发上限 1~2
|
||||
9. 文件包超保留期 → 不可下载,重新上传
|
||||
10. 任务处理中系统异常 → 任务置"失败",支持删除重传
|
||||
|
||||
## 8. 歧义标注与待确认项
|
||||
|
||||
> ✅ **无遗留待确认项**:原 v0.1 草稿 13 项待确认事项已于 2026-09-08 经需求方全部确认并采纳文档建议方案(需求文档第八章确认决议记录):
|
||||
|
||||
| # | 事项 | 确认结论 |
|
||||
|:---:|:---|:---|
|
||||
| 1 | 菜单名称与挂载位置 | "运单文件包",挂运单管理模块下 |
|
||||
| 2 | 可见角色/权限 | 运营人员 |
|
||||
| 3 | 批次文件包命名 | 司机姓名-身份证号-车牌号(含完整身份证号) |
|
||||
| 4 | 运单包内子目录 | 合同/电子回单/司机证件/车辆证件 |
|
||||
| 5 | "运单相关合同"范围 | 以运单详情-合同附件为准(含承运合同),不含委托合同/框架合同 |
|
||||
| 6 | 货源单号与系统不一致时 | 该行失败 |
|
||||
| 7 | 数据级校验失败行处理 | 剔除后继续,任务记"已完成·部分失败" |
|
||||
| 8 | 失败行剔除后证件挂载 | 挂到批次内剩余运单的最小序号运单 |
|
||||
| 9 | 行数/大小上限 | 2000 行 / 10MB |
|
||||
| 10 | 文件包保留期 | 7 天 |
|
||||
| 11 | 按批次包单独下载 | 本期不做 |
|
||||
| 12 | zip 是否加密 | 不加密(依赖权限+审计) |
|
||||
| 13 | 序号唯一性范围 | 全文件唯一 |
|
||||
|
||||
## 9. 需求条目清单(追溯链骨干,供测试点/用例/覆盖率审计引用)
|
||||
|
||||
| 需求条目 | 内容摘要 | 来源章节 | 优先级基准 |
|
||||
| :--- | :--- | :--- | :---: |
|
||||
| REQ-001 | 新增"运单文件包"菜单挂运单管理模块下,页面为上传入口+任务列表结构 | 4.1 | P0 |
|
||||
| REQ-002 | 菜单权限控制:仅运营人员可见可操作(敏感数据) | 4.1/七 | P0 |
|
||||
| REQ-003 | 模板下载:xlsx 模板,列=序号/货源单号/运单号 | 4.2.1 | P1 |
|
||||
| REQ-004 | 上传限制:xlsx、≤2000 行、≤10MB | 4.2.1 | P1 |
|
||||
| REQ-005 | 文件级校验整体拒绝:非 xlsx/列名缺失或不符/损坏/超限,不创建任务并提示具体原因 | 4.2.2 | P0 |
|
||||
| REQ-006 | 数据级校验行级失败:序号非法/重复、单号为空、运单号不存在、货源不匹配、运单号文件内重复、无法归批 | 4.2.2 | P0 |
|
||||
| REQ-007 | 数据级处理原则:剔除失败行继续有效行,任务记"已完成·部分失败" | 4.2.2 | P0 |
|
||||
| REQ-008 | 任务状态机:待处理→处理中→已完成/已完成·部分失败/失败 | 4.3.1 | P0 |
|
||||
| REQ-009 | 任务列表字段完整:任务编号/源文件名/上传人/上传时间/状态/总·成功·失败数/完成时间/操作 | 4.3.2 | P1 |
|
||||
| REQ-010 | 批次划分:系统内司机姓名+身份证号+车牌号三要素归批,换车/换司机拆批 | 4.4.1 | P0 |
|
||||
| REQ-011 | 三层目录结构与命名:总包/批次包/运单包命名规则,最小序号运单包带"-含司机及车辆证件"后缀 | 4.4.2 | P0 |
|
||||
| REQ-012 | 运单包内容矩阵:合同+回单全员,司机证件+车辆证件仅最小序号运单;单运单批次仍含证件 | 4.4.3 | P0 |
|
||||
| REQ-013 | 数据来源口径:合同=运单详情-合同附件(含承运不含委托/框架);回单=全部支付记录银行电子回单;证件=司机/车辆档案 | 4.4.3 | P1 |
|
||||
| REQ-014 | 子目录组织与重名处理:合同/电子回单/司机证件/车辆证件子目录,原文件名保留,重名追加(1)(2) | 4.4.2 | P1 |
|
||||
| REQ-015 | 文件缺失处理:无合同/回单不阻断记失败清单;最小序号剔除重算改挂;单文件下载失败重试 3 次 | 4.4.4 | P0 |
|
||||
| REQ-016 | 下载:任务完成后可下载总包 zip;重复下载不重复生成(幂等) | 4.5/七 | P0 |
|
||||
| REQ-017 | 下载审计日志:操作人、时间、任务编号 | 4.5/七 | P0 |
|
||||
| REQ-018 | 失败清单下载:存在失败行时显示,xlsx 含序号/货源单号/运单号/失败原因 | 4.3.2 | P1 |
|
||||
| REQ-019 | 异步处理:后台打包,上传后无需等待,列表可见进度 | 七 | P1 |
|
||||
| REQ-020 | 性能:1000 单规模任务 30 分钟内完成 | 七 | P1 |
|
||||
| REQ-021 | 保留期:7 天过期自动清理,不可下载需重新上传 | 七/六#9 | P1 |
|
||||
| REQ-022 | 并发控制:多任务排队,并发上限 1~2 | 六#8 | P1 |
|
||||
| REQ-023 | 重复上传:同一文件重复上传允许,独立任务不合并 | 六#7 | P2 |
|
||||
| REQ-024 | 系统异常:任务处理中异常置"失败",支持删除后重新上传 | 六#10 | P1 |
|
||||
| REQ-025 | 按批次文件包单独下载:本期不做(负向范围确认) | 4.5/八#11 | P3 |
|
||||
| REQ-026 | zip 不加密,依赖权限控制+审计日志保障敏感数据(确认决议 #12) | 八#12 | P2 |
|
||||
|
||||
## 10. 项目差异化约束
|
||||
|
||||
- 所属端:运八平台端(Web 管理后台,Vue.js + Element UI SPA),非 C 端。
|
||||
- 测试环境:管理端 https://ybxcx.ynyun8.com:8000/admin;超级管理员账号 super_admin(项目画像 §1)。
|
||||
- 文件存储依赖华为云 OBS(项目画像 §6.1)——打包任务需从 OBS 拉取合同/回单/证件原件,OBS 不可用是打包失败的主要外部依赖风险。
|
||||
- 敏感个人信息(身份证号、证件照片)导出场景:权限隔离 + 审计日志为合规必测项;批次包命名含完整身份证号放大泄露面。
|
||||
- Excel 大文件处理:本项目既有 Excel 导出惯例默认 20000 条(项目画像 §8.3),本需求上传方向限 2000 行/10MB,测试需覆盖边界(2000/2001 行、10MB 临界)。
|
||||
- 异步任务与并发:项目画像必测异常场景含"重复提交(幂等)、并发提交、超时重试、依赖服务不可用"——对应本需求重复下载幂等、并发任务排队、OBS 依赖失败重试 3 次。
|
||||
- 与 requirements/安徽运八需求.md 为并行模块(相似度 0.105,见 decisions/运单资料文件包下载需求_确认结论.md),不共享数据口径,无冲突防御需求;历史缺陷防御重点关注文件打包下载类通用缺陷(见 knowledge_base/02_history/historical_defects.md)。
|
||||
- 风险矩阵基线(output/analysis/运单资料文件包下载需求_风险评估.md):P0=0,P1=1(RISK-AVAILABILITY:并发/重试/幂等),P2=4(资损/合规/数据/兼容性);P1 风险对应测试点不得静默省略。
|
||||
@@ -0,0 +1,575 @@
|
||||
# 运单资料文件包下载需求 测试点
|
||||
|
||||
> 生成时间: 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 |
|
||||
@@ -0,0 +1,147 @@
|
||||
# 运单资料文件包下载需求 测试用例
|
||||
|
||||
> 生成时间: 2026-09-08
|
||||
> 依据: requirements/运单资料文件包下载需求.md(v1.0 定稿,含 13 项确认决议)、output/test_points/运单资料文件包下载需求_测试点.md(59 个测试点)、output/analysis/运单资料文件包下载需求_测试数据.md(145 组数据)、output/analysis/运单资料文件包下载需求_关联与冲突.md(无冲突,与安徽运八并行)、knowledge_base/00_project/project_profile.md、knowledge_base/01_standards/test_case_template.md、review_checklist.md
|
||||
> 原型: resources/prototypes/anhuibaba_file_package.html
|
||||
> 用例编号前缀: PLT_TMS_FPKG(平台端-运输管理-运单文件包)
|
||||
>
|
||||
> **测试用例总数: 85**
|
||||
> **优先级分布: P0=33 / P1=43 / P2=7 / P3=2**
|
||||
> **类型分布: 功能测试 62 / 安全性测试 10 / 回归测试 7 / 性能测试 3 / 兼容性测试 1 / 易用性测试 1 / 冒烟测试 1**
|
||||
> **模块分布: 菜单权限 7 / 上传校验 14 / 数据校验 11 / 任务列表 13 / 打包归批 21 / 下载审计 7 / 非功能 11 / 跨模块冒烟 1**
|
||||
> **测试点映射: 59/59 全覆盖——P0 测试点 25 个 100% 对应用例,P1 测试点 26 个 100% 对应用例,P2/P3 测试点 8 个全部保留(取舍理由见文末)**
|
||||
>
|
||||
> 阅读约定:本文件全文仅一个用例总表;"测试数据"列引用 output/analysis/运单资料文件包下载需求_测试数据.md 中的数据ID;账号默认 ACC-001(super_admin/951260684NiAn..,环境真实账号),ACC-002/003/006 为需在角色管理创建的账号(数据缺口 #9/#10);XLS-001~005 等示例单号落地时须映射为测试环境真实运单(数据缺口 #1);文末集中列出 Q1~Q6 保留待确认项与实现口径确认项。
|
||||
|
||||
## 用例编号与测试点映射总览
|
||||
|
||||
- TP-M-001→002;TP-M-002→003;TP-M-003→004/005;TP-M-004→006;TP-M-005→007/008
|
||||
- TP-U-001→009/085;TP-U-002→001/010;TP-U-003→011;TP-U-004→012/013/085;TP-U-005→014;TP-U-006→015/016;TP-U-007→017/018;TP-U-008→019;TP-U-009→020;TP-U-010→021;TP-U-011→022;TP-U-012→023;TP-U-013→024;TP-U-014→025;TP-U-015→026/027/083;TP-U-016→028/029;TP-U-017→030;TP-U-018→031
|
||||
- TP-T-001→001/032/033;TP-T-002→034;TP-T-003→035/036;TP-T-004→037/038;TP-T-005→039/040;TP-T-006→041/042;TP-T-007→043;TP-T-008→044
|
||||
- TP-P-001→045;TP-P-002→046/047;TP-P-003→048;TP-P-004→049;TP-P-005→050;TP-P-006→051/052;TP-P-007→053/054/084;TP-P-008→055/056;TP-P-009→057/058;TP-P-010→059;TP-P-011→060;TP-P-012→061;TP-P-013→062/063;TP-P-014→064
|
||||
- TP-D-001→001/065;TP-D-002→066;TP-D-003→067;TP-D-004→068;TP-D-005→069;TP-D-006→070/071
|
||||
- TP-N-001→072;TP-N-002→073;TP-N-003→074/075;TP-N-004→076/077;TP-N-005→078;TP-N-006→079/080;TP-N-007→081;TP-N-008→082
|
||||
|
||||
---
|
||||
|
||||
## 用例总表
|
||||
|
||||
| 用例编号 | 模块 | 用例标题 | 优先级 | 类型 | 前置条件 | 测试步骤 | 测试数据 | 预期结果 | 备注 |
|
||||
| :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- |
|
||||
| PLT_TMS_FPKG_001 | 平台端-运单管理-运单文件包 | 冒烟验证上传合法清单到下载总包的端到端主流程 | P0 | 冒烟测试 | 1. ACC-001(super_admin)已登录平台端管理后台;2. 环境存在需求五章示例运单 YD20260901001/YD20260901002/YD20260901003(均已结算打款、含承运合同附件与银行电子回单、司机车辆证件齐全,数据缺口 #1) | 1. 进入"运单文件包"页面点击"下载模板"获得 XLS-008<br>2. 按模板填写 XLS-001/002/003 三行(序号 1/2/3,货源单号 HY202609001/HY202609002/HY202609001)<br>3. 点击"上传清单"选择文件并确认"开始上传并创建任务"<br>4. 轮询任务列表直至状态"已完成"<br>5. 点击该行"下载文件包"并解压 | ACC-001 账号;XLS-008 模板;XLS-001/002/003 清单行;IDC-006 总包命名 | 1. 模板为合法 .xlsx 且仅含 序号/货源单号/运单号 三列<br>2. 上传成功提示含任务编号(IDC-001 格式,编码规则以实现为准)<br>3. 列表置顶新增任务行,状态经 待处理→处理中→已完成,成功数=3、失败数=0、完成时间有值<br>4. 下载文件名=运单资料_【任务编号】.zip,zip 含 2 个批次包(张三-340102199001011234-皖A12345、李四-340102199001015678-皖B67890)及运单包 1-YD20260901001-HY202609001-含司机及车辆证件、3-YD20260901003-HY202609001、2-YD20260901002-HY202609002-含司机及车辆证件,解压无损坏 | 对应TP-U-002/TP-T-001/TP-D-001;REQ-001/REQ-004/REQ-008/REQ-016(核心链路首轮冒烟) |
|
||||
| PLT_TMS_FPKG_002 | 平台端-运单管理-运单文件包-菜单权限 | 验证"运单文件包"菜单挂载位置与页面骨架完整 | P0 | 功能测试 | ACC-001 已登录且其角色已配置"运单文件包"菜单权限 | 1. 在运单管理相关模块下查找菜单"运单文件包"<br>2. 点击菜单进入页面<br>3. 自上而下核对页面结构:上传任务入口(模板下载+上传按钮)与任务列表<br>4. 核对面包屑与左侧菜单高亮 | ACC-001 账号;菜单名称"运单文件包"(决议#1);IDC-011 模板下载入口 | 1. 菜单名称逐字为"运单文件包"且挂在运单管理相关模块下<br>2. 页面自上而下为上传任务入口(含"下载模板""上传清单"按钮)在前、任务列表表格在后<br>3. 面包屑与菜单高亮定位正确<br>4. 角色-菜单权限关联数据中已含该菜单配置,页面无需求未定义的多余功能入口 | 对应TP-M-001;REQ-001 |
|
||||
| PLT_TMS_FPKG_003 | 平台端-运单管理-运单文件包-菜单权限 | 验证被授权运营人员可见菜单并完成上传查看下载全链路 | P0 | 安全性测试 | 1. 已通过平台管理-角色管理创建运营人员账号 ACC-002(仅授权"运单文件包"菜单,数据缺口 #9);2. 环境存在 XLS-007 对应的有效运单(已结算、含合同与回单) | 1. ACC-002 登录平台端确认侧边栏可见"运单文件包"<br>2. 下载 XLS-008 模板并填写 XLS-007(1/HY202609001/YD20260901001)<br>3. 上传并等待任务完成<br>4. 点击"下载文件包"获取 zip<br>5. 全程观察是否出现权限拦截 | ACC-002 运营账号;XLS-008 模板;XLS-007 最小合法清单 | 1. 菜单可见,上传/查看进度/下载全链路无 401/403 拦截<br>2. 上传成功创建任务并提示任务编号<br>3. 任务完成后 zip 下载解压正常<br>4. 数据库任务表记录上传人=ACC-002 账号名<br>5. 页面内无其他角色越权入口 | 对应TP-M-002;REQ-002(权限分配由平台管理员在角色管理完成,项目画像 §2.2) |
|
||||
| PLT_TMS_FPKG_004 | 平台端-运单管理-运单文件包-菜单权限 | 验证非授权角色登录后侧边栏无"运单文件包"菜单 | P0 | 安全性测试 | 1. 存在未授权"运单文件包"菜单的对照账号 ACC-003(财务/客服类角色,数据缺口 #9);2. 车队长 ACC-004(13113113113)与司机 ACC-005(15188888888)账号可用 | 1. ACC-003 登录平台端,遍历侧边栏全部模块与菜单搜索<br>2. ACC-004 登录检查其端内是否有该功能入口<br>3. ACC-005 登录司机端检查是否有该功能入口<br>4. 记录各角色会话下页面渲染内容 | ACC-003/ACC-004/ACC-005 账号 | 1. ACC-003 侧边栏全程无"运单文件包"入口(含菜单搜索)<br>2. 车队长端与司机端均无该功能入口<br>3. 各非授权角色页面不渲染任何任务列表数据<br>4. 角色权限配置数据中未授权角色的菜单集合不含该菜单 | 对应TP-M-003;REQ-002 |
|
||||
| PLT_TMS_FPKG_005 | 平台端-运单管理-运单文件包-菜单权限 | 验证未登录与低权限会话 URL 直达页面被拦截 | P0 | 安全性测试 | 1. 已从 ACC-001 会话获取"运单文件包"页面路由地址;2. ACC-003(无该菜单权限)账号可用 | 1. 未登录状态浏览器直接输入页面 URL<br>2. ACC-003 登录后直接输入页面 URL<br>3. 观察两种场景的跳转与页面渲染<br>4. 打开开发者工具查看任务列表接口响应 | 页面路由 URL;ACC-003 账号 | 1. 未登录访问跳转登录页(或 403 页面),不渲染任务数据<br>2. ACC-003 访问返回 403 或无权限提示页,不渲染任务数据<br>3. 两种场景下任务列表接口请求均被服务端拒绝(401/403),无任务数据泄露 | 对应TP-M-003;REQ-002(漏测清单 §3 未登录访问) |
|
||||
| PLT_TMS_FPKG_006 | 平台端-运单管理-运单文件包-菜单权限 | 验证无权限会话直接调用上传列表下载接口被服务端拒绝 | P1 | 安全性测试 | 1. ACC-003 已登录并取得有效会话凭证;2. 已存在一个已完成打包任务(任务编号 T1);3. 接口测试工具可用 | 1. 用 ACC-003 会话直接调用任务列表查询接口<br>2. 直接调用上传接口(携带合法 xlsx 文件)<br>3. 直接调用任务 T1 的下载接口<br>4. 记录三个接口的状态码与响应体<br>5. 检查任务列表 | ACC-003 会话凭证;任务编号 T1;合法 xlsx 文件 | 1. 三个接口均返回 401/403(或业务鉴权错误码),不返回业务数据与文件流<br>2. 上传接口不创建任务(数据库无新增任务记录)<br>3. 服务端鉴权独立于前端菜单隐藏,接口不因缺少前端入口而放行 | 对应TP-M-004;REQ-002(RISK-COMPLIANCE P2 缓解措施) |
|
||||
| PLT_TMS_FPKG_007 | 平台端-运单管理-运单文件包-菜单权限 | 验证跨机构任务列表与文件包下载的数据隔离 | P1 | 安全性测试 | 1. 多机构部署环境:A 机构运营账号 ACC-001、B 机构运营账号均可登录(多机构选择登录);2. B 机构已存在一个已完成打包任务(任务编号 TB,含 B 机构运单资料) | 1. ACC-001 登录查看任务列表全量<br>2. 从 B 机构会话获取任务编号 TB 与其下载请求报文<br>3. ACC-001 会话携带 TB 重放下载接口<br>4. 查询数据库任务表 | ACC-001(A 机构);B 机构任务编号 TB | 1. ACC-001 任务列表不显示 B 机构任务(列表数据仅本机构)<br>2. 携带 TB 的下载请求被数据权限拦截(403/无权限类响应),不返回 zip 文件流<br>3. 数据库按机构维度过滤,A 机构会话查不到 B 机构任务记录 | 对应TP-M-005;REQ-002/REQ-026(项目画像 §10 权限类必测机构隔离,升为 P1);环境依赖:多机构部署与 B 机构数据见测试数据缺口 #18;若环境为单机构部署或 super_admin 按设计具备跨机构可见性,隔离断言改用绑定 A 机构的非超管运营账号(ACC-002 补机构绑定)执行并在执行报告记录结论,不得静默跳过 |
|
||||
| PLT_TMS_FPKG_008 | 平台端-运单管理-运单文件包-菜单权限 | 验证上传清单含他机构运单号时按行级失败处理不导出 | P2 | 安全性测试 | 1. ACC-001(A 机构)已登录;2. B 机构存在有效运单 YDB-001(含证件与回单资料) | 1. 按 XLS-008 模板构造 2 行清单:第 1 行为 A 机构有效运单 XLS-001,第 2 行运单号填 B 机构运单 YDB-001、货源单号填 B 机构货源<br>2. 上传并等待任务完成<br>3. 下载 zip 检查内容<br>4. 下载失败清单核对 | XLS-008 模板;XLS-001 行;B 机构运单号 YDB-001 | 1. 任务状态"已完成·部分失败",成功数=1、失败数=1<br>2. 失败清单第 2 行原样记录,失败原因属"运单号在系统中不存在"或权限类文案(以实现为准)<br>3. zip 内不含 YDB-001 的任何运单包、证件或回单文件<br>4. B 机构运单在 A 机构会话下不可见不可导出 | 对应TP-M-005;REQ-002/REQ-026(B 机构运单 YDB-001 环境依赖见测试数据缺口 #18) |
|
||||
| PLT_TMS_FPKG_009 | 平台端-运单管理-运单文件包-上传校验 | 验证模板下载产物为合法 xlsx 且仅含三列 | P0 | 功能测试 | ACC-001 已登录并进入"运单文件包"页面 | 1. 点击上传入口"下载模板"按钮<br>2. 检查下载文件名与文件格式(IDC-011:运单清单模板.xlsx)<br>3. 用 Excel/WPS 打开核对表头与模板内说明文字<br>4. 在该模板中按 XLS-007 填写 1 行有效运单后直接上传 | IDC-011 模板文件;XLS-007(1/HY202609001/YD20260901001) | 1. 下载得到合法 .xlsx 文件(文件名与 IDC-011 一致,以实现为准)<br>2. 表头仅含 序号/货源单号/运单号 三列,列名与需求 4.2.1 逐字一致<br>3. 模板内填写说明独立于数据表头,上传时不参与数据解析(不因说明行被拒)<br>4. 用模板填写的 XLS-007 上传成功并创建任务(模板自洽) | 对应TP-U-001;REQ-003 |
|
||||
| PLT_TMS_FPKG_010 | 平台端-运单管理-运单文件包-上传校验 | 验证合法清单上传创建任务并正确回填列表字段 | P0 | 功能测试 | 1. ACC-001 已登录;2. 环境存在 XLS-001/002/003 对应运单(数据缺口 #1);3. 已记录上传前"全部任务"统计卡片数值 | 1. 点击"上传清单"选择本地文件"运单清单_合肥仓0908.xlsx"(内含 XLS-001/002/003 三行)<br>2. 确认"开始上传并创建任务"<br>3. 查看成功提示与任务列表置顶新行<br>4. 核对新行各字段取值<br>5. 核对统计卡片计数 | 源文件名 IDC-012(运单清单_合肥仓0908.xlsx);XLS-001/002/003 | 1. 上传成功提示含系统生成任务编号(IDC-001 格式,编码规则以实现为准)<br>2. 列表置顶新增一行:源文件名=运单清单_合肥仓0908.xlsx、上传人=当前账号、上传时间=当前时间、总行数=3<br>3. 任务状态由"待处理"流转"处理中"并最终"已完成",成功数=3、失败数=0<br>4. "全部任务"统计卡片计数较上传前 +1;数据库任务表新增记录且统计字段与清单一致 | 对应TP-U-002;REQ-001/REQ-004/REQ-005 |
|
||||
| PLT_TMS_FPKG_011 | 平台端-运单管理-运单文件包-上传校验 | 验证非 xlsx 格式文件上传整体拒绝且前后端双重限制 | P0 | 功能测试 | 1. ACC-001 已登录;2. 本地准备 ERR-001(.xls)、ERR-002(.csv/.docx/.jpg)、ERR-003(zip 改后缀名为 .xlsx 的伪造文件);3. 接口测试工具可用 | 1. 点击"上传清单"分别选择 .xls、.csv、.docx 文件,观察文件选择器过滤与页面提示<br>2. 选择 ERR-003 伪 xlsx 上传<br>3. 用接口工具携带 ACC-001 会话直传 .csv 与伪 xlsx(绕过前端)<br>4. 每次上传后检查任务列表与数据库 | ERR-001/ERR-002/ERR-003;BND-014 类伪格式文件 | 1. 前端文件选择器过滤非 .xlsx,或选择后立即提示"格式不支持"类具体原因<br>2. 伪 xlsx 被后端魔数/结构校验拒绝(防仅校验后缀),提示明确<br>3. 接口直传同样被拒(后端独立校验防绕过)<br>4. 全部场景不创建任务:列表无新增行、数据库无任务记录 | 对应TP-U-003;REQ-005 |
|
||||
| PLT_TMS_FPKG_012 | 平台端-运单管理-运单文件包-上传校验 | 验证列名缺失或不符的清单整体拒绝且提示具体列问题 | P0 | 功能测试 | 1. ACC-001 已登录;2. 按 ERR-004/ERR-005 构造 4 个清单文件(缺序号列、缺货源单号列、列名拼写错误、三列+多余备注列) | 1. 上传缺"序号"列文件(仅货源单号/运单号两列)<br>2. 上传缺"货源单号"列文件<br>3. 上传列名不符文件(如"单号""序号(必填)""No."、序号尾带空格)<br>4. 上传含多余未知列文件<br>5. 每次上传后检查任务列表 | ERR-004(缺列);ERR-005(列名不符变体) | 1. 四类文件均整体拒绝,提示信息指明具体列问题(如"列名缺失或不符"并指明列,具体文案以实现为准)<br>2. 均不创建任务:列表无新增行、数据库无任务记录<br>3. 不产生失败清单(未进入数据级校验) | 对应TP-U-004;REQ-005 |
|
||||
| PLT_TMS_FPKG_013 | 平台端-运单管理-运单文件包-上传校验 | 验证三列名齐全仅列顺序打乱的清单可正常上传 | P0 | 功能测试 | 1. ACC-001 已登录;2. 构造列顺序为 运单号/货源单号/序号 的 3 行清单(行数据同 XLS-001/002/003) | 1. 上传列序打乱清单<br>2. 等待任务完成并核对统计<br>3. 下载 zip 核对批次划分与命名 | ERR-007 构造文件(列名齐全顺序打乱);XLS-001/002/003 行数据 | 1. 上传成功创建任务且总行数=3(按列名匹配解析,不因列顺序拒绝)<br>2. 任务"已完成"、成功数=3<br>3. zip 批次划分、运单包命名与列序正常文件完全一致(归批与命名不受列序影响) | 对应TP-U-004;REQ-005(需求 4.2.2 仅约束"列名缺失或不符"未约束列顺序,按列名匹配口径设计;若实现按固定列序读取则本用例失败需回归,见文末实现口径确认项) |
|
||||
| PLT_TMS_FPKG_014 | 平台端-运单管理-运单文件包-上传校验 | 验证损坏与加密 xlsx 上传被拒绝且服务端无异常暴露 | P1 | 功能测试 | 1. ACC-001 已登录;2. 准备 ERR-008(截断 xlsx、缺 workbook.xml 的伪 xlsx)、带密码加密 xlsx、0 字节空文件 | 1. 依次上传截断 xlsx 与伪 xlsx<br>2. 上传带密码加密 xlsx<br>3. 上传 0 字节空文件<br>4. 观察每次提示并检查任务列表、服务端日志 | ERR-008(截断/伪 xlsx);加密 xlsx;BND-014(0 字节空文件) | 1. 全部整体拒绝,提示"文件损坏/无法读取"类可理解原因,加密文件给出可理解提示而非堆栈报错<br>2. 页面无 500/白屏,服务端日志无未捕获异常堆栈<br>3. 均不创建任务,后台无残留半任务记录 | 对应TP-U-005;REQ-005 |
|
||||
| PLT_TMS_FPKG_015 | 平台端-运单管理-运单文件包-上传校验 | 验证单文件 2000 行成功与 2001 行整体拒绝的行数上限边界 | P1 | 功能测试 | 1. ACC-001 已登录;2. 环境已准备 2000 个有效运单并生成 XLS-006 清单(数据缺口 #1/#12);3. 已构造 2001 行清单 | 1. 上传 XLS-006(2000 行)等待任务完成并核对成功数<br>2. 上传 2001 行清单<br>3. 检查第二次上传后的任务列表与提示 | XLS-006(2000 行);BND-005/BND-006(2000/2001 行) | 1. 2000 行任务创建成功且最终成功数=2000、失败数=0<br>2. 2001 行文件上传即整体拒绝,提示行数超限类原因<br>3. 2001 行不创建任务(列表无新增行、数据库无记录)<br>4. 行数口径:2000 行含、2001 行即超限拒绝 | 对应TP-U-006;REQ-004(决议#9);Q3 已按需求口径收敛:需求 4.2.1 明确"单文件行数上限 2000 行",按数据行计 2000 成功/2001 拒绝 |
|
||||
| PLT_TMS_FPKG_016 | 平台端-运单管理-运单文件包-上传校验 | 验证仅表头 0 数据行的空清单被拒绝且不生成空任务 | P1 | 功能测试 | 1. ACC-001 已登录;2. 准备未填写任何数据行的 XLS-008 模板文件 | 1. 直接上传未填写数据的模板 XLS-008<br>2. 观察拒绝提示<br>3. 检查任务列表与对象存储 | XLS-008(仅表头 0 数据行);BND-001 | 1. 上传被文件级拒绝,提示"清单无数据行"类明确原因<br>2. 不创建任务:列表无新增行、数据库无任务记录<br>3. 不生成任何空 zip 或空文件包(对象存储无空包残留) | 对应TP-U-006;REQ-004;Q2 已收敛:按文件级拒绝处理,依据需求三章"填写运单清单并上传"与 4.2.2 处理原则(任务处理对象为有效数据行)及测试点建议口径,若实现按 0 行任务创建需回归修订本用例 |
|
||||
| PLT_TMS_FPKG_017 | 平台端-运单管理-运单文件包-上传校验 | 验证文件大小 10MB 临界值两侧的接受与拒绝行为 | P1 | 功能测试 | 1. ACC-001 已登录;2. 用 openpyxl 构造恰好 10MB 与 10MB+1B 的合法结构 xlsx(数据缺口 #12) | 1. 上传恰好 10MB 的合法清单<br>2. 上传 10MB+1B 的清单<br>3. 分别检查任务列表与提示 | BND-012(10MB 整);BND-013(10MB+1B) | 1. 恰好 10MB 文件上传成功并正常创建任务("大小不超过 10MB"含等于)<br>2. 10MB+1B 整体拒绝,提示大小超上限类原因<br>3. 拒绝场景不创建任务 | 对应TP-U-007;REQ-004(决议#9);10MB 字节口径(10 的 6 次方或 2 的 20 次方)见数据缺口 #16,执行前与开发确认 |
|
||||
| PLT_TMS_FPKG_018 | 平台端-运单管理-运单文件包-上传校验 | 验证行数上限与大小上限两条限制相互独立生效 | P1 | 功能测试 | 1. ACC-001 已登录;2. 构造文件一:50 行但单元格嵌入超长文本使体积超 10MB;3. 构造文件二:2001 行普通数据体积约 1MB | 1. 上传文件一观察拒绝原因<br>2. 上传文件二观察拒绝原因<br>3. 对比两条提示文案<br>4. 检查任务列表 | 文件一(行数少体积超限);文件二(行数超限体积小);BND-006/BND-013 | 1. 文件一被大小限制拒绝(提示大小超上限)<br>2. 文件二被行数限制拒绝(提示行数超限)<br>3. 两条提示原因可区分不混淆<br>4. 两者均不创建任务 | 对应TP-U-007;REQ-004(项目画像 §8.3 Excel 大数据量惯例,两条限制独立生效) |
|
||||
| PLT_TMS_FPKG_019 | 平台端-运单管理-运单文件包-数据校验 | 验证序号非正整数的行计入失败清单且有效行不受影响 | P0 | 功能测试 | 1. ACC-001 已登录;2. 环境存在 XLS-002 对应有效运单;3. 构造 7 行清单:1 行合法(序号 9+XLS-002 数据)+6 行序号分别为 0、-1、1.5、abc、空、全角数字"1"(货源单号/运单号按 XLS-101~105 构造) | 1. 上传该 7 行清单等待任务完成<br>2. 查看任务状态与成功/失败数<br>3. 下载失败清单核对 6 个失败行的原因<br>4. 下载 zip 核对成功行 | XLS-101/102/103/104/105(序号 0/-1/1.5/abc/空);全角数字"1"构造行;ERR-020 | 1. 任务状态"已完成·部分失败",成功数=1、失败数=6<br>2. 6 个失败行原因均含"序号非正整数"类文案(一行并存多项问题时原因以首要或并列展示,以实现文案为准,不得将非法序号行判为成功)<br>3. 合法行正常打包(zip 含其运单包)<br>4. 成功数+失败数=总行数 7,数据库统计一致 | 对应TP-U-008;REQ-006(执行时顺带探测 BND-025/026/027 极值序号:int32 上限 2147483647 行与 15 位以上数字行应"合法或明确报错,不得静默截断",防止破坏最小序号判定链;见文末确认项 #9) |
|
||||
| PLT_TMS_FPKG_020 | 平台端-运单管理-运单文件包-数据校验 | 验证序号全文件唯一的重复序号行计入失败清单且首行保留 | P0 | 功能测试 | 1. ACC-001 已登录;2. 构造 3 行清单:行1 序号 1+YD20260901001(张三批)、行2 序号 1+YD20260901002(李四批)、行3 序号 2+YD20260901003(张三批)——重复序号 1 跨张三/李四两个批次 | 1. 上传该 3 行清单等待完成<br>2. 核对失败清单行与原因<br>3. 下载 zip 核对保留行批次归属与证件挂载 | XLS-106(两行序号均为 1);XLS-003 行;决议#13 | 1. 行1(首现行)保留处理、行2(重复行)进失败清单且原因明确"序号重复"类<br>2. 唯一性范围为全文件:重复序号跨张三/李四批次同样剔除,不按批次内判定<br>3. 行3 正常打包;行1 与行3 归张三同一批次,行1 为最小序号运单含证件后缀<br>4. 成功数=2、失败数=1,统计一致 | 对应TP-U-009;REQ-006(决议#13 序号全文件唯一;序号决定最小序号判定联动 PLT_TMS_FPKG_053) |
|
||||
| PLT_TMS_FPKG_021 | 平台端-运单管理-运单文件包-数据校验 | 验证货源单号或运单号为空的行计入失败清单且原因区分字段 | P0 | 功能测试 | 1. ACC-001 已登录;2. 构造 6 行清单:XLS-107(货源单号空串)、货源单号为纯空格行、XLS-108(运单号空串)、运单号为纯空格行、XLS-109(两者均空)、1 行合法基准行(序号 9+XLS-002) | 1. 上传该清单等待完成<br>2. 逐行核对失败清单原因<br>3. 核对成功行打包情况 | XLS-107/108/109;ERR-022(空串与纯空格) | 1. 空串与纯空格均判为空(trim 后校验)<br>2. 失败原因区分"货源单号为空"与"运单号为空";两者均空时并列或合并提示(以实现文案为准,不误报单一字段原因)<br>3. 合法基准行正常打包<br>4. 任务"已完成·部分失败",成功数=1、失败数=5,统计一致 | 对应TP-U-010;REQ-006 |
|
||||
| PLT_TMS_FPKG_022 | 平台端-运单管理-运单文件包-数据校验 | 验证运单号在系统中不存在的行失败原因准确且不影响其他行 | P0 | 功能测试 | 1. ACC-001 已登录;2. 构造 4 行清单:XLS-110(1/HY202609001/YD20991231001 不存在)、行2 运单号为"YD20260901001 "(尾带空格,系统存在该单,ERR-027)、行3 运单号为 XLS-001 单号的小写变体 yd20260901001、XLS-001 合法行 | 1. 上传该 4 行清单等待完成<br>2. 核对失败清单原因<br>3. 下载 zip 核对成功行<br>4. 记录尾空格行与大小写变体行的判定结果并核对 zip 中其导出行为 | XLS-110;ERR-027(尾空格运单号);XLS-001 小写变体构造行;XLS-001 | 1. XLS-110 行失败且原因"运单号在系统中不存在"(原型文案)<br>2. 一行失败不影响同文件其他有效行打包<br>3. 尾空格行与大小写变体行的存在性校验与实际导出均采用同一匹配口径(trim/大小写敏感与否两处行为一致:匹配则一致成功导出、不匹配则一致按"运单号在系统中不存在"失败),不出现校验通过但导出缺单的不一致<br>4. 任务统计与状态准确 | 对应TP-U-011;REQ-006 |
|
||||
| PLT_TMS_FPKG_023 | 平台端-运单管理-运单文件包-数据校验 | 验证货源单号与运单实际所属货源不一致的行失败且正确配对行成功 | P0 | 功能测试 | 1. ACC-001 已登录;2. 环境运单 YD20260901001 实际所属货源为 HY202609001(数据缺口 #1);3. 构造 2 行清单:XLS-111(1/HY202609009/YD20260901001 错配)、XLS-001(1/HY202609001/YD20260901001 正确配对) | 1. 上传该 2 行清单等待完成<br>2. 核对失败清单原因<br>3. 下载 zip 确认正确配对行打包 | XLS-111(错配);XLS-001(正确配对);决议#6 | 1. 错配行失败且原因"文件中货源单号与该运单实际所属货源不一致"(原型文案)<br>2. 正确配对行正常打包<br>3. 归属判定以系统数据为准,不因清单填写顺序改变<br>4. 成功数=1、失败数=1,任务"已完成·部分失败" | 对应TP-U-012;REQ-006(决议#6) |
|
||||
| PLT_TMS_FPKG_024 | 平台端-运单管理-运单文件包-数据校验 | 验证同一运单号文件内重复时首现行保留且不产生重复运单包 | P0 | 功能测试 | 1. ACC-001 已登录;2. 构造 XLS-112:两行同一运单号 YD20260901001(序号 1、2 不同,货源单号均正确填 HY202609001) | 1. 上传该 2 行清单等待完成<br>2. 核对失败清单与原因<br>3. 下载 zip 检索该运单包出现次数 | XLS-112(序号 1、2 同运单号) | 1. 首现行(序号 1)保留处理并打包,zip 中该运单包仅出现一次<br>2. 重复行(序号 2)进失败清单,失败原因明确为运单号文件内重复类文案(区别于序号重复原因)<br>3. 不产生两个运单包<br>4. 成功数=1、失败数=1,统计一致 | 对应TP-U-013;REQ-006 |
|
||||
| PLT_TMS_FPKG_025 | 平台端-运单管理-运单文件包-数据校验 | 验证缺司机或车辆信息的运单行失败原因标注无法归批 | P0 | 功能测试 | 1. ACC-001 已登录;2. 环境准备缺司机信息运单、缺车辆信息运单各 1 单(XLS-113/114,数据缺口 #5);3. 构造 4 行清单:XLS-113、XLS-114、XLS-001、XLS-003(后两行同属张三批合法行) | 1. 上传该 4 行清单等待完成<br>2. 核对失败清单两行原因<br>3. 下载 zip 核对批次划分与证件挂载 | XLS-113(缺司机);XLS-114(缺车辆);XLS-001/003 | 1. 两行均失败且原因标注"无法归批"类文案(可区分缺司机/缺车辆或统一归批失败文案,以实现为准)<br>2. 剔除后批次按剩余有效行正确划分:XLS-001/003 归张三一批且最小序号运单含证件<br>3. 任务"已完成·部分失败",成功数=2、失败数=2 | 对应TP-U-014;REQ-006(六#5) |
|
||||
| PLT_TMS_FPKG_026 | 平台端-运单管理-运单文件包-数据校验 | 验证单文件多类数据级错误并存时各行独立判定 | P1 | 功能测试 | 1. ACC-001 已登录;2. 构造 6 行清单:1 行合法(XLS-001)+1 行序号重复(XLS-106 重复行)+1 行运单不存在(XLS-110)+1 行货源错配(XLS-111)+1 行无法归批(XLS-113)+1 行单号为空(XLS-107);序号重复行与合法行 XLS-001 共用序号 1(首现行保留成功、重复行计失败,口径同 020),其余 4 个失败行序号取互不相同的合法值(如 2/3/4/5) | 1. 上传该 6 行清单等待完成<br>2. 逐行核对失败清单原因<br>3. 核对成功行打包 | XLS-001/106/110/111/113/107 组合清单 | 1. 5 个失败行各自失败原因准确、互不串行(序号重复、运单不存在、货源不一致、无法归批、单号为空各自对应)<br>2. 合法行正常打包<br>3. 成功数=1+失败数=5=总行数 6<br>4. 任务状态"已完成·部分失败" | 对应TP-U-015;REQ-006/REQ-007(规则组合场景;执行时顺带验证单行多重非法的失败原因展示优先级,XLS-115) |
|
||||
| PLT_TMS_FPKG_027 | 平台端-运单管理-运单文件包-上传校验 | 验证文件级错误与数据级错误共存时文件级优先整体拒绝 | P1 | 功能测试 | 1. ACC-001 已登录;2. 构造清单:表头缺"货源单号"列且数据行含不存在的运单号 YD20991231001 | 1. 上传该清单<br>2. 观察拒绝提示<br>3. 检查任务列表与失败清单 | ERR-004(缺列)+XLS-110(不存在运单号)组合构造文件 | 1. 上传即整体拒绝(文件级优先),提示列名缺失类原因<br>2. 不创建任务,不进入数据级校验与失败清单流程<br>3. 无"已完成·部分失败"类任务记录产生 | 对应TP-U-015;REQ-005/REQ-006(4.2.2 处理原则:文件级错误整体拒绝) |
|
||||
| PLT_TMS_FPKG_028 | 平台端-运单管理-运单文件包-数据校验 | 验证单元格注入类内容按行级失败处理且无注入副作用 | P1 | 安全性测试 | 1. ACC-001 已登录;2. 构造 6 行清单:ERR-030(货源单号 HY202609001' OR '1'='1)、ERR-031(运单号 YD20260901001'; DROP TABLE waybill;--)、ERR-032(序号 1 OR 1=1)、ERR-033(运单号含 script 标签)、1 行含 Emoji 运单号、1 行合法基准(XLS-002) | 1. 上传该清单等待完成<br>2. 核对失败清单中各行的展示与文件内容<br>3. 检查任务列表页面回显<br>4. 检查数据库与任务状态 | ERR-030/031/032/033;Emoji 构造行;XLS-002 | 1. 注入内容行均按数据级原因失败(查无此单/序号非正整数等),SQL 不执行、无数据库异常、无 500<br>2. 失败清单 xlsx 与页面回显对脚本标签转义展示,不执行脚本<br>3. Emoji 行不崩溃不乱码<br>4. 合法行正常打包,数据库表数据完整无被篡改痕迹 | 对应TP-U-016;REQ-006 |
|
||||
| PLT_TMS_FPKG_029 | 平台端-运单管理-运单文件包-数据校验 | 验证超长单号与超长特殊字符源文件名的防御处理 | P1 | 功能测试 | 1. ACC-001 已登录;2. 构造清单 A:运单号为 256 字符以上连续字符串(ERR-035);3. 构造清单 B:合法 3 行数据、源文件名为 300 字符及含 # % & 空格 全角字符 Emoji 的文件(ERR-036/038/039,经接口直传构造) | 1. 上传清单 A 观察行级处理<br>2. 上传清单 B 观察任务创建与列表"源文件名"展示<br>3. 完成后下载失败清单与总包核对命名<br>4. 检查服务端目录无逃逸文件 | ERR-035(超长运单号);ERR-034(XSS 文件名);ERR-036/037/038/039(超长、路径穿越类、特殊字符、Unicode 文件名) | 1. 超长运单号行按"运单号在系统中不存在"失败,不截断误判为存在、系统不崩溃<br>2. 特殊字符/超长文件名任务正常创建处理,列表展示截断省略且有完整名 tooltip(原型 .te 样式);含脚本标签的源文件名(ERR-034)在列表转义展示为纯文本,不触发弹窗执行<br>3. 下载产物(总包/失败清单)命名不受源文件名污染,上传下载目录无路径逃逸文件<br>4. Emoji/生僻字文件名编码正常(UTF-8 兼容) | 对应TP-U-016;REQ-006(ERR-037 路径穿越并入断言 3) |
|
||||
| PLT_TMS_FPKG_030 | 平台端-运单管理-运单文件包-上传校验 | 验证上传弹窗按钮态回显与状态重置的交互细节 | P1 | 易用性测试 | 1. ACC-001 已登录;2. 本地准备 BND-015 典型 3 行清单(12KB 级,内含 XLS-001/002/003) | 1. 打开上传弹窗观察未选文件时"开始上传并创建任务"按钮状态<br>2. 点击选择 BND-015 文件观察 drop 区状态与回显内容<br>3. 分别用取消按钮、右上角关闭、点击遮罩三种方式关闭弹窗后重新打开<br>4. 用拖拽方式将文件拖入 drop 区上传<br>5. 重复打开弹窗检查是否残留上次文件 | BND-015(12KB 3 行清单);XLS-001/002/003 | 1. 未选文件时按钮置灰 disabled<br>2. 选择文件后 drop 区变绿色态并显示"已选择:运单清单_合肥仓0908.xlsx(大小·行数)"类回显,文件名/大小/行数与实际一致<br>3. 三种关闭方式均生效;重开弹窗不残留上次选择文件(状态重置)<br>4. 拖拽与点击两种方式均可正常上传 | 对应TP-U-017;REQ-004(原型交互;防重复点击归 PLT_TMS_FPKG_074 验证) |
|
||||
| PLT_TMS_FPKG_031 | 平台端-运单管理-运单文件包-上传校验 | 验证同一清单文件重复上传生成两个独立任务 | P2 | 功能测试 | 1. ACC-001 已登录;2. 已用文件"运单清单_合肥仓0908.xlsx"(XLS-001/002/003)完成过一次上传生成任务 T1 | 1. 使用同一文件再次上传生成任务 T2<br>2. 对比两任务编号、源文件名、总行数、上传时间<br>3. 等待两任务均完成后分别下载 zip 并比对内容<br>4. 删除任务 T1 后检查任务 T2 | CMB-013(同文件上传 2 次);XLS-001/002/003 | 1. 生成两个任务,任务编号不同、总行数均为 3、上传时间分别记录<br>2. 两任务各自完成且 zip 内容一致、互不覆盖(决议口径:允许重复、不合并去重)<br>3. 删除 T1 不影响 T2 的列表展示与下载<br>4. 数据库存在两条独立任务记录 | 对应TP-U-018;REQ-023(六#7 确认决议口径) |
|
||||
| PLT_TMS_FPKG_032 | 平台端-运单管理-运单文件包-任务列表 | 验证任务状态待处理到处理中到已完成的正向流转 | P0 | 功能测试 | 1. ACC-001 已登录;2. 环境运单齐备(XLS-001/002/003);3. 已知当前并发队列空闲(若有并发占用,配合 CNC-003 制造"待处理"观察窗口) | 1. 上传 XLS-001/002/003 三行清单<br>2. 上传后立即刷新列表观察状态<br>3. 轮询观察状态变化直至终态<br>4. 核对各状态下完成时间字段与数据库状态值 | XLS-001/002/003;STT-001/002/003 | 1. 状态按 待处理→处理中→已完成 依次流转,单向推进不回跳不跳态<br>2. 处理中期间列表可见进度变化<br>3. 已完成后完成时间字段有值;待处理/处理中状态下完成时间为"—"<br>4. 数据库任务状态字段值与页面标签一一对应(状态字典正确) | 对应TP-T-001;REQ-008 |
|
||||
| PLT_TMS_FPKG_033 | 平台端-运单管理-运单文件包-任务列表 | 验证五种任务状态标签文案与颜色的映射不混用 | P0 | 功能测试 | 1. 准备 5 种状态任务各 1:待处理(并发占满排队 STT-001)、处理中(STT-002)、已完成(STT-003)、已完成·部分失败(5 行 3 成 2 败 STT-004)、失败(OBS 断开构造 STT-005);2. ACC-001 已登录 | 1. 在任务列表逐一查看 5 种状态标签<br>2. 截图比对各标签颜色与文案<br>3. 与原型 anhuibaba_file_package.html 标签样式比对<br>4. 刷新页面与翻页后复核渲染一致性 | STT-001~005 各 1 任务;漏测清单 §6 颜色映射 | 1. 五种标签文案逐字为 待处理/处理中/已完成/已完成·部分失败/失败<br>2. 颜色映射与原型一致(待处理灰、处理中蓝、已完成绿、失败红、已完成·部分失败橙,具体色值以原型为准),五色不混用<br>3. 同一状态在列表各处渲染一致,无状态与颜色错配 | 对应TP-T-001;REQ-008(漏测清单 §6 标签颜色映射) |
|
||||
| PLT_TMS_FPKG_034 | 平台端-运单管理-运单文件包-任务列表 | 验证部分行失败的任务记已完成部分失败且仍可下载 | P0 | 功能测试 | 1. ACC-001 已登录;2. 构造 5 行清单:3 行合法(XLS-001/002/003)+2 行非法(序号 0 行按 XLS-101、序号 99 行运单号 YD20991231001 按 XLS-110) | 1. 上传该 5 行清单等待完成<br>2. 查看状态标签与成功/失败数<br>3. 查看该行操作列按钮<br>4. 下载 zip 核对内容<br>5. 下载失败清单核对行数 | XLS-001/002/003+XLS-101+XLS-110;STT-004 | 1. 状态标签为橙色"已完成·部分失败"(非"失败")<br>2. 成功数=3、失败数=2<br>3. 操作列同时显示"下载文件包"与"失败清单"两个按钮<br>4. zip 内仅含 3 个成功运单的资料<br>5. 失败清单含 2 行且原因准确 | 对应TP-T-002;REQ-007/REQ-008(决议#7 部分失败仍可下载) |
|
||||
| PLT_TMS_FPKG_035 | 平台端-运单管理-运单文件包-任务列表 | 验证失败任务无下载按钮且删除按钮仅失败状态可见 | P1 | 功能测试 | 1. 准备失败任务 1(OBS 断开构造 STT-005)、已完成任务 1(STT-003)、处理中任务 1(STT-002);2. ACC-001 已登录 | 1. 查看失败任务行的状态、总行数/成功/失败数、完成时间、操作按钮<br>2. 查看已完成任务行操作按钮<br>3. 查看处理中任务行操作按钮<br>4. 比对三类状态的按钮映射 | STT-005/STT-003/STT-002 任务 | 1. 失败任务无"下载文件包"按钮,总行数有值、成功数 0、失败数 0、完成时间"—"<br>2. 仅失败任务行显示"删除"按钮,已完成/处理中任务无删除入口<br>3. 失败任务无"失败清单"按钮(系统级失败不产生数据级失败清单) | 对应TP-T-003;REQ-008/REQ-024(漏测清单 §4 状态与按钮映射) |
|
||||
| PLT_TMS_FPKG_036 | 平台端-运单管理-运单文件包-任务列表 | 验证删除失败任务有确认交互且删除后重新上传可成功 | P1 | 功能测试 | 1. 存在失败任务 T1(源清单为 XLS-001/002/003 三行文件);2. ACC-001 已登录 | 1. 点击 T1 行"删除"按钮<br>2. 在确认弹窗先点取消<br>3. 再次点击并确认删除<br>4. 检查列表与数据库记录<br>5. 重新上传同一清单文件等待新任务完成 | STT-005→STT-007;XLS-001/002/003 清单文件 | 1. 删除有二次确认交互,取消后任务保留<br>2. 确认后列表移除该行,数据库任务记录删除或标记已删除(STT-007)<br>3. 重新上传同清单创建新任务并正常完成(成功数=3)<br>4. 新任务编号与旧任务不同,互不影响 | 对应TP-T-003;REQ-024(六#10 删除后重新上传) |
|
||||
| PLT_TMS_FPKG_037 | 平台端-运单管理-运单文件包-任务列表 | 验证任务列表十项字段完整且默认按上传时间倒序 | P1 | 功能测试 | 1. ACC-001 已登录;2. 列表中已有 3 条以上不同时间上传、不同状态的任务 | 1. 核对列表表头字段与需求 4.3.2 清单<br>2. 逐行核对各字段取值(任务编号/源文件名/上传人/上传时间/任务状态/总行数/成功/失败/完成时间/操作)<br>3. 核对默认排序<br>4. 核对数值与时间格式 | 需求 4.3.2 十字段;IDC-012;IDC-001 | 1. 表头含任务编号/源文件名/上传人/上传时间/任务状态/总行数/成功/失败/完成时间/操作十项无缺漏<br>2. 默认按上传时间倒序(最新在上)<br>3. 空值展示"—"而非 0 或 null;时间为 YYYY-MM-DD HH:mm:ss 格式<br>4. 各字段值与数据库任务表一致 | 对应TP-T-004;REQ-009 |
|
||||
| PLT_TMS_FPKG_038 | 平台端-运单管理-运单文件包-任务列表 | 验证任务列表分页翻页数据不重复不丢失且总数正确 | P1 | 功能测试 | 1. ACC-001 已登录;2. 通过 XLS-007 等最小清单累计创建超过 1 页容量的任务(15 条以上) | 1. 记录第 1 页任务编号集合与分页总条数<br>2. 翻至第 2 页记录任务编号集合<br>3. 对比两页集合<br>4. 切换每页条数(20→50)复核<br>5. 若页面提供状态筛选/搜索则验证筛选与重置 | XLS-007 复用上传形成的任务集 | 1. 两页任务编号无重复无丢失<br>2. 分页总条数与数据库任务总数一致<br>3. 切换每页条数后分页重算正确、数据不重不漏<br>4. 若提供筛选则筛选结果准确且重置恢复默认;若未提供筛选,确认设计取舍后关闭本断言(见文末实现口径确认项) | 对应TP-T-004;REQ-009(漏测清单 §4 后台 CRUD 检查项) |
|
||||
| PLT_TMS_FPKG_039 | 平台端-运单管理-运单文件包-任务列表 | 验证上传后异步处理不阻塞页面且处理中任务展示进度 | P1 | 功能测试 | 1. ACC-001 已登录;2. 准备 1000 行规模合法清单(CNC-001/CNC-006,处理时长足以观察) | 1. 上传 1000 行清单<br>2. 上传提交后立即切换其他菜单操作验证页面不阻塞<br>3. 返回任务列表观察处理中行的进度展示<br>4. 间隔 1 分钟记录进度数值变化直至完成 | BND-007(1000 行清单,按 CNC-006 的 500 批×2 运单混合结构构造);STT-002(原型 186/200 形式) | 1. 上传提交后页面立即可操作,无整页阻塞等待<br>2. 处理中行显示进度条与"已处理/总数"形式进度(如 186/1000)<br>3. 进度随时间持续推进,最终与成功/失败数一致<br>4. 数据库统计字段与进度展示同源一致 | 对应TP-T-005;REQ-019 |
|
||||
| PLT_TMS_FPKG_040 | 平台端-运单管理-运单文件包-任务列表 | 验证关闭页面或退出登录后任务继续在后台推进 | P1 | 功能测试 | 1. ACC-001 已登录;2. 准备 500 行以上合法清单 | 1. 上传 500 行清单后立即退出登录(或关闭浏览器)<br>2. 等待 5 分钟<br>3. 重新登录进入任务列表查看该任务进度与状态<br>4. 等待其终态并核对统计 | XLS-007 扩展 500 行清单;STT-002 | 1. 退出期间任务仍在后台处理(数据库状态与统计持续推进)<br>2. 重新进入后进度继续显示而非归零重处理<br>3. 任务最终正常完成,无因会话中断导致的失败或重复任务<br>4. 成功/失败数与清单实际数据一致 | 对应TP-T-005;REQ-019 |
|
||||
| PLT_TMS_FPKG_041 | 平台端-运单管理-运单文件包-任务列表 | 验证失败清单下载内容四列与实际失败行一一对应 | P1 | 功能测试 | 1. 已存在"已完成·部分失败"任务(参照 PLT_TMS_FPKG_026 的构造方式,含 XLS-101/110/111/113 四类失败行 + 1 行合法行);2. ACC-001 已登录 | 1. 点击该行"失败清单"下载 xlsx<br>2. 核对文件名(IDC-010:失败清单_【任务编号】.xlsx)<br>3. 逐行核对四列内容<br>4. 与上传清单原值及任务失败数比对 | IDC-010;XLS-101/110/111/113 构造任务 | 1. 下载得到 xlsx,文件名=失败清单_【任务编号】.xlsx<br>2. 含 序号/货源单号/运单号/失败原因 四列<br>3. 行数=任务失败数;每行前三列与上传清单原值一致,失败原因与 4.2.2 各规则文案一致<br>4. 数据库失败明细记录与 xlsx 内容一致 | 对应TP-T-006;REQ-018 |
|
||||
| PLT_TMS_FPKG_042 | 平台端-运单管理-运单文件包-任务列表 | 验证失败清单按钮仅在存在失败行时显示 | P1 | 功能测试 | 1. 准备全部成功任务 1(XLS-001/002/003,STT-003)、部分失败任务 1(STT-004);2. 一次文件级被拒上传记录(未创建任务);3. ACC-001 已登录 | 1. 查看全部成功任务操作列<br>2. 查看部分失败任务操作列<br>3. 确认文件级被拒场景在列表中无任务行<br>4. 比对按钮与失败状态的映射 | STT-003 与 STT-004 任务;ERR-004 被拒上传 | 1. 全部成功任务不显示"失败清单"按钮(仅"下载文件包")<br>2. 部分失败任务两个按钮齐备<br>3. 文件级被拒上传无任务行亦无失败清单入口(未创建任务) | 对应TP-T-006;REQ-018(漏测清单 §4 按钮映射) |
|
||||
| PLT_TMS_FPKG_043 | 平台端-运单管理-运单文件包-任务列表 | 验证打包过程中服务异常后任务置失败且无半成品可下载 | P1 | 功能测试 | 1. ACC-001 已登录;2. 具备服务重启/打包进程终止的运维配合手段;3. 已上传 1000 行清单使处理窗口足够 | 1. 上传 1000 行清单进入"处理中"<br>2. 处理期间重启服务或终止打包进程<br>3. 服务恢复后观察该任务终态<br>4. 检查下载按钮并直调下载接口<br>5. 删除该任务后重新上传 | XLS-006(1000 行);STT-005 | 1. 异常后任务最终置"失败",不永久停留"处理中"(无僵尸任务)<br>2. 下载按钮不显示,直调下载接口返回不可下载错误,无半成品 zip 提供下载<br>3. 半成品临时文件被清理,不占用 7 天保留期配额(存储核查)<br>4. 删除重传后新任务正常完成 | 对应TP-T-007;REQ-024(六#10) |
|
||||
| PLT_TMS_FPKG_044 | 平台端-运单管理-运单文件包-任务列表 | 验证查看结构弹窗的任务信息与文件包结构树预览 | P3 | 功能测试 | 1. 已完成任务 1(多批次,XLS-001/002/003)与处理中任务 1;2. ACC-001 已登录 | 1. 点击已完成任务行"查看结构"<br>2. 核对弹窗内任务信息(源文件名/上传人/时间/处理结果)与批次划分说明<br>3. 展开结构树逐层核对命名<br>4. 与实际下载 zip 的目录结构逐层比对<br>5. 查看处理中任务是否提供结构预览<br>6. 测试关闭按钮与遮罩关闭 | STT-003/STT-002 任务;IDC-006/007/008 命名 | 1. 弹窗展示任务信息与批次划分说明且与实际归批一致<br>2. 结构树命名与实际 zip 逐层一致(总包/批次包/运单包/证件后缀)<br>3. 处理中任务不提供结构预览下载(原型仅"结构预览"按钮无下载)<br>4. 关闭按钮与遮罩关闭均可用 | 对应TP-T-008;REQ-011;⚠️ 待确认 Q1:"查看结构/文件包结构预览"仅见于原型、需求正文未定义——影响本用例保留与否与断言范围;建议需求方确认本期是否实现,确认裁剪则删除本用例,确认实现则按弹窗实际字段回填断言 |
|
||||
| PLT_TMS_FPKG_045 | 平台端-运单管理-运单文件包-打包归批 | 验证按系统内三要素归批并复现需求五章示例 | P0 | 功能测试 | 1. ACC-001 已登录;2. 环境运单与需求五章示例一致:YD20260901001/YD20260901003 同属张三/340102199001011234/皖A12345,YD20260901002 属李四/340102199001015678/皖B67890,另有张三/皖A12345 挂货源 HY202609002 的有效运单 1 单(CMB-007,数据缺口 #1/#8) | 1. 上传 XLS-001/002/003 三行清单并追加 CMB-007 运单行(序号 1/2/3/4,货源单号 HY202609001/HY202609002/HY202609001/HY202609002)<br>2. 等待任务完成并下载 zip<br>3. 解压核对批次包数量与运单包归属<br>4. 确认清单不含司机列、归批依据为系统内数据 | XLS-001/002/003;CMB-007(跨货源同批次行);CMB-001/002;IDC-004/005 | 1. zip 内恰有 2 个批次包:张三-340102199001011234-皖A12345 与 李四-340102199001015678-皖B67890<br>2. 批次①含运单包 1-YD20260901001-HY202609001-含司机及车辆证件、3-YD20260901003-HY202609001 与 4-【CMB-007 运单号】-HY202609002(跨货源运单仍归同批,归批不看货源单号)<br>3. 批次②含 2-YD20260901002-HY202609002-含司机及车辆证件(单运单批次)<br>4. 批次包数量=三要素去重数 2,与需求五章示例逐项一致 | 对应TP-P-001;REQ-010(含 CMB-007 跨货源不拆批负向对照,与 046 拆批两侧互补) |
|
||||
| PLT_TMS_FPKG_046 | 平台端-运单管理-运单文件包-打包归批 | 验证同一司机换车牌或同一车牌换司机均拆分批次 | P0 | 功能测试 | 1. 环境准备:张三(同证)分别挂皖A12345 与皖C88888 的运单各 1 单(CMB-003);皖A12345 分别由张三与王五承运的运单各 1 单(CMB-004)(数据缺口 #8);2. ACC-001 已登录 | 1. 上传含 CMB-003 两组运单的清单等待完成并下载 zip<br>2. 核对批次包数量与归属<br>3. 上传含 CMB-004 两组运单的清单重复验证<br>4. 核对各批次最小序号证件挂载 | CMB-003(同司机换车);CMB-004(同车换司机) | 1. 场景一 zip 含 2 个批次包(张三+皖A12345、张三+皖C88888),各批次独立判定最小序号并挂证件<br>2. 场景二 zip 含 2 个批次包(张三+皖A12345、王五+皖A12345)<br>3. 任一要素不同即拆批,各批次包内运单包归属正确<br>4. 批次包数量=三要素去重批次数 | 对应TP-P-002;REQ-010 |
|
||||
| PLT_TMS_FPKG_047 | 平台端-运单管理-运单文件包-打包归批 | 验证同名同车牌但身份证号不同拆分为两个批次 | P0 | 功能测试 | 1. 环境准备两个司机档案:姓名均为张三、车辆均绑定皖A12345、身份证号分别为 340102199001011234 与 330102199201012345(CMB-005,数据缺口 #7),各有运单 1 单;2. ACC-001 已登录 | 1. 上传含两运单的清单(序号 1、2)<br>2. 任务完成后下载 zip<br>3. 核对批次包数量与两包身份证号差异<br>4. 核对各批次运单包证件子目录 | CMB-005;IDC-004 | 1. zip 含 2 个批次包,批次包名仅身份证号段不同(三要素缺一不可)<br>2. 每个批次包为单运单批次且运单包均含证件后缀与四个子目录<br>3. 不因姓名与车牌相同而合并为一批 | 对应TP-P-002;REQ-010 |
|
||||
| PLT_TMS_FPKG_048 | 平台端-运单管理-运单文件包-打包归批 | 验证三层目录命名规则与需求示例逐字一致 | P0 | 功能测试 | 1. 已完成任务(XLS-001/002/003)且已下载 zip;2. 解压工具可用 | 1. 核对总包文件名<br>2. 核对批次包目录名(含身份证号完整 18 位)<br>3. 核对最小序号运单包名与证件后缀<br>4. 核对非最小序号运单包名<br>5. 检查 zip 顶层层级与连接符 | IDC-006/007/008;XLS-001/002/003 任务;决议#3 | 1. 总包名=运单资料_【任务编号】.zip<br>2. 批次包名=张三-340102199001011234-皖A12345(连接符"-",身份证号完整 18 位明文非脱敏)<br>3. 最小序号运单包=1-YD20260901001-HY202609001-含司机及车辆证件;非最小序号运单包=3-YD20260901003-HY202609001 无证件后缀<br>4. zip 顶层即批次包目录,无多余嵌套层级 | 对应TP-P-003;REQ-011(决议#3,命名与 4.4.2 逐字一致) |
|
||||
| PLT_TMS_FPKG_049 | 平台端-运单管理-运单文件包-打包归批 | 验证最小序号运单包四子目录齐全且其余运单包仅含合同回单 | P0 | 功能测试 | 1. 已完成任务(XLS-001/002/003);2. 运单均已结算打款含支付回单与承运合同,张三/李四档案证件照片齐全(数据缺口 #1);3. ACC-001 已登录 | 1. 解压 zip 进入批次①最小序号运单包 1-YD20260901001-…-含司机及车辆证件<br>2. 核对四个子目录及文件<br>3. 进入 3-YD20260901003-…运单包核对子目录<br>4. 进入批次②单运单批次运单包 2-…核对<br>5. 抽检各子目录文件可打开 | IDC-009(合同/电子回单/司机证件/车辆证件);CMB-001/002 | 1. 最小序号运单包含 合同/电子回单/司机证件/车辆证件 四个子目录且均有文件<br>2. 3-…运单包仅含 合同/电子回单,确无司机证件/车辆证件子目录(既不生成空目录,目录内也不得含任何证件文件)<br>3. 单运单批次 2-…运单包含四子目录且带证件后缀<br>4. 抽检合同/回单/证件文件均可打开非损坏 | 对应TP-P-004;REQ-012(验收要点 2/3) |
|
||||
| PLT_TMS_FPKG_050 | 平台端-运单管理-运单文件包-打包归批 | 验证合同子目录仅导出承运合同不含委托与框架合同 | P1 | 功能测试 | 1. 环境准备:运单 A 含承运合同、运单 B 仅含委托合同、运单 C 含承运+框架合同(CMB-015,数据缺口 #2/#3);2. ACC-001 已登录 | 1. 上传含运单 A/B/C 的清单等待完成<br>2. 下载 zip 分别核对三个运单包的合同子目录<br>3. 与各运单详情页-合同附件列表逐份比对<br>4. 核对失败清单 | CMB-015;STT-014/015;决议#5 | 1. 运单 A 合同子目录含全部承运合同文件且可打开<br>2. 运单 B 不导出委托合同(合同子目录不生成或不含委托合同文件),原因记入失败清单<br>3. 运单 C 仅导出承运合同,框架合同不入包<br>4. 导出合同集合与运单详情-合同附件当前列表一致 | 对应TP-P-005;REQ-013(决议#5 合同口径) |
|
||||
| PLT_TMS_FPKG_051 | 平台端-运单管理-运单文件包-打包归批 | 验证多笔支付运单导出全部对应银行电子回单 | P1 | 功能测试 | 1. 环境准备含 3 笔支付记录的运单(数据缺口 #6);2. ACC-001 已登录;3. 承运结算-电子回单可查询该运单支付记录 | 1. 在承运结算-电子回单查询该运单支付与回单记录数<br>2. 上传含该运单的清单等待完成并下载 zip<br>3. 核对电子回单子目录文件数与内容<br>4. 抽查回单文件可打开 | BND-062/063;CMB-014(2 笔支付同类) | 1. 电子回单子目录含 3 份回单文件,与该运单 3 笔支付记录一一对应<br>2. 回单文件可打开且与银行回单原件一致<br>3. 同名回单自动追加 (1)、(2) 不互相覆盖 | 对应TP-P-006;REQ-013(术语表:电子回单=运单全部支付记录对应银行电子回单) |
|
||||
| PLT_TMS_FPKG_052 | 平台端-运单管理-运单文件包-打包归批 | 验证司机与车辆证件按最小序号运单档案导出且全批仅一份 | P1 | 功能测试 | 1. 张三司机档案含身份证人像面/国徽面、驾驶证、从业资格证照片;皖A12345 车辆档案含行驶证、道路运输证照片(数据缺口 #1/#13);2. 已完成任务 zip(XLS-001/003 同批) | 1. 核对最小序号运单包司机证件子目录文件种类与档案一致<br>2. 核对车辆证件子目录文件种类<br>3. 全 zip 检索确认证件文件仅在最小序号运单包出现一次<br>4. 打开证件照片验证非损坏 | IDC-009;需求 4.4.3 档案口径 | 1. 司机证件含档案全部证件照片(身份证正反面、驾驶证、从业资格证等)<br>2. 车辆证件含行驶证、道路运输证等档案证件照片<br>3. 同批次其余运单包(3-…)无任何证件文件(不重复导出)<br>4. 照片文件可打开非损坏 | 对应TP-P-006;REQ-013(4.4.3 以最小序号运单挂载档案为准) |
|
||||
| PLT_TMS_FPKG_053 | 平台端-运单管理-运单文件包-打包归批 | 验证最小序号运单被剔除后证件改挂重算的最小序号运单 | P0 | 功能测试 | 1. 张三批次构造 3 行:序号 1 行运单号填不存在的 YD20991231001(校验失败)、序号 3 行 YD20260901003、序号 5 行 YD20260901004(均有效,CMB-006+XLS-004);2. ACC-001 已登录 | 1. 上传该 3 行清单等待完成<br>2. 核对失败清单含序号 1 行<br>3. 下载 zip 核对批次①运单包命名与子目录<br>4. 全 zip 检索确认无序号 1 运单包 | CMB-006(序号 1、3、5);决议#8;XLS-003/004 | 1. 序号 1 行进失败清单,原因"运单号在系统中不存在"<br>2. 证件改挂序号 3:运单包名=3-YD20260901003-HY202609001-含司机及车辆证件,含四个子目录<br>3. 序号 5 运单包仅含合同+电子回单<br>4. 全 zip 无 1-… 运单包;成功数=2、失败数=1 | 对应TP-P-007;REQ-015(决议#8、六#6;全需求最易错点,回归必测) |
|
||||
| PLT_TMS_FPKG_054 | 平台端-运单管理-运单文件包-打包归批 | 验证单运单批次唯一运单被剔除后整批不生成 | P0 | 功能测试 | 1. 构造 3 行清单:批次①为 XLS-001/003(张三批正常 2 行)、批次②唯一行填不存在的运单号(2/HY202609002/YD20991231001);2. ACC-001 已登录 | 1. 上传该清单等待完成<br>2. 下载 zip<br>3. 检索李四批次包是否存在<br>4. 核对失败清单与统计 | 构造清单(XLS-001/003+不存在单号行);CMB-006 变体 | 1. zip 内无 李四-340102199001015678-皖B67890 批次包<br>2. 失败清单含该行且原因"运单号在系统中不存在"<br>3. 张三批次包正常生成且证件挂载不受影响<br>4. 成功数=2、失败数=1,与 zip 内容一致 | 对应TP-P-007;REQ-015(决议#8 单运单批次剔除边界) |
|
||||
| PLT_TMS_FPKG_055 | 平台端-运单管理-运单文件包-打包归批 | 验证运单无支付记录时电子回单缺失不阻断任务 | P0 | 功能测试 | 1. 环境准备无支付记录的已关闭运单 1 单(STT-012,司机取消终止流转,数据缺口 #4)与正常运单 XLS-001;2. ACC-001 已登录 | 1. 上传含两运单的清单等待完成<br>2. 查看任务状态<br>3. 下载 zip 核对无回单运单包的子目录<br>4. 核对失败清单原因 | STT-012(已关闭无支付);BND-061;六#4 | 1. 任务状态"已完成·部分失败"而非"失败"<br>2. 无回单运单包无"电子回单"子目录,其余子目录正常生成<br>3. 失败清单记"无电子回单:运单无支付记录"类原因(原型文案)<br>4. 正常运单不受影响完整打包 | 对应TP-P-008;REQ-015(六#4;按 4.4.4 条款一"不阻断仅记清单"口径设计,与条款二衔接见文末实现口径确认项数据缺口 #17) |
|
||||
| PLT_TMS_FPKG_056 | 平台端-运单管理-运单文件包-打包归批 | 验证运单无合同附件时合同子目录不生成且不阻断 | P0 | 功能测试 | 1. 环境准备运单详情-合同附件为空的运单 1 单(CMB-016);2. 正常运单 XLS-001 可用;3. ACC-001 已登录 | 1. 上传含该运单与 XLS-001 的清单等待完成<br>2. 下载 zip 核对该运单包子目录<br>3. 核对失败清单与任务状态<br>4. 确认正常运单打包不受影响 | CMB-016;STT-014 | 1. 该运单包无"合同"子目录,其余子目录按规则正常<br>2. 失败清单记无合同类原因<br>3. 任务"已完成·部分失败",成功数含两运单中有效者<br>4. XLS-001 正常打包不阻断 | 对应TP-P-008;REQ-015(4.4.4 文件缺失不阻断) |
|
||||
| PLT_TMS_FPKG_057 | 平台端-运单管理-运单文件包-打包归批 | 验证单文件 OBS 拉取前两次失败第三次成功正常入包 | P1 | 功能测试 | 1. 运维配合构造某运单合同文件 OBS 前 2 次访问失败、第 3 次成功(篡改 URL 或 mock,数据缺口 #11);2. ACC-001 已登录 | 1. 上传含该运单的清单<br>2. 观察任务处理与服务端重试日志<br>3. 任务完成后下载 zip<br>4. 核对该文件数量与内容 | BND-041/042(第 1、2 次失败第 3 次成功);数据缺口 #11 | 1. 系统自动重试,第 3 次拉取成功<br>2. 文件正常入包且 zip 内仅一份(无重试导致重复落盘)<br>3. 该运单不进失败清单<br>4. 任务正常完成不受影响 | 对应TP-P-009;REQ-015(项目画像 §6.1 华为云 OBS 为关键依赖) |
|
||||
| PLT_TMS_FPKG_058 | 平台端-运单管理-运单文件包-打包归批 | 验证单文件重试 3 次全失败记入失败清单且不阻断任务 | P1 | 回归测试 | 1. 运维配合构造某运单全部文件 OBS 拉取持续失败(数据缺口 #11);2. 同清单另有正常运单;3. ACC-001 已登录 | 1. 上传清单观察服务端重试日志(恰 3 次后停止)<br>2. 任务完成后核对状态与失败清单<br>3. 下载 zip 检查该文件与临时残留<br>4. 核对其余运单完整打包 | BND-043(3 次全失败第 4 次不重试) | 1. 重试恰 3 次后停止,不无限重试<br>2. 该文件记入失败清单(原因含文件拉取失败类文案)<br>3. 任务继续处理其余文件并正常完成,不整体失败<br>4. zip 内无重复文件与半成品残留(重试幂等) | 对应TP-P-009;REQ-015;[AI修正: 历史缺陷防御](BUG-202607-02 重试幂等同类防御) |
|
||||
| PLT_TMS_FPKG_059 | 平台端-运单管理-运单文件包-打包归批 | 验证运单包内文件保留原名且同目录重名自动追加序号 | P1 | 功能测试 | 1. 环境准备:同一运单上传 2 份同名合同附件;司机档案同时存在 身份证.jpg 与 身份证(1).jpg(BND-073,数据缺口 #13);2. ACC-001 已登录 | 1. 上传含该运单清单等待完成并下载 zip<br>2. 核对合同子目录两份同名文件命名<br>3. 核对司机证件子目录文件命名<br>4. 分别打开各文件核对内容对应各自原件<br>5. 检查跨运单包同名文件 | BND-071/072/073;CMB-014 | 1. 同目录第 2 个同名文件命名为 原名(1).后缀、第 3 个为 原名(2).后缀<br>2. 档案已有 身份证(1).jpg 时新导出同名文件命名不冲突(基于实际文件集合去重)<br>3. 各文件内容与各自原件对应且可打开<br>4. 跨运单包同名文件互不影响;原文件名(含中文/日期)未被篡改 | 对应TP-P-010;REQ-014 |
|
||||
| PLT_TMS_FPKG_060 | 平台端-运单管理-运单文件包-打包归批 | 验证司机姓名含非法字符或超长时批次包命名不失败不乱码 | P1 | 功能测试 | 1. 环境准备司机档案:姓名含间隔号(阿依古丽·买买提)、姓名含 Windows 非法字符(正斜杠、反斜杠、冒号、星号、问号、英文双引号、尖括号、竖线,后台构造)、超长姓名档案(ERR-040,数据缺口 #5/#7 类构造);2. ACC-001 已登录 | 1. 上传含上述档案运单的清单等待完成<br>2. 下载 zip 到 Windows 解压<br>3. 核对批次包目录名的字符处理规则<br>4. 核对总包完整路径长度 | ERR-040(特殊字符/Emoji/超长姓名档案) | 1. 打包不失败、任务正常完成<br>2. 非法字符被统一替换或转义且规则可解释(具体策略以开发实现为准,见文末实现口径确认项)<br>3. Windows 解压无"路径过长/非法字符"错误、无乱码<br>4. 超长组合名不导致打包中断(截断策略确认后固化断言) | 对应TP-P-011;REQ-011(联动 PLT_TMS_FPKG_081 兼容性) |
|
||||
| PLT_TMS_FPKG_061 | 平台端-运单管理-运单文件包-打包归批 | 验证 2000 行规模打包后 zip 包数量与任务统计严格一致 | P1 | 回归测试 | 1. XLS-006(2000 行混合多批次,其中混入 20 行非法行:运单号不存在类);2. ACC-001 已登录 | 1. 上传 2000 行清单等待完成<br>2. 记录总行数/成功数/失败数<br>3. 下载 zip 全量清点运单包数量与批次包数量<br>4. 与成功数、三要素去重批次数比对 | XLS-006;CMB-012/017 | 1. zip 内运单包数量=成功数(如成功 1980 则恰 1980 个运单包)<br>2. 批次包数量=三要素去重批次数<br>3. 成功数+失败数=总行数 2000<br>4. 全量清点无缺包无多包,列表统计与包内容不出现"两张皮" | 对应TP-P-012;REQ-004/REQ-012;[AI修正: 历史缺陷防御](BUG-202607-03 跨模块数据不一致) |
|
||||
| PLT_TMS_FPKG_062 | 平台端-运单管理-运单文件包-打包归批 | 验证打包读取合同与回单来源于正确数据源而非缓存 | P1 | 回归测试 | 1. 环境运单 YD20260901001 含 2 份承运合同附件与 1 笔支付回单;2. 可查询支付流水表与合同附件表;3. ACC-001 已登录 | 1. 上传含该运单清单等待完成<br>2. 下载 zip 比对合同子目录文件与运单详情-合同附件列表<br>3. 比对电子回单文件与支付流水对应回单<br>4. 抽查服务端取数日志确认查询来源表 | STT-014;BND-062 | 1. zip 合同文件集合=运单详情-合同附件当前列表(非历史缓存)<br>2. 回单文件=支付流水表当前记录对应回单<br>3. 文件内容与原件一致可打开<br>4. 不出现旧版本文件或已删除附件残留 | 对应TP-P-013;REQ-013/REQ-015;[AI修正: 历史缺陷防御](BUG-202607-03 数据溯源) |
|
||||
| PLT_TMS_FPKG_063 | 平台端-运单管理-运单文件包-打包归批 | 验证打包期间源数据变更时包内数据口径全任务一致 | P1 | 回归测试 | 1. 准备 500 行以上清单使打包窗口足够长;2. 运维/业务可对该批运单追加支付(生成新回单)与更换司机证件照;3. ACC-001 已登录 | 1. 上传大清单进入"处理中"<br>2. 打包期间给清单内某运单新增 1 笔支付(产生新回单)并更换另一运单司机档案证件照<br>3. 任务完成后下载 zip<br>4. 核对该运单回单份数与证件照版本的全任务一致性 | XLS-007 扩展 500 行;STT-011 | 1. 该运单回单份数按确认口径处理且全任务一致(快照口径不含新增回单、实时口径包含新增回单,二者取一,不出现同任务内新旧混杂)<br>2. 证件照片版本同样全任务一致<br>3. 任务正常完成不因源数据变更失败 | 对应TP-P-013;REQ-013/REQ-015;[AI修正: 历史缺陷防御](BUG-202607-03);⚠️ 待确认 Q4:打包期间源数据变更(新回单/换证件照/运单关闭)按任务开始时刻快照还是实时拉取——影响本用例断言 1 取值与 TP-P-013 回归口径;建议需求方确认后回填断言 |
|
||||
| PLT_TMS_FPKG_064 | 平台端-运单管理-运单文件包-打包归批 | 验证 zip 不加密且身份证号明文下补偿控制同时生效 | P2 | 安全性测试 | 1. 已完成任务 zip(XLS-001/002/003);2. ACC-001 已登录 | 1. 下载 zip 直接解压验证无密码<br>2. 核对批次包目录名身份证号为完整 18 位明文<br>3. 打开证件照片验证可读<br>4. 核对该次下载的审计日志已记录与菜单权限控制生效 | IDC-004(340102199001011234);决议#3/#12 | 1. zip 无密码可直接解压(决议#12 落地)<br>2. 批次包名身份证号完整非脱敏(决议#3 落地)<br>3. 证件照片可打开<br>4. 权限+审计补偿链同时生效:无权限账号不可达下载接口(联动 PLT_TMS_FPKG_006)、每次下载有审计日志(联动 PLT_TMS_FPKG_067),不存在"不加密又无审计"中间态 | 对应TP-P-014;REQ-026(RISK-COMPLIANCE 暴露面确认) |
|
||||
| PLT_TMS_FPKG_065 | 平台端-运单管理-运单文件包-下载审计 | 验证任务完成后下载总包 zip 的命名与完整性 | P0 | 功能测试 | 1. 已完成任务 1(全部成功,STT-003)与"已完成·部分失败"任务 1(STT-004);2. ACC-001 已登录 | 1. 在已完成任务行点击"下载文件包"<br>2. 核对下载文件名<br>3. 解压验证完整性<br>4. 对部分失败任务重复下载核对仅含成功运单<br>5. 下载前后对比任务状态与统计数 | IDC-006;STT-003/STT-004 | 1. 下载文件名=运单资料_【任务编号】.zip<br>2. zip 完整可解压无损坏,含全部批次文件包<br>3. 部分失败任务 zip 仅含成功运单资料<br>4. 下载不改变任务状态与成功/失败统计(数据库字段前后一致) | 对应TP-D-001;REQ-016 |
|
||||
| PLT_TMS_FPKG_066 | 平台端-运单管理-运单文件包-下载审计 | 验证同一任务重复下载幂等不重复生成文件包 | P0 | 功能测试 | 1. 已完成任务 1(STT-003);2. 已记录首次下载 zip 的哈希值与文件包存储信息;3. ACC-001 与 ACC-006 两账号可用 | 1. ACC-001 连续下载 3 次并分别计算哈希<br>2. 用 ACC-006 再下载同一任务<br>3. 下载进行中立即再次点击下载<br>4. 核对服务端存储与任务完成时间 | CNC-005;IDC-006;ACC-001/ACC-006 | 1. 3 次 zip 哈希一致、内容完整<br>2. 两账号下载均成功且互不覆盖<br>3. 下载中再次点击不产生第二个半成品文件(获得完整包或排队提示)<br>4. 服务端完成时间与文件包存储不因重复下载变化(未重新打包) | 对应TP-D-002;REQ-016(七章幂等行) |
|
||||
| PLT_TMS_FPKG_067 | 平台端-运单管理-运单文件包-下载审计 | 验证每次下载记录含操作人时间任务编号的审计日志 | P0 | 安全性测试 | 1. 已完成任务 1;2. ACC-001 与 ACC-006 可分别登录;3. 审计日志查询入口可用(运维工具-行为日志或专项审计表) | 1. ACC-001 下载一次并记录时间<br>2. ACC-006 下载一次<br>3. ACC-001 再次下载<br>4. 按任务编号检索审计日志逐条核对 | ACC-001/ACC-006;IDC-006;REQ-017 审计三要素 | 1. 每次下载产生一条审计日志,含操作人、操作时间、任务编号三要素<br>2. 重复下载逐次留痕(3 次下载 3 条记录,非仅记首次)<br>3. 日志时间与实际下载时间一致(秒级)<br>4. 按任务编号可反查全部下载人清单 | 对应TP-D-003;REQ-017;⚠️ 待确认 Q6:失败清单下载是否同样记审计日志——失败清单含货源/运单号属敏感业务数据;建议一并留痕,确认后补充失败清单下载审计断言 |
|
||||
| PLT_TMS_FPKG_068 | 平台端-运单管理-运单文件包-下载审计 | 验证未完成任务直调下载接口被后端双重校验拒绝 | P1 | 回归测试 | 1. 准备待处理、处理中、失败任务各 1(STT-001/002/005);2. 抓包工具可获取已完成任务的下载接口报文;3. ACC-001 已登录 | 1. 确认三类任务行均无下载按钮<br>2. 抓取已完成任务下载请求,分别替换任务编号为待处理/处理中/失败任务后重放<br>3. 任务刚转"已完成"瞬间并发发起下载请求<br>4. 核对各响应 | STT-001/002/005 任务;下载接口报文 | 1. 三类状态前端均无下载按钮<br>2. 直调下载接口均返回明确错误(403/业务错误码),不返回 200 文件流或半成品<br>3. 完成瞬间并发请求要么等待打包落库后返回完整包、要么明确拒绝,不返回半成品 zip<br>4. 后端状态校验独立于前端按钮(双重拦截) | 对应TP-D-004;REQ-008/REQ-016;[AI修正: 历史缺陷防御](BUG-202607-01 仅前端控制同类防御) |
|
||||
| PLT_TMS_FPKG_069 | 平台端-运单管理-运单文件包-下载审计 | 验证不提供按批次文件包单独下载的入口与接口 | P3 | 功能测试 | 1. 已完成多批次任务 1(XLS-001/002/003 两个批次);2. 接口探测工具可用;3. ACC-001 已登录 | 1. 检查任务行与任务详情/结构弹窗全部操作项<br>2. 探测下载接口携带批次参数的请求(如批次目录名/批次序号)<br>3. 正常下载总包确认功能不受影响 | 决议#11;多批次任务 | 1. 页面无"按批次下载"类按钮或入口<br>2. 携带批次参数的下载探测请求返回 404/403 或不被解释为批次下载,无导出单批次能力<br>3. 总包下载功能正常(负向裁剪不误伤主功能) | 对应TP-D-005;REQ-025(决议#11 本期不做,防过度实现) |
|
||||
| PLT_TMS_FPKG_070 | 平台端-运单管理-运单文件包-下载审计 | 验证下载中断或取消后服务端文件包完好可重新下载 | P1 | 功能测试 | 1. 已完成任务 1(zip 较大,含证件图片);2. 浏览器开发者工具可限速断网;3. ACC-001 已登录 | 1. 开始下载后中途断网(或浏览器手动取消下载)<br>2. 恢复网络后重新点击下载<br>3. 核对二次下载 zip 完整性<br>4. 检查服务端日志与存储 | IDC-006;大 zip 任务 | 1. 中断/取消不影响服务端文件包(存储完好)<br>2. 重新下载获得完整 zip(与首次完整包一致可解压)<br>3. 服务端无异常日志刷屏、无残留半成品响应<br>4. 审计日志按实际成功下载记录 | 对应TP-D-006;REQ-016(漏测清单弱网项) |
|
||||
| PLT_TMS_FPKG_071 | 平台端-运单管理-运单文件包-下载审计 | 验证 1000 单规模大 zip 下载不因网关超时失败 | P1 | 性能测试 | 1. 已完成 1000 单任务(含证件图片,zip 数百 MB 级);2. 已确认网关(OpenResty)超时阈值配置;3. ACC-001 已登录 | 1. 点击下载并计时至下载完成<br>2. 核对 zip 完整性<br>3. 重复 3 次记录耗时基线<br>4. 观察服务端资源 | CNC-006 产出任务;BND-007 | 1. 下载全程无网关 504/超时中断(耗时在网关超时阈值内或支持流式输出/断点续传)<br>2. 下载完成的 zip 完整可解压<br>3. 3 次耗时基线已记录供回归对比,服务端无内存异常 | 对应TP-D-006;REQ-016 |
|
||||
| PLT_TMS_FPKG_072 | 平台端-运单管理-运单文件包-非功能 | 验证 1000 单规模任务 30 分钟内完成并记录基线 | P1 | 性能测试 | 1. 环境已造 1000 单有效运单(500 批×2 运单混合结构,数据缺口 #1);2. 生成对应 1000 行清单;3. 并发队列为空 | 1. 记录开始时间并上传 1000 行清单<br>2. 间隔 1 分钟轮询任务状态与进度<br>3. 记录转"处理中"与"已完成"时刻<br>4. 抽检 zip 内 3 个批次包完整性<br>5. 用 XLS-006 全量 2000 行重复观测(仅记录不设卡) | BND-007(1000 行);CNC-006;XLS-006(2000 行) | 1. 1000 单任务从上传到"已完成"实测小于 30 分钟<br>2. 进度持续推进,无 5 分钟以上零进度停滞<br>3. 抽检批次包结构完整、文件可打开<br>4. 耗时基线已记录;2000 行观测值单独记录不作为验收卡点 | 对应TP-N-001;REQ-020(RISK-AVAILABILITY P1 容量侧面) |
|
||||
| PLT_TMS_FPKG_073 | 平台端-运单管理-运单文件包-非功能 | 验证并发提交多任务时处理数不超过上限且排队不丢失 | P1 | 性能测试 | 1. 准备 5 份合法清单(每份 300~500 行);2. 已确认并发上限配置(1~2);3. ACC-001 已登录 | 1. 5 份清单在 10 秒内先后上传(其中 1 份由 ACC-006 提交,构造 CNC-007 双账号并发)<br>2. 以 10 秒级轮询记录各任务状态<br>3. 统计同一时刻"处理中"任务数峰值<br>4. 等待全部任务终态并逐一下载验证 zip | CNC-002/003/007;BND-051/052/053;STT-001;ACC-006 | 1. 同一时刻"处理中"任务数不超过 2,其余停留"待处理"<br>2. 排队任务按提交顺序依次转"处理中"<br>3. 5 个任务全部完成且 zip 完整无丢失<br>4. 排队期间上传入口可用(可继续新建任务),数据库无任务丢失或状态错乱;各任务上传人字段与提交账号一一对应(ACC-001/ACC-006) | 对应TP-N-002;REQ-022(六#8;RISK-AVAILABILITY P1 主场景,不得省略) |
|
||||
| PLT_TMS_FPKG_074 | 平台端-运单管理-运单文件包-非功能 | 验证同一文件毫秒级并发重复提交仅创建一个任务 | P1 | 回归测试 | 1. ACC-001 已登录;2. 接口工具可并发重放上传请求;3. 准备合法清单文件(XLS-001/002/003) | 1. 页面选择文件后 1 秒内快速连点"开始上传并创建任务"5 次<br>2. 另用接口工具携带同一会话并发重放上传请求 3 次<br>3. 查询任务列表与数据库任务表 | CNC-008;XLS-001/002/003 清单 | 1. 页面连点仅创建 1 个任务(前端防抖)<br>2. 接口并发重放仅创建 1 个任务(后端幂等键/分布式锁)<br>3. 数据库任务表仅 1 条新记录<br>4. 前端防抖与后端幂任一失效即本用例失败 | 对应TP-N-003;REQ-022/REQ-023;[AI修正: 历史缺陷防御](BUG-202607-02 重试+手动触发并发提交防御;项目画像 §8.2 必测幂等) |
|
||||
| PLT_TMS_FPKG_075 | 平台端-运单管理-运单文件包-非功能 | 验证上传接口超时时有明确提示且重试前防重复建任务 | P1 | 功能测试 | 1. ACC-001 已登录;2. 代理工具可模拟上传接口响应延迟超过 30 秒 | 1. 开启延迟模拟后正常上传清单<br>2. 观察前端 Loading 与超时提示<br>3. 超时后先刷新列表查询任务是否已创建再决定重新上传<br>4. 核对最终任务数量 | 漏测清单 §2(30 秒级超时);XLS-001/002/003 | 1. 上传请求发出后按钮防重复点击、有 Loading 态<br>2. 超时给出明确提示,非静默失败<br>3. 重试前查询发现任务已创建则不重复上传,最终仅 1 个任务<br>4. 若服务端已建任务而前端提示失败,重传请求被幂等拦截不产生第二个任务 | 对应TP-N-003;REQ-022/REQ-023(漏测清单超时处理项) |
|
||||
| PLT_TMS_FPKG_076 | 平台端-运单管理-运单文件包-非功能 | 验证文件包第 7 天内可下载过期后不可下载 | P1 | 功能测试 | 1. 已完成任务 1 并记录完成时间 T0;2. 具备保留期模拟手段(回拨数据库完成时间或开发提供 mock,需运维配合);3. ACC-001 已登录 | 1. 将任务完成时间模拟为 6 天前,点击下载验证<br>2. 模拟为恰好 7 天前整,点击下载验证临界行为<br>3. 模拟为 8 天前,点击下载并观察提示<br>4. 核对数据库保留期字段与清理任务记录 | BND-031/032/033;STT-021/022 | 1. 第 6 天可正常下载完整 zip<br>2. 第 7 天整临界行为与实现口径一致(以"完成时间+7 天"为界,需开发确认后固化)<br>3. 第 8 天下载被拒,提示"文件包已超过 7 天保留期,请重新上传清单生成"类文案(原型文案)<br>4. 数据库保留期字段/清理记录标记过期 | 对应TP-N-004;REQ-021(决议#10;临界口径见文末实现口径确认项) |
|
||||
| PLT_TMS_FPKG_077 | 平台端-运单管理-运单文件包-非功能 | 验证过期任务的列表展示形态与存储清理及重新上传 | P1 | 功能测试 | 1. 已过期任务 1(承接 PLT_TMS_FPKG_076 步骤产出);2. 对象存储控制台/工具可核查;3. ACC-001 已登录 | 1. 查看过期任务在列表中的展示(状态标签、按钮、置灰形态)<br>2. 核查对象存储中该 zip 是否已清理<br>3. 使用同清单重新上传<br>4. 核对新任务与旧任务互不影响 | STT-006(原型"已过期"标签);STT-022;BND-033 | 1. 过期任务展示形态按确认口径实现:新增"已过期"展示标签 或 保持原状态+下载按钮置灰,二选一,不出现无法理解的展示态<br>2. 过期后存储文件被自动清理,无静默占用(对象存储核查)<br>3. 重新上传同清单创建新任务并可正常完成下载<br>4. 旧任务记录不影响新任务编号与统计 | 对应TP-N-004;REQ-021;⚠️ 待确认 Q5:过期任务列表展示形态——需求 4.3.1 状态机仅 5 态,原型任务列表有灰色"已过期"标签;影响本用例断言 1 与列表/状态字典实现;建议确认新增展示态 or 原状态+按钮置灰后回填 |
|
||||
| PLT_TMS_FPKG_078 | 平台端-运单管理-运单文件包-非功能 | 验证下载 URL 鉴权与审计反查的敏感数据补偿控制 | P2 | 安全性测试 | 1. 已完成任务 1;2. 抓包工具可用;3. 无权限对照账号 ACC-003 可登录;4. ACC-001 已登录 | 1. ACC-001 下载并抓取下载 URL<br>2. 将该 URL 复制到未登录浏览器与 ACC-003 会话直接访问<br>3. 篡改 URL 中任务编号或签名类参数后重放<br>4. 在审计日志按任务编号反查下载人 | ACC-001/ACC-003;IDC-006;REQ-026 补偿控制 | 1. 下载 URL 携带鉴权信息,未登录/无权限会话访问被拒,不可离线伪造或转发生效<br>2. 若实现签名/一次性链接,则过期或二次使用失效<br>3. 篡改参数被校验拒绝,不返回文件流<br>4. 审计日志可完整反查"谁在何时下载了哪个任务"(联动 PLT_TMS_FPKG_067) | 对应TP-N-005;REQ-002/REQ-017/REQ-026(RISK-COMPLIANCE 补偿控制链) |
|
||||
| PLT_TMS_FPKG_079 | 平台端-运单管理-运单文件包-非功能 | 验证 OBS 持续不可用时任务超时置失败可删除重传 | P1 | 功能测试 | 1. 运维配合断开服务对 OBS 的访问(网络策略或 mock);2. ACC-001 已登录;3. 准备合法清单(XLS-001/002/003) | 1. OBS 断开期间上传清单<br>2. 观察任务状态变化(重试→超时)<br>3. 确认任务最终置"失败"并检查可删除<br>4. 检查无僵尸"处理中"任务与半成品 zip | STT-005;数据缺口 #11 | 1. 任务不无限停留"处理中",超时后置"失败"<br>2. 失败任务可删除(联动 PLT_TMS_FPKG_036)<br>3. 无半成品 zip 可下载<br>4. 数据库任务终态与系统级失败原因记录完整可解释 | 对应TP-N-006;REQ-015/REQ-024(项目画像必测"依赖服务不可用") |
|
||||
| PLT_TMS_FPKG_080 | 平台端-运单管理-运单文件包-非功能 | 验证 OBS 恢复后删除重传全链路成功且不拖累其他业务 | P1 | 功能测试 | 1. 承接 PLT_TMS_FPKG_079 的失败任务;2. OBS 已恢复访问;3. ACC-001 已登录 | 1. 删除 OBS 故障期的失败任务<br>2. 重新上传同清单等待完成<br>3. 下载 zip 抽检文件完整<br>4. 同期并行验证装卸货图片上传等其他 OBS 业务正常 | STT-005→STT-003;XLS-001/002/003 | 1. 删除重传后新任务全链路成功,无需人工修数据<br>2. zip 内容完整与正常时期一致<br>3. 平台其他 OBS 业务(装卸货图片等)不受本功能故障与恢复影响<br>4. 服务端无残留脏数据 | 对应TP-N-006;REQ-015/REQ-024 |
|
||||
| PLT_TMS_FPKG_081 | 平台端-运单管理-运单文件包-非功能 | 验证 zip 中文目录与多来源 xlsx 的兼容性 | P2 | 兼容性测试 | 1. 已完成任务 zip(批次包名含中文司机姓名与车牌,如 张三-340102199001011234-皖A12345);2. WPS 生成的 xlsx 清单、.xls 改后缀 .xlsx 文件;3. Chrome/Edge/Firefox 浏览器可用 | 1. 在 Windows 资源管理器解压 zip 核对中文目录名<br>2. 用 WinRAR/7-Zip/Bandizip 各解压一次核对<br>3. 上传 WPS 生成的 xlsx 验证解析<br>4. 上传 .xls 改后缀 .xlsx 验证拒绝口径<br>5. 三种浏览器分别下载核对文件名 | IDC-007(中文批次包名);ERR-001/003;XLS-001/002/003 | 1. 中文批次包名在资源管理器与常用解压工具下显示正确无乱码(zip UTF-8 标志位兼容)<br>2. WPS 生成的合法 xlsx 可正常解析上传<br>3. .xls 改后缀 .xlsx 被拒绝(与 PLT_TMS_FPKG_011 口径一致)<br>4. Chrome/Edge/Firefox 下载文件名=运单资料_【任务编号】.zip 完整不乱码 | 对应TP-N-007;REQ-004/REQ-016(RISK-COMPATIBILITY;漏测清单导入导出兼容项) |
|
||||
| PLT_TMS_FPKG_082 | 平台端-运单管理-运单文件包-非功能 | 验证新增运单文件包功能不影响既有功能与并行需求 | P2 | 回归测试 | 1. ACC-001 已登录;2. 运单管理、运单跟踪、安徽运八并行需求功能可用;3. 可触发 2 个 2000 行任务制造打包高峰 | 1. 触发 2 个 XLS-006(2000 行)任务进入"处理中"制造打包高峰<br>2. 高峰期操作运单管理列表/详情/导出、运单跟踪等既有菜单<br>3. 触发一次运单导出等其他下载<br>4. 核对安徽运八异步任务正常<br>5. 打包完成后核查运单数据是否被修改 | XLS-006×2;运单管理既有功能清单 | 1. 既有菜单功能全部正常(列表/详情/导出无报错、无劣化到不可用)<br>2. 高峰期运单导出等其他下载不被磁盘/带宽拖垮(验证并发上限 1~2 设计动机)<br>3. 打包前后运单状态与业务数据无任何修改(本功能只读消费运单数据)<br>4. 安徽运八异步任务不受干扰正常完成 | 对应TP-N-008;REQ-001;[AI修正: 冲突修订](关联与冲突报告确认与安徽运八并行无冲突,落"并行不干扰"回归验证点) |
|
||||
| PLT_TMS_FPKG_083 | 平台端-运单管理-运单文件包-数据校验 | 验证全部行数据级失败(0 有效行)时任务终态与无空包残留 | P1 | 功能测试 | 1. ACC-001 已登录;2. 构造 3 行全非法清单:XLS-101(序号 0)+XLS-110(运单不存在)+XLS-107(单号为空) | 1. 上传该 3 行清单等待任务终态<br>2. 查看任务状态与成功/失败数<br>3. 下载失败清单核对 3 行原因<br>4. 检查任务下载入口与对象存储 | XLS-101/110/107 组合清单(CMB-018 构造基准) | 1. 3 行全部进入失败清单,原因分别对应 4.2.2 各规则文案<br>2. 成功数=0、失败数=3、总数=3,数据库统计一致<br>3. 任务无"下载文件包"入口(暂按不生成空 zip 设计),对象存储无空文件包残留<br>4. 任务终态按确认结论回填(暂按"已完成·部分失败"断言) | 对应TP-U-015(关联 TP-T-002);REQ-006/REQ-007;⚠️ 待确认:0 有效行终态(已完成·部分失败 or 失败)与是否生成空文件包,见文末确认项 #10(数据缺口 #14),确认后回填断言 3/4 |
|
||||
| PLT_TMS_FPKG_084 | 平台端-运单管理-运单文件包-打包归批 | 验证最小序号运单因文件缺失剔除后证件改挂重算的最小序号运单 | P0 | 功能测试 | 1. 张三批次构造 3 行:序号 1 行为仅缺电子回单的运单(无支付记录/回单文件缺失,CMB-010)、序号 3/5 行为回单合同齐全的有效运单(CMB-006+XLS-004);2. ACC-001 已登录 | 1. 上传该 3 行清单等待完成<br>2. 核对失败清单含序号 1 行及缺失原因<br>3. 下载 zip 核对批次①运单包命名与子目录<br>4. 检索证件照片实际落位 | CMB-010(最小序号仅缺回单);CMB-006(序号 1、3、5);决议#8;XLS-003/004 | 1. 失败清单含序号 1 行,原因含回单/文件缺失类文案("无电子回单:运单无支付记录"或同类)<br>2. 证件改挂重算后的最小序号:序号 3 运单包名=3-…-含司机及车辆证件且含四子目录,序号 5 运单包仅含合同+电子回单<br>3. 序号 1 运单包最终形态(整包不生成 or 保留但缺电子回单子目录)按 4.4.4 条款一/二边界确认后回填;无论何种形态,断言 2 的证件改挂均须成立且不阻断其余运单<br>4. 成功数/失败数与 zip 内容一致 | 对应TP-P-007;REQ-015(决议#8;4.4.4 条款二字面将"文件缺失"列为剔除触发,本用例固化证件改挂断言);⚠️ 待确认:条款一(缺失不剔除仅记清单)与条款二(剔除改挂)边界,见文末确认项 #3(数据缺口 #17),确认后回填断言 3 |
|
||||
| PLT_TMS_FPKG_085 | 平台端-运单管理-运单文件包-上传校验 | 验证多 Sheet 工作簿不得静默丢数据且处理行为明确 | P2 | 功能测试 | 1. ACC-001 已登录;2. 构造含 2 个 Sheet 的 xlsx:Sheet1 为模板三列 + XLS-001/002 两行有效数据,Sheet2 同结构含 XLS-003 一行有效数据 | 1. 上传该多 Sheet 文件<br>2. 观察上传结果(成功或拒绝提示)<br>3. 若创建任务:等待完成核对总行数/成功数并下载 zip<br>4. 若拒绝:核对提示文案与任务列表 | XLS-001/002/003(分置两个 Sheet);多 Sheet 构造文件(openpyxl) | 1. 系统有明确处理行为且两 Sheet 数据无一被静默丢弃:全部 Sheet 解析(总行数=3、zip 含 3 运单包)或整体拒绝并提示具体原因<br>2. 不得出现仅解析 Sheet1(总行数=2)而 Sheet2 数据静默丢失后生成缺单文件包<br>3. 数据库统计与实际解析行数一致 | 对应TP-U-001/TP-U-004;REQ-004/REQ-005;⚠️ 待确认:多 Sheet 读取口径(读首 Sheet 拒绝其余 or 全部解析),见文末确认项 #1(数据缺口 #15),确认后回填断言 1 取值 |
|
||||
|
||||
---
|
||||
|
||||
## P2/P3 用例取舍说明
|
||||
|
||||
- 本次未裁剪任何 P2/P3 测试点(8 个全部保留),理由:TP-M-005 机构隔离为项目画像 §10 硬约束(权限类用例必须验证机构隔离);TP-U-018 为确认决议 #7/六#7 的既定口径且执行成本低;TP-P-014 与 TP-N-005 是 zip 不加密决策(决议 #12)的合规补偿链验证,属 RISK-COMPLIANCE 缓解措施;TP-N-007 对应 RISK-COMPATIBILITY;TP-N-008 是关联与冲突报告(无冲突)落地的"并行不干扰"回归验证点;TP-T-008 与 TP-D-005 为范围确认类用例——分别防止 Q1 功能遗漏与按决议 #11 防止过度实现。
|
||||
- 拆分/合并原则:同一测试点内"接受 vs 拒绝"或不同真实业务场景拆为独立用例(TP-M-003、TP-U-004、TP-P-007、TP-P-008、TP-D-006;TP-P-002 按要素维度处理——046 承接换车/换司机拆批、045 承接 CMB-007 跨货源不拆批对照);同一边界两侧行为合并为一条用例(2000/2001 行、10MB±1B、重试 3 次边界按两侧分设);端到端冒烟单独成条(001),不与明细用例混同。
|
||||
- 优先级校验:P0 占比 33/85=39%,与测试点 P0 占比(25/59=42%)匹配;全部 P0 测试点 100% 有 P0 用例承接,无高风险场景下沉到 P2(007 机构隔离已按项目画像 §10 硬约束升为 P1)。
|
||||
- 新增 085(P2)承接 TP-U-001/TP-U-004 的多 Sheet 解析口径不变式(数据缺口 #15),断言按"不得静默丢数据"设计,具体口径确认后回填;083/084 为评审与覆盖率审计修复新增(0 有效行终态、最小序号文件缺失剔除改挂)。
|
||||
|
||||
## 未收敛的 ⚠️ 待确认清单(Q1~Q6 保留项)
|
||||
|
||||
> Q2、Q3 已按需求口径收敛(Q3:需求 4.2.1"单文件行数上限 2000 行",2000 行含、2001 行拒绝,见 015 备注;Q2:仅表头 0 数据行按文件级拒绝、依据三章"运单清单"与 4.2.2 处理原则,见 016 备注)。以下 4 项未能从需求原文确定,相关用例不得按臆造规则执行,须确认后回填。
|
||||
|
||||
1. **Q1(承接用例 044,TP-T-008)**:问题——"查看结构/文件包结构预览"与"失败任务删除"仅见于原型,需求正文未定义;影响范围——044 用例保留与否及断言范围(若确认裁剪,"失败任务删除"仍以需求六#10 为准保留在 036);建议确认方向——需求方确认本期是否实现结构预览弹窗,确认实现则按弹窗实际字段回填断言,确认裁剪则删除 044。
|
||||
2. **Q4(承接用例 063,TP-P-013)**:问题——打包期间源数据变更(新回单/换证件照/运单关闭)按任务开始时刻快照还是实时拉取;影响范围——063 断言 1 的取值(快照=不含新增回单;实时=包含新增回单)与 TP-P-013 回归口径;建议确认方向——需求方二选一后回填断言,并明确"全任务一致"的实现保证。
|
||||
3. **Q5(承接用例 077,TP-N-004)**:问题——过期任务的列表展示形态:原型有灰色"已过期"标签,需求 4.3.1 状态机仅 5 态;影响范围——077 断言 1 与列表实现/状态字典;建议确认方向——确认新增"已过期"展示态(状态字段不动、仅展示层标记)或保持原状态+下载按钮置灰,确认后回填。
|
||||
4. **Q6(承接用例 067,TP-D-003)**:问题——失败清单下载是否同样记审计日志;影响范围——067 断言范围与敏感数据留痕完整性(失败清单含货源单号/运单号);建议确认方向——建议一并留痕(与文件包下载同表或同流水),确认后补充失败清单下载审计断言。
|
||||
|
||||
## 其他实现口径确认项(非 Q1~Q6,来自测试数据缺口,执行前与开发/需求方确认)
|
||||
|
||||
1. 数据缺口 #15:多 Sheet、表头后附加说明行/合并单元格的读取口径(085 已固化"不得静默丢数据"不变式断言,具体取值确认后回填);列顺序已按"按列名匹配"设计(013),若实现按固定列序读取需回归。
|
||||
2. 数据缺口 #16:10MB=10 的 6 次方还是 2 的 20 次方字节(017);序号/单号单元格数值型 vs 文本型读取规则(019)。
|
||||
3. 数据缺口 #17:需求 4.4.4 条款一(无回单/无合同不剔除仅记清单,055/056)与条款二(文件缺失剔除改挂,053/054/084)在"最小序号运单仅缺回单/合同"场景的适用边界(084 已按条款二字面口径固化证件改挂断言,运单包最终形态待确认回填)。
|
||||
4. BND-032 保留期临界(完成时间+7 天整)的实现口径(076)。
|
||||
5. ERR-006 列名全半角/空格 trim 匹配口径(012)。
|
||||
6. ERR-027 运单号前后空格匹配:已按"存在性校验与实际导出同口径"设计(022),trim 与否本身需实现确认。
|
||||
7. ERR-040 批次包名非法字符替换/转义与超长截断策略(060)。
|
||||
8. IDC-001 任务编号编码规则:断言不写死格式,仅验证系统生成且唯一(001/010)。
|
||||
9. BND-025/026/027 序号 int32 上限与 Excel 15 位精度截断:已锚定 019 备注,执行 019 时顺带探测,预期"合法或明确报错,不得静默截断"。
|
||||
10. 数据缺口 #14:数据级校验全部失败(0 有效行)的任务终态(已完成·部分失败 or 失败)与是否生成空文件包(083 暂按"已完成·部分失败、不生成空 zip"设计,确认后回填断言)。
|
||||
11. 机构隔离环境依赖(007/008):多机构部署形态、B 机构运营账号 ACC-B01 与 B 机构运单 YDB-001 的可用性见测试数据缺口 #18;若环境不支持,按 007 备注的替代口径执行。
|
||||
Binary file not shown.
Reference in New Issue
Block a user