dingdanquanliucheng/测试规划说明书.md
taiyi e636b8da17 清理冗余文档,新增测试规划说明书
删除 29 个冗余 md 文件(模板、分析报告、过期设计文档等),
新增 测试规划说明书.md 覆盖 17 个测试域约 191 个测试用例。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-28 23:43:26 +08:00

792 lines
42 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 测试规划说明书
## 1. 文档信息
| 项目 | 内容 |
|---|---|
| 项目名称 | 订单全流程管理系统 |
| 文档版本 | v1.0 |
| 编写日期 | 2026-05-28 |
| 文档目的 | 基于《确定版需求说明书》与《确定版功能任务完成清单》《未完成功能清单》,对系统全部功能模块进行测试规划,明确测试范围、优先级、用例覆盖与验收标准 |
| 参考文档 | 《确定版需求说明书.md》《确定版功能任务完成清单.md》《未完成功能清单.md》《开发细节/04-测试用例清单.md》 |
---
## 2. 测试目标
### 2.1 核心测试目标
基于《未完成功能清单》识别的 6 大本质缺口,本次测试的核心目标为:
| 编号 | 测试目标 | 对应缺口 | 验证方式 |
|---|---|---|---|
| T-1 | 验证订单从创建→审批→下发→履约→结算的完整数据闭环 | 数据闭环未闭合 | 端到端流程用例 |
| T-2 | 验证订单、任务、提醒、审批的状态机严格按规则流转 | 状态机未完全收敛 | 状态流转矩阵用例 |
| T-3 | 验证不同角色的字段级、按钮级、行级权限隔离 | 权限隔离未完全落地 | 多角色对比用例 |
| T-4 | 验证提醒、欠款、报表等规则由配置项驱动 | 配置驱动未完全实现 | 配置变更联动用例 |
| T-5 | 验证快递100、AI OCR、OSS、微信通知等外部能力的真实对接 | 外部能力未完全接通 | 集成/模拟用例 |
| T-6 | 验证四端前端页面的字段展示、按钮时机、空态/错误态符合需求 | 体验层未完全收口 | UI 回归用例 |
### 2.2 测试完成度基线
基于《确定版功能任务完成清单》,当前系统整体完成度约 **93%**,以下为各模块完成度与测试重点:
| 模块 | 完成度 | 测试重点 |
|---|---:|---|
| 订单中心 / 订单详情 / 订单轨迹 | 100% | 回归验证 |
| 审批中心 / 审批详情 | 100% | 回归验证 |
| 客户中心 | 100% | 回归验证 |
| 提醒中心 | 100% | 回归验证 |
| 权限中心 | 100% | 回归验证 |
| 报表统计 / 报表核对 | 100% | 回归验证 |
| 员工中心 | 100% | 回归验证 |
| 系统管理页 | 100% | 回归验证 |
| 订单业务流页面 | 96% | 重点测试:后端闭环 |
| AI 识别中心 | 97% | 重点测试:人工确认留痕 |
| 产品页面 | 95% | 重点测试:禁用产品下单校验 |
| 供应商 / 工厂页面 | 95% | 重点测试:模板差异化 |
| 业务员端主框架 | 100% | 回归验证 |
| 配置中心 | 92% | 重点测试:配置即时生效 |
| 司机端主框架 | 92% | 重点测试:状态联动与字段脱敏 |
| 审计看板 | 90% | 重点测试:操作覆盖面 |
| 管理层端主框架 | 95% | 重点测试:审批闭环 |
| 权限与可见性规则 | 92% | 重点测试:字段级隔离 |
| 秘书端 | 55% | **高风险**:需全面测试 |
| 履约状态流转 | 45% | **高风险**:需全面测试 |
| 取消流程(已通过/履约中) | 35% | **高风险**:需全面测试 |
---
## 3. 测试范围
### 3.1 覆盖的端与前端模块
| 端 | 前端目录 | 测试范围 |
|---|---|---|
| WEB 管理后台 | `frontend/web-admin` | 登录、系统管理、客户/产品/工厂维护、报表、配置、审计、权限、审批 |
| WEB 业务员端 | `frontend/web-sales` | 登录、订单录入/列表/详情、提交审核、取消、提醒、客户识别 |
| 小程序管理层端 | `frontend/mini-manager` | 登录、审批列表/详情、取消审批、下发文本、司机任务创建、经营看板 |
| 小程序司机端 | `frontend/mini-driver` | 登录、任务列表/详情、接单、揽货、送达、图片上传、物流轨迹 |
| 后端 API | `backend/` | 全量接口测试 |
### 3.2 不在测试范围内
- 部署与运维CI/CD、容器编排
- 性能压测(本期以功能测试为主)
- 第三方服务的真实生产环境对接(使用沙箱/模拟环境)
---
## 4. 测试策略
### 4.1 测试层次
| 层次 | 说明 | 占比 |
|---|---|---|
| 接口测试 | 后端 API 的参数校验、状态流转、权限控制、业务规则 | 40% |
| 页面功能测试 | 四端前端页面的交互、展示、按钮状态、字段可见性 | 35% |
| 端到端流程测试 | 跨端完整业务流程串联 | 15% |
| 权限与安全测试 | 角色越权、字段脱敏、数据隔离 | 10% |
### 4.2 测试优先级定义
| 优先级 | 定义 | 执行策略 |
|---|---|---|
| P0 | 阻断性功能,不通过则无法上线 | 必须全部通过,失败则阻塞发布 |
| P1 | 核心功能,影响主要业务流程 | 应全部通过,个别失败需评估影响 |
| P2 | 体验增强功能,不影响主流程 | 可接受已知缺陷,下版本修复 |
---
## 5. 测试环境与数据
### 5.1 测试账号
| 角色 | 账号 | 权限范围 | 所属端 |
|---|---|---|---|
| 管理员 | `admin01` | 全量后台管理 | web-admin |
| 管理层 | `manager01` | 审批、利润、报表、任务分配 | mini-manager |
| 业务员 A | `sales01` | 本人订单、客户、提醒 | web-sales |
| 业务员 B | `sales02` | 本人订单、客户、提醒 | web-sales |
| 司机 A | `driver01` | 本人司机任务 | mini-driver |
| 司机 B | `driver02` | 本人司机任务 | mini-driver |
| 秘书 | `secretary01` | AI 识别、录入辅助 | web-admin |
### 5.2 测试数据要求
| 数据类型 | 最低要求 | 说明 |
|---|---|---|
| 客户 | 至少 3 个 | 含不同业务员归属、月结客户、已欠款客户 |
| 产品 | 至少 4 个 | 含 2 个分类(工业品/日用品)、含已禁用产品 |
| 工厂/供应商 | 至少 2 个 | 含不同模板类型 |
| 订单 | 覆盖全状态 | 草稿、待审核、已通过、已退回、取消申请中、履约中、已送达、已结算、已取消 |
| 司机任务 | 覆盖全状态 | 待接单、已接单、已揽货、已送达 |
| 系统配置 | 预置完整 | 物流超时天数、沉默客户周期、欠款起算口径、金额阈值 |
### 5.3 测试环境
| 项目 | 要求 |
|---|---|
| 后端服务 | 独立测试环境,与开发环境隔离 |
| 数据库 | 独立测试库,含预置基础数据 |
| OSS/文件服务 | 模拟或沙箱环境 |
| AI OCR 服务 | 模拟返回或沙箱环境 |
| 快递100 | 模拟返回或沙箱环境 |
| 微信订阅消息 | 模拟发送,验证消息记录写入 |
---
## 6. 按模块测试规划
### 6.1 登录鉴权与权限体系
**完成度86% | 优先级P0**
#### 未完成/风险项
- 角色登录态与菜单/按钮权限的完整联动不足
- 权限码在授权后即时生效链路不完整
- 管理员/管理层/业务员/司机的角色能力边界尚未完全收敛
#### 测试用例
| 编号 | 用例名称 | 前置条件 | 步骤 | 预期结果 | 优先级 |
|---|---|---|---|---|---|
| AUTH-001 | 正常登录 | 用户启用 | 输入正确账号/密码/角色登录 | 返回 token、用户信息、菜单、权限 | P0 |
| AUTH-002 | 密码错误 | 用户存在 | 输入错误密码 | 返回错误码 `40002` | P0 |
| AUTH-003 | 角色不匹配 | 业务员账号 | 使用 manager 角色登录 | 返回错误码 `40003` | P0 |
| AUTH-004 | 停用用户登录 | 用户停用 | 登录 | 返回错误码 `40003` | P0 |
| AUTH-005 | 无 token 访问 | 无 | 请求受保护接口 | 返回错误码 `40002` | P0 |
| AUTH-006 | 过期 token 访问 | token 过期 | 请求受保护接口 | 返回错误码 `40002` | P0 |
| AUTH-007 | 业务员越权看他人订单 | sales01/sales02 均有订单 | sales01 请求 sales02 订单详情 | 返回 `40003``40004` | P0 |
| AUTH-008 | 司机越权看他人任务 | driver01/driver02 均有任务 | driver01 请求 driver02 任务详情 | 返回 `40003``40004` | P0 |
| AUTH-009 | 司机看财务字段 | 司机任务存在 | 查看任务详情 | 不返回客户敏感信息、报价、成本、利润、回扣 | P0 |
| AUTH-010 | 登录返回菜单树 | 任意角色 | 正常登录 | 返回的 menus 包含该角色可见的完整菜单树 | P1 |
| AUTH-011 | 登录返回权限码 | 任意角色 | 正常登录 | 返回的 permissions 包含按钮级权限码 | P1 |
| AUTH-012 | 角色授权后即时生效 | 管理员修改角色菜单 | 用户重新登录 | 菜单和按钮权限更新为最新配置 | P1 |
---
### 6.2 系统用户、角色、菜单管理
**完成度95% | 优先级P0**
#### 未完成/风险项
- 用户管理分页由前端切片实现,接口层未形成完整分页查询
- 删除、停用/启用切换操作未形成完整闭环
- 角色停用/启用流程与异常约束不够完整
- 菜单管理的 `icon`、`sort_no`、`status`、多级菜单能力偏基础
#### 测试用例
| 编号 | 用例名称 | 前置条件 | 步骤 | 预期结果 | 优先级 |
|---|---|---|---|---|---|
| SYS-001 | 新增用户成功 | 管理员登录,角色已存在 | 新增账号/姓名/手机号/角色/初始密码 | 返回用户 ID用户可登录 | P0 |
| SYS-002 | 用户账号重复 | 已有 username | 新增同 username 用户 | 返回 `40006` | P0 |
| SYS-003 | 用户角色不存在 | role_id 不存在或停用 | 新增或更新用户 | 返回 `40004` | P0 |
| SYS-004 | 停用用户 | 用户启用 | 管理员停用后该用户登录 | 停用成功,登录返回 `40003` | P0 |
| SYS-005 | 重置密码 | 用户存在 | 管理员重置,用户用新密码登录 | 新密码可登录,旧密码不可 | P0 |
| SYS-006 | 新增角色成功 | 管理员登录 | 新增 role_name/role_code/状态 | 返回角色 ID列表可查 | P0 |
| SYS-007 | 角色编码重复 | 已有 role_code | 新增同编码角色 | 返回 `40006` | P0 |
| SYS-008 | 停用有启用用户的角色 | 角色下有启用用户 | 停用角色 | 返回 `40007` 或要求先处理用户 | P1 |
| SYS-009 | 新增菜单成功 | 管理员登录 | 新增菜单名称/路径/权限编码 | 菜单树可查询到新菜单 | P1 |
| SYS-010 | 菜单权限编码重复 | 已有 permission_code | 新增同编码菜单 | 返回 `40006` | P1 |
| SYS-011 | 菜单父级非法 | 将父级设为自身或子级 | 更新菜单 | 返回 `40007` | P1 |
| SYS-012 | 角色授权保存 | 角色/菜单存在 | 给角色配置 menu_ids 和 permission_codes | 保存成功,重新登录后权限生效 | P0 |
| SYS-013 | 非管理员访问系统管理接口 | 业务员或司机登录 | 请求用户/角色/菜单管理接口 | 返回 `40003` | P0 |
| SYS-014 | 权限变更审计 | 修改角色授权 | 查询审计日志 | 有授权前后差异记录 | P1 |
| SYS-015 | 用户列表分页 | 多用户数据 | 翻页查询 | 分页正确,数据不重复 | P1 |
| SYS-016 | 用户列表筛选 | 多用户数据 | 按姓名/角色/状态筛选 | 返回符合条件数据 | P1 |
---
### 6.3 客户管理
**完成度100%(页面)/ 60-65%(导入/去重) | 优先级P0**
#### 未完成/风险项
- 客户导入能力未见完整代码闭环(模板、去重、失败行返回)
- 客户去重规则未完全按"姓名+手机号"强约束落地
- 月结信息、欠款信息的维护和展示不完整
#### 测试用例
| 编号 | 用例名称 | 前置条件 | 步骤 | 预期结果 | 优先级 |
|---|---|---|---|---|---|
| CUS-001 | 新增客户成功 | 无重复客户 | 提交姓名/手机号等信息 | 返回客户 ID数据库写入 | P0 |
| CUS-002 | 姓名手机号重复 | 已有同姓名同手机号 | 再次新增 | 返回 `40006` | P0 |
| CUS-003 | 手机号为空 | 无 | 新增客户不填手机号 | 返回 `40001` | P0 |
| CUS-004 | 客户列表筛选 | 多客户数据 | 按姓名/手机号/业务员筛选 | 返回符合条件数据 | P1 |
| CUS-005 | 客户详情 | 客户存在 | 请求详情 | 返回结算方式、账期、欠款、归属业务员 | P1 |
| CUS-006 | 客户导入成功 | 有导入文件 | 调用导入接口 | 返回总数、成功数、失败数 | P1 |
| CUS-007 | 客户导入去重 | 文件含重复姓名手机号 | 导入 | 重复记录计入 duplicate_count | P1 |
| CUS-008 | 业务员客户范围 | sales01 有客户 | sales02 查询客户列表 | 不返回 sales01 私有客户 | P0 |
| CUS-009 | 月结客户标识 | 客户存在 | 设置结算方式为月结 | 客户详情显示月结信息 | P2 |
| CUS-010 | 客户欠款展示 | 客户有欠款记录 | 查看客户详情 | 显示欠款金额与明细 | P1 |
---
### 6.4 产品与产品分类管理
**完成度95% | 优先级P1**
#### 未完成/风险项
- 产品分类独立管理整体功能不完整
- 产品状态对订单下单的约束不足(禁用产品仍可下单)
- 产品快照机制未完全前置到所有场景
#### 测试用例
| 编号 | 用例名称 | 前置条件 | 步骤 | 预期结果 | 优先级 |
|---|---|---|---|---|---|
| PROD-001 | 新增产品分类 | 管理员登录 | 新增分类 | 分类可在列表查询 | P1 |
| PROD-002 | 分类编码重复 | 已有分类编码 | 新增同编码分类 | 返回 `40006` | P1 |
| PROD-003 | 停用分类 | 分类存在 | 停用分类 | 新建产品不可选择或提示禁用 | P1 |
| PROD-004 | 新增产品成功 | 分类启用 | 新增产品 | 产品写入并关联分类 | P1 |
| PROD-005 | 产品列表筛选 | 多产品 | 按名称/规格/分类/状态筛选 | 返回符合条件数据 | P1 |
| PROD-006 | 产品详情 | 产品存在 | 请求详情 | 返回分类、成本、售价、状态 | P1 |
| PROD-007 | 禁用产品下单 | 产品禁用 | 订单选择该产品提交 | 拦截或明确提示 | P0 |
| PROD-008 | 产品快照 | 产品已用于订单 | 修改产品名称/成本 | 历史订单快照不变 | P0 |
---
### 6.5 工厂/供应商管理与下发文本
**完成度95%(页面)/ 30%(模板差异化) | 优先级P1**
#### 未完成/风险项
- 下发文本的"生成+确认+留痕"链路未完全闭环
- 工厂模板类型的业务差异未完全实现
- 下发文本历史记录表的实际持久化链路不完整
#### 测试用例
| 编号 | 用例名称 | 前置条件 | 步骤 | 预期结果 | 优先级 |
|---|---|---|---|---|---|
| FAC-001 | 新增供应商成功 | 管理员登录 | 提交供应商信息 | 返回供应商 ID | P1 |
| FAC-002 | 供应商列表筛选 | 多供应商 | 按名称/类型筛选 | 返回符合条件数据 | P1 |
| FAC-003 | 生成下发文本 | 订单 approved | 生成下发文本 | 返回文本内容 | P0 |
| FAC-004 | 确认下发工厂 | 订单 approved | 确认下发 | 状态变为 `pending_factory`,写审计日志 | P0 |
| FAC-005 | 非 approved 确认下发 | 订单 draft | 确认下发 | 返回 `40005` | P0 |
| FAC-006 | 下发文本日志 | 已确认下发 | 查询下发历史 | 有下发记录,含时间、操作人 | P1 |
| FAC-007 | 不同工厂模板差异化 | 配置不同模板 | 为不同工厂生成文本 | 文本格式按模板差异展示 | P2 |
---
### 6.6 订单录入、提交、审批
**完成度88-96% | 优先级P0**
#### 未完成/风险项
- 订单创建接口与需求字段存在缺口(派生字段、校验细节)
- 订单编辑/草稿保存的完整能力未完全实现
- 订单提交审核的完整校验不充分
- 审批页利润计算过程展示未完全落地
- 审批退回后业务员通知未完整落地
- 订单状态机仍不够严密
#### 测试用例
| 编号 | 用例名称 | 前置条件 | 步骤 | 预期结果 | 优先级 |
|---|---|---|---|---|---|
| ORD-001 | 创建草稿订单 | 业务员登录、产品存在 | 填写客户/明细/费用提交 | 返回订单 ID状态 `draft` | P0 |
| ORD-002 | 新客户自动入库 | 客户库无该客户 | 创建订单 | 自动创建客户记录 | P0 |
| ORD-003 | 利润计算 | 售100/成本60/回扣5/运费10/税费3/其他2 | 创建订单 | 利润=20利润率=20% | P0 |
| ORD-004 | 固定提成保存 | 输入固定提成 50 | 创建订单 | `commission_amount=50` | P1 |
| ORD-005 | 明细为空 | 无明细 | 创建订单 | 返回 `40001` | P0 |
| ORD-006 | 数量非法 | 数量为 0 | 创建订单 | 返回 `40001` | P0 |
| ORD-007 | 提交审核成功 | 订单 `draft` | 提交审核 | 状态变为 `pending_approve` | P0 |
| ORD-008 | 重复提交 | 订单已 `pending_approve` | 再次提交 | 返回 `40005` | P0 |
| ORD-009 | 管理层审批通过 | 订单 `pending_approve` | 管理层通过 | 状态变为 `approved` | P0 |
| ORD-010 | 管理层审批退回 | 订单 `pending_approve` | 管理层退回并填意见 | 状态变为 `rejected`,业务员收到通知 | P0 |
| ORD-011 | 生成下发文本 | 订单 `approved` | 生成下发文本 | 返回文本内容 | P0 |
| ORD-012 | 确认下发工厂 | 订单 `approved` | 确认下发 | 状态变为 `pending_factory` | P0 |
| ORD-013 | 非 approved 确认下发 | 订单 `draft` | 确认下发 | 返回 `40005` | P0 |
| ORD-014 | 订单列表筛选 | 多订单 | 按状态/客户/时间筛选 | 返回符合条件数据 | P1 |
| ORD-015 | 订单详情字段权限-业务员 | 业务员登录 | 查看本人订单详情 | 不返回成本、利润等无权限字段 | P0 |
| ORD-016 | 管理层订单详情 | 管理层登录 | 查看订单详情 | 返回完整财务字段 | P0 |
| ORD-017 | 编辑草稿订单 | 订单 `draft` | 修改客户/明细/费用 | 保存成功,数据更新 | P0 |
| ORD-018 | 保存并提交 | 订单 `draft` | 保存并提交审核 | 数据保存且状态变为 `pending_approve` | P1 |
| ORD-019 | 利润计算过程展示 | 管理层审批 | 查看审批详情 | 展示完整的利润计算过程(售价-成本-回扣-运费-税费-其他) | P1 |
| ORD-020 | 审批退回通知 | 订单被退回 | 业务员查看提醒中心 | 收到退回通知,含退回原因 | P1 |
| ORD-021 | 禁用产品创建订单 | 产品已禁用 | 选择禁用产品创建订单 | 系统拦截或明确提示 | P0 |
| ORD-022 | 订单状态流转完整性 | 订单从创建到完成 | 依次执行:草稿→审核→通过→下发→接单→揽货→送达→完成 | 每步状态正确流转,相关通知/审计/联动正确触发 | P0 |
---
### 6.7 订单取消流程
**完成度35-80% | 优先级P0高风险区域**
#### 未完成/风险项
- 草稿/待审核订单直接取消逻辑(完成度仅 55%
- 已通过/履约中订单的特殊审批逻辑(完成度仅 35%
- 取消原因/意见/前状态的审计留痕不完整
- 取消审批后的状态恢复链路不完整
#### 测试用例
| 编号 | 用例名称 | 前置条件 | 步骤 | 预期结果 | 优先级 |
|---|---|---|---|---|---|
| CAN-001 | 草稿订单取消 | 订单 `draft` | 业务员提交取消 | 状态直接变为 `canceled` | P0 |
| CAN-002 | 待审核订单取消 | 订单 `pending_approve` | 业务员提交取消 | 状态直接变为 `canceled` | P0 |
| CAN-003 | 已审批订单取消申请 | 订单 `approved` | 业务员提交取消 | 状态 `cancel_pending`,记录取消前状态 | P0 |
| CAN-004 | 履约中订单取消申请 | 订单 `picked_up` | 业务员提交取消 | 状态 `cancel_fulfillment_pending` | P0 |
| CAN-005 | 取消审批通过 | 订单 `cancel_pending` | 管理层同意 | 状态 `canceled` | P0 |
| CAN-006 | 取消审批拒绝 | 订单 `cancel_pending` 且原状态 `approved` | 管理层拒绝 | 状态恢复 `approved` | P0 |
| CAN-007 | 已取消再次取消 | 订单 `canceled` | 提交取消 | 返回 `40005` | P0 |
| CAN-008 | 取消原因必填 | 可取消订单 | 不填原因提交 | 返回 `40001` | P0 |
| CAN-009 | 履约中取消审批通过 | 订单 `cancel_fulfillment_pending` | 管理层同意 | 状态 `canceled`,司机任务同步取消 | P0 |
| CAN-010 | 履约中取消审批拒绝 | 订单 `cancel_fulfillment_pending` | 管理层拒绝 | 状态恢复为取消前状态(如 `picked_up` | P0 |
| CAN-011 | 取消留痕完整性 | 执行取消操作 | 查询审计日志 | 记录取消前状态、取消原因、操作人、操作时间 | P0 |
| CAN-012 | 取消后通知 | 订单被取消 | 相关人员查看提醒 | 收到取消通知 | P1 |
---
### 6.8 司机任务管理与履约
**完成度45-88% | 优先级P0高风险区域**
#### 未完成/风险项
- 司机任务的创建、分配与订单状态联动不完整(履约状态流转完成度仅 45%
- 司机接单、揽货、送达的业务约束不完整
- "提交前可撤回、提交后不可撤回"与图片必填约束未闭环
- COS/OSS 图片存储与附件管理未完全统一
#### 测试用例
| 编号 | 用例名称 | 前置条件 | 步骤 | 预期结果 | 优先级 |
|---|---|---|---|---|---|
| TASK-001 | 管理层创建任务 | 订单可履约、司机存在 | 填写任务并保存 | 返回任务 ID状态 `pending` | P0 |
| TASK-002 | 司机任务列表 | driver01 有任务 | driver01 查看列表 | 只显示本人任务 | P0 |
| TASK-003 | 任务详情脱敏 | 任务存在 | 司机查看详情 | 不显示客户敏感信息和财务字段 | P0 |
| TASK-004 | 接单成功 | 任务 `pending` | 司机接单 | 状态 `accepted`,记录接单时间 | P0 |
| TASK-005 | 重复接单 | 任务已 `accepted` | 再次接单 | 返回 `40005` | P0 |
| TASK-006 | 揽货成功 | 任务 `accepted` | 上传照片确认揽货 | 状态 `picked_up`,附件写入 | P0 |
| TASK-007 | 揽货无照片 | 任务 `accepted` | 不上传照片确认 | 返回 `40001` 或业务错误 | P0 |
| TASK-008 | 送达成功 | 任务 `picked_up` | 确认送达 | 状态 `delivered`,订单状态联动更新 | P0 |
| TASK-009 | 非法状态流转 | 任务 `pending` | 直接送达 | 返回 `40005` | P0 |
| TASK-010 | 司机越权操作 | driver01 操作 driver02 任务 | 接单/揽货/送达 | 返回 `40003` | P0 |
| TASK-011 | 揽货撤回 | 任务 `accepted` 已提交揽货 | 撤回揽货 | 提交前可撤回,提交后不可撤回 | P1 |
| TASK-012 | 任务与订单状态联动 | 订单 approved → 创建任务 | 任务从创建到送达 | 每步任务状态变化同步更新订单状态 | P0 |
| TASK-013 | 图片上传成功 | OSS 可用 | 上传揽货图片 | 附件记录写入,关联任务 ID | P0 |
| TASK-014 | 图片上传失败 | OSS 异常 | 上传揽货图片 | 返回明确错误,不更新任务状态 | P1 |
---
### 6.9 物流与 AI 辅助识别
**完成度88-97% | 优先级P1**
#### 未完成/风险项
- 物流轨迹对接快递100的完整实现未落地
- 物流超时提醒的"一次性提醒"策略未完全实现
- AI 图片识别链路不完整(人工确认界面、相似订单判断)
- 识别失败/置信度过低的人工兜底流程未闭环
#### 测试用例
| 编号 | 用例名称 | 前置条件 | 步骤 | 预期结果 | 优先级 |
|---|---|---|---|---|---|
| LOG-001 | 手动新增物流节点 | 订单存在 | 新增节点 | `logistics_trace` 写入 | P1 |
| LOG-002 | 物流轨迹查询 | 订单有节点 | 查询轨迹 | 按时间返回节点 | P1 |
| LOG-003 | 物流超时提醒 | 首节点后 48 小时无流转 | 执行提醒检查 | 生成一次提醒 | P0 |
| LOG-004 | 物流超时不重复提醒 | 已提醒 | 再次执行检查 | 不重复生成 | P0 |
| LOG-005 | 快递100对接 | 配置快递100凭证 | 查询物流轨迹 | 返回快递100节点数据 | P1 |
| AI-001 | OCR 识别成功 | 图片存在,凭证有效 | 发起识别 | 保存 raw_result、confidence、suggested_result | P1 |
| AI-002 | OCR 识别失败 | 模拟服务异常 | 发起识别 | 返回 `40009`,记录异常 | P1 |
| AI-003 | 人工修正 | 识别记录存在 | 提交 corrected_result | 保存修正结果,不覆盖原始结果 | P1 |
| AI-004 | 识别结果人工确认 | 识别出疑似订单 | 页面确认 | 不自动审批、不自动合并 | P1 |
| AI-005 | 置信度过低处理 | confidence 低于阈值 | 查看识别结果 | 标记为需人工确认,不可直接入库 | P1 |
---
### 6.10 提醒中心、欠款提醒、长时间未下单提醒
**完成度88-100% | 优先级P0**
#### 未完成/风险项
- 欠款提醒的起算规则未完全落地(按订单日期/对账日期/发货日期配置)
- 欠款提醒"提醒对象为业务员"的规则未完全验证
- 长时间未下单提醒的金额阈值和沉默周期配置未形成业务闭环
#### 测试用例
| 编号 | 用例名称 | 前置条件 | 步骤 | 预期结果 | 优先级 |
|---|---|---|---|---|---|
| ARR-001 | delivered 模式生成欠款 | 配置 `arrears_generate_mode=delivered` | 订单送达 | 生成欠款记录 | P0 |
| ARR-002 | shipped 模式生成欠款 | 配置 `arrears_generate_mode=shipped` | 订单发货 | 生成欠款记录 | P0 |
| ARR-003 | 未到节点不生成欠款 | 配置 delivered订单 shipped | 检查欠款 | 不生成 | P0 |
| ARR-004 | 结算关闭欠款 | 欠款 pending/overdue | 执行结算 | 状态 closed 或 paid记录关闭时间 | P0 |
| ARR-005 | 欠款超期提醒 | 欠款超过账期 | 执行提醒检查 | 生成业务员提醒 | P0 |
| ARR-006 | 沉默客户提醒 | 客户超过周期未下单且金额达阈值 | 执行检查 | 生成提醒 | P1 |
| ARR-007 | 沉默客户低金额不提醒 | 金额低于阈值 | 执行检查 | 不生成提醒 | P1 |
| ARR-008 | 提醒已读 | 提醒存在 | 标记已读 | 状态 read | P1 |
| ARR-009 | 欠款起算口径切换 | 配置起算口径为"对账日期" | 生成欠款 | 起算日期按对账日期计算 | P1 |
| ARR-010 | 提醒对象为业务员 | 客户归属业务员 A | 生成欠款提醒 | 提醒发送给业务员 A 而非泛化通知 | P0 |
| ARR-011 | 微信订阅消息通知 | 提醒生成 | 检查通知记录 | 写入微信订阅消息记录 | P1 |
---
### 6.11 业绩统计报表
**完成度95-100% | 优先级P1**
#### 未完成/风险项
- 报表口径统一仍有差异(按月/季/年、分类拆分、电商剔除)
- 报表导出能力可能仍是简化版本
- 报表图表与明细维度未完全实现
#### 测试用例
| 编号 | 用例名称 | 前置条件 | 步骤 | 预期结果 | 优先级 |
|---|---|---|---|---|---|
| REP-001 | 月度统计 | 多订单跨月份 | 查询月报 | 按月份汇总正确 | P1 |
| REP-002 | 季度统计 | 多订单跨季度 | 查询季报 | 按季度汇总正确 | P1 |
| REP-003 | 年度统计 | 多订单跨年份 | 查询年报 | 按年份汇总正确 | P1 |
| REP-004 | 分类统计 | 产品分类存在 | 查询报表 | 按分类金额汇总正确 | P1 |
| REP-005 | 固定提成统计 | 订单有 commission_amount | 查询报表 | 提成金额按订单固定值汇总 | P1 |
| REP-006 | 电商订单剔除 | 存在电商来源订单 | 查询报表 | 按规则剔除或可配置剔除 | P1 |
| REP-007 | 报表导出 | 查询条件存在 | 点击导出 | 返回 file_url文件内容与页面一致 | P1 |
| REP-008 | 报表金额与数据库核对 | 已知订单数据 | 查询报表后人工核对 | 报表金额与数据库手工核对一致 | P0 |
---
### 6.12 配置管理
**完成度92-95% | 优先级P1**
#### 未完成/风险项
- 系统配置项仅覆盖基础字段,未形成统一配置中心体验
- 敏感配置的安全存储未完全体现
#### 测试用例
| 编号 | 用例名称 | 前置条件 | 步骤 | 预期结果 | 优先级 |
|---|---|---|---|---|---|
| CFG-001 | 查询配置 | 配置存在 | 查询 config_key | 返回配置值 | P1 |
| CFG-002 | 更新配置 | 管理员登录 | 更新欠款生成模式 | 保存成功,写审计日志 | P1 |
| CFG-003 | 非管理员更新配置 | 业务员登录 | 更新配置 | 返回 `40003` | P0 |
| CFG-004 | 物流超时天数配置 | 管理员 | 修改超时天数 | 提醒检查按新天数执行 | P1 |
| CFG-005 | 沉默客户周期配置 | 管理员 | 修改沉默周期 | 提醒检查按新周期执行 | P1 |
| CFG-006 | 金额阈值配置 | 管理员 | 修改金额阈值 | 低于阈值的客户不触发提醒 | P1 |
| CFG-007 | 配置即时生效 | 修改配置 | 不重启服务 | 新配置立即生效 | P1 |
---
### 6.13 审计日志
**完成度88-90% | 优先级P1**
#### 未完成/风险项
- 审计日志写入覆盖面不够全面物流任务、提醒、导入、导出、AI 修正等未完全覆盖)
- 审计日志查询和前后值展示未完整落地
#### 测试用例
| 编号 | 用例名称 | 前置条件 | 步骤 | 预期结果 | 优先级 |
|---|---|---|---|---|---|
| AUD-001 | 订单创建审计 | 创建订单 | 查询审计日志 | 有 create order 记录 | P0 |
| AUD-002 | 审批审计 | 审批订单 | 查询审计日志 | 有 approve 记录 | P0 |
| AUD-003 | 取消审计 | 取消订单 | 查询审计日志 | 有 cancel 记录,含取消原因 | P0 |
| AUD-004 | 司机操作审计 | 接单/揽货/送达 | 查询审计日志 | 有对应记录 | P0 |
| AUD-005 | OSS 上传审计 | 上传附件 | 查询审计日志 | 有上传记录或文件记录 | P1 |
| AUD-006 | 配置变更审计 | 修改系统配置 | 查询审计日志 | 有配置变更前后值记录 | P1 |
| AUD-007 | 审计日志前后值对比 | 修改订单 | 查看审计详情 | 展示修改前后的值差异 | P2 |
| AUD-008 | 审计日志筛选 | 多条日志 | 按操作类型/时间/操作人筛选 | 返回符合条件数据 | P1 |
---
### 6.14 文件与 OSS
**完成度90% | 优先级P1**
#### 测试用例
| 编号 | 用例名称 | 前置条件 | 步骤 | 预期结果 | 优先级 |
|---|---|---|---|---|---|
| FILE-001 | 获取上传凭证 | 用户登录 | 请求上传凭证 | 返回 upload_url、file_url、expire_at | P1 |
| FILE-002 | 图片上传成功 | OSS 可用 | 上传图片并保存附件 | `file_attachment` 写入 image 元数据 | P1 |
| FILE-003 | 视频上传成功 | OSS 可用 | 上传视频并保存附件 | `file_attachment` 写入 video 元数据 | P2 |
| FILE-004 | 文件过大 | 设置上传限制 | 上传超限文件 | 返回 `40008` 或明确错误 | P1 |
| FILE-005 | OSS 失败 | 模拟 OSS 异常 | 上传 | 返回 `40008`,记录日志 | P1 |
| FILE-006 | 附件关联 | 任务存在 | 上传任务附件 | 附件 biz_type/biz_id 正确 | P1 |
---
## 7. 端到端流程测试
端到端测试覆盖完整的跨端业务流程,验证数据在多端之间的正确流转。
| 编号 | 流程名称 | 涉及端 | 测试步骤 | 预期结果 | 优先级 |
|---|---|---|---|---|---|
| E2E-001 | 业务员完整录单 | web-sales | 登录→创建订单(含新客户)→提交审核 | 订单进入 `pending_approve`,新客户自动入库 | P0 |
| E2E-002 | 管理层审批通过 | mini-manager | 登录→查看待审批→查看利润→通过 | 订单进入 `approved`,审计记录生成 | P0 |
| E2E-003 | 确认下发工厂 | mini-manager | 生成文本→复制→确认下发 | 订单进入 `pending_factory`,下发日志生成 | P0 |
| E2E-004 | 创建司机任务 | web-admin / mini-manager | 创建并分配任务 | 任务生成,司机端可见 | P0 |
| E2E-005 | 司机履约完成 | mini-driver | 接单→上传照片揽货→确认送达 | 任务 `delivered`,订单状态联动更新 | P0 |
| E2E-006 | 欠款生成 | 后端/页面 | 送达后检查欠款 | 根据配置模式生成欠款记录 | P0 |
| E2E-007 | 报表查看导出 | web-admin | 查询报表→核对→导出 | 页面和文件数据一致 | P1 |
| E2E-008 | 订单取消全流程(草稿) | web-sales | 创建草稿→取消 | 直接取消成功 | P0 |
| E2E-009 | 订单取消全流程(已通过) | web-sales + mini-manager | 提交取消申请→管理层审批→确认取消 | 状态经过 `cancel_pending``canceled` | P0 |
| E2E-010 | 订单取消全流程(履约中) | web-sales + mini-manager + mini-driver | 提交取消申请→管理层审批→确认取消 | 状态经过 `cancel_fulfillment_pending``canceled`,司机任务同步取消 | P0 |
| E2E-011 | 审批退回重新提交 | mini-manager + web-sales | 管理层退回→业务员修改→重新提交 | 退回通知到达,订单重新进入审核 | P0 |
| E2E-012 | 提醒中心完整流程 | web-sales / web-admin | 配置提醒规则→触发提醒→查看→标记已读 | 提醒生成、推送、展示、已读全链路通过 | P1 |
---
## 8. 权限与安全测试
### 8.1 角色权限矩阵验证
**优先级P0**
| 编号 | 测试场景 | 操作角色 | 操作内容 | 预期结果 |
|---|---|---|---|---|
| PERM-001 | 业务员查看他人订单 | sales01 | 查看 sales02 的订单详情 | 拒绝40003/40004 |
| PERM-002 | 业务员查看财务字段 | sales01 | 查看本人订单详情 | 不返回成本、利润、回扣 |
| PERM-003 | 司机查看财务字段 | driver01 | 查看任务详情 | 不返回客户敏感信息和财务字段 |
| PERM-004 | 司机查看他人任务 | driver01 | 查看 driver02 的任务 | 拒绝 |
| PERM-005 | 管理层查看完整财务 | manager01 | 查看审批详情 | 返回成本、利润、利润率、计算过程 |
| PERM-006 | 业务员访问系统管理 | sales01 | 请求用户/角色管理接口 | 拒绝40003 |
| PERM-007 | 司机访问系统管理 | driver01 | 请求配置/审计接口 | 拒绝40003 |
| PERM-008 | 管理层访问系统管理 | manager01 | 请求用户管理接口 | 按角色权限返回(可能受限) |
| PERM-009 | 管理员全量权限 | admin01 | 访问所有接口 | 全部允许 |
| PERM-010 | 秘书端 AI 操作 | secretary01 | 发起 AI 识别、人工修正 | 允许 AI 相关操作,不允许订单审批 |
### 8.2 数据隔离验证
| 编号 | 测试场景 | 验证内容 | 预期结果 |
|---|---|---|---|
| ISO-001 | 业务员订单隔离 | sales01 查询订单列表 | 仅返回本人创建的订单 |
| ISO-002 | 业务员客户隔离 | sales01 查询客户列表 | 仅返回归属本人的客户 |
| ISO-003 | 司机任务隔离 | driver01 查询任务列表 | 仅返回分配给本人的任务 |
| ISO-004 | 管理层查看全部订单 | manager01 查询订单列表 | 返回所有业务员的订单 |
| ISO-005 | 管理员查看全部数据 | admin01 查询各列表 | 返回全量数据 |
---
## 9. 状态机验证矩阵
**优先级P0**
### 9.1 订单状态流转矩阵
| 当前状态 | 允许的目标状态 | 触发动作 | 不允许的目标状态 |
|---|---|---|---|
| `draft` | `pending_approve` | 业务员提交审核 | `approved`, `canceled`(直接取消) |
| `draft` | `canceled` | 业务员直接取消 | — |
| `pending_approve` | `approved` | 管理层审批通过 | `draft` |
| `pending_approve` | `rejected` | 管理层审批退回 | `draft` |
| `pending_approve` | `canceled` | 业务员直接取消 | — |
| `approved` | `cancel_pending` | 业务员申请取消 | `draft`, `rejected` |
| `approved` | `pending_factory` | 管理层确认下发 | `canceled`(直接) |
| `pending_factory` | `pending_driver_accept` | 工厂确认接收 | `draft` |
| `pending_driver_accept` | `accepted` | 司机接单 | `draft`, `approved` |
| `accepted` | `picked_up` | 司机揽货(含照片) | `pending_driver_accept` |
| `picked_up` | `delivered` | 司机确认送达 | `accepted` |
| `picked_up` | `cancel_fulfillment_pending` | 业务员申请取消 | — |
| `cancel_pending` | `canceled` | 管理层同意取消 | — |
| `cancel_pending` | 恢复原状态 | 管理层拒绝取消 | — |
| `cancel_fulfillment_pending` | `canceled` | 管理层同意取消 | — |
| `cancel_fulfillment_pending` | 恢复原状态 | 管理层拒绝取消 | — |
### 9.2 司机任务状态流转矩阵
| 当前状态 | 允许的目标状态 | 触发动作 |
|---|---|---|
| `pending` | `accepted` | 司机接单 |
| `accepted` | `picked_up` | 司机上传照片并确认揽货 |
| `picked_up` | `delivered` | 司机确认送达 |
### 9.3 测试方法
对每个状态流转:
1. 验证合法流转成功
2. 验证非法流转被拒绝(返回 `40005`
3. 验证状态变更后相关通知/审计/联动正确触发
4. 验证并发状态变更的幂等性
---
## 10. 配置驱动规则验证
**优先级P1**
| 编号 | 配置项 | 测试方法 | 预期效果 |
|---|---|---|---|
| CFG-R-001 | `logistics_timeout_days` (物流超时天数) | 修改配置后检查提醒触发 | 按新天数判断超时 |
| CFG-R-002 | `inactive_customer_days` (沉默客户天数) | 修改配置后检查提醒触发 | 按新天数判断沉默 |
| CFG-R-003 | `arrears_generate_mode` (欠款生成模式) | 切换 shipped/delivered | 欠款在对应节点生成 |
| CFG-R-004 | `arrears_reminder_start_type` (欠款起算口径) | 切换订单日期/对账日期/发货日期 | 欠款起算日期按配置计算 |
| CFG-R-005 | `inactive_order_amount_threshold` (金额阈值) | 设置阈值后检查提醒 | 低于阈值不触发提醒 |
| CFG-R-006 | `report_category_mapping` (报表分类映射) | 修改映射后查询报表 | 分类按新映射统计 |
| CFG-R-007 | `cancel_allowed_statuses` (可取消状态) | 修改可取消状态列表 | 仅配置的状态可取消 |
---
## 11. 外部集成测试
**优先级P1**
| 编号 | 集成点 | 测试方法 | 预期结果 |
|---|---|---|---|
| EXT-001 | 快递100物流查询 | 调用物流查询接口 | 返回物流节点数据,异常时降级处理 |
| EXT-002 | AI OCR识别 | 上传图片调用识别 | 返回识别结果、置信度,异常时记录日志 |
| EXT-003 | OSS文件上传 | 上传图片/视频 | 返回文件URL附件记录写入 |
| EXT-004 | OSS上传失败 | 模拟OSS异常 | 返回错误码,记录日志,不影响主流程 |
| EXT-005 | 微信订阅消息 | 触发提醒通知 | 写入消息发送记录 |
| EXT-006 | 微信 bind-openid | 绑定微信用户 | openid 关联到系统用户 |
---
## 12. 回归测试清单
每次发布前必须执行以下回归测试:
| 类别 | 回归项 |
|---|---|
| 认证 | 登录、退出、token 过期、角色不匹配 |
| 系统管理 | 用户/角色/菜单 CRUD、授权刷新 |
| 订单流程 | 创建→提交→审批→下发→接单→揽货→送达 |
| 取消流程 | 草稿直接取消、待审核直接取消、已通过申请取消、履约中申请取消 |
| 司机任务 | 创建→接单→揽货→送达 |
| 权限越权 | 业务员越权 ×2、司机越权 ×2 |
| 文件上传 | 图片上传、视频上传 |
| AI 识别 | OCR 成功、OCR 失败、人工修正 |
| 欠款 | shipped 模式、delivered 模式 |
| 报表 | 统计核对、导出 |
| 审计 | 关键操作日志查询 |
---
## 13. 风险分析
| 风险项 | 风险等级 | 影响范围 | 应对策略 |
|---|---|---|---|
| 取消流程特殊审批逻辑完成度仅 35% | **高** | 订单主流程 | 优先测试,覆盖全部取消分支 |
| 履约状态流转完成度仅 45% | **高** | 司机履约全链路 | 重点测试状态联动与异常分支 |
| 秘书端完成度仅 55% | **中** | AI 识别辅助流程 | 梳理秘书端专属流程并补齐 |
| 权限字段隔离不完整 | **高** | 数据安全 | 多角色对比测试,逐字段验证 |
| 外部服务快递100/AI/OSS集成不完整 | **中** | 物流/AI/文件功能 | 使用模拟环境验证降级逻辑 |
| 配置驱动规则未完全落地 | **中** | 提醒/欠款/报表 | 配置变更后逐一验证联动效果 |
| 订单状态机约束不严密 | **高** | 数据一致性 | 按状态矩阵逐项验证非法流转 |
| 报表统计口径差异 | **低** | 数据准确性 | 手工核对数据库与报表数据 |
---
## 14. 验收标准
| 类型 | 标准 |
|---|---|
| 阻断缺陷 | 0 个 |
| 严重缺陷 | 0 个 |
| 一般缺陷 | 已确认不影响上线或有明确修复计划 |
| P0 用例通过率 | 100% |
| P1 用例通过率 | ≥ 95% |
| 核心流程端到端用例 | 100% 通过 |
| 权限与数据安全用例 | 100% 通过 |
| 状态机合法/非法流转用例 | 100% 通过 |
| 报表金额核对 | 与数据库手工核对一致 |
| 审计日志 | 关键操作 100% 可追溯 |
---
## 15. 测试用例统计
| 模块 | 用例数 | P0 | P1 | P2 |
|---|---:|---:|---:|---:|
| 登录鉴权与权限 | 12 | 8 | 4 | 0 |
| 系统用户/角色/菜单管理 | 16 | 8 | 8 | 0 |
| 客户管理 | 10 | 4 | 4 | 2 |
| 产品与分类管理 | 8 | 2 | 6 | 0 |
| 工厂/供应商与下发文本 | 7 | 3 | 3 | 1 |
| 订单录入/提交/审批 | 22 | 14 | 8 | 0 |
| 订单取消流程 | 12 | 10 | 2 | 0 |
| 司机任务与履约 | 14 | 10 | 3 | 1 |
| 物流与 AI 识别 | 10 | 2 | 8 | 0 |
| 提醒中心与欠款 | 11 | 5 | 6 | 0 |
| 业绩统计报表 | 8 | 1 | 7 | 0 |
| 配置管理 | 7 | 1 | 6 | 0 |
| 审计日志 | 8 | 3 | 4 | 1 |
| 文件与 OSS | 6 | 0 | 5 | 1 |
| 端到端流程 | 12 | 10 | 2 | 0 |
| 权限与安全 | 15 | 15 | 0 | 0 |
| 状态机验证 | 按矩阵展开 | 全量 | — | — |
| 配置驱动规则 | 7 | 0 | 7 | 0 |
| 外部集成 | 6 | 0 | 6 | 0 |
| **合计** | **~191** | **~96** | **~87** | **~6** |
> 注:状态机验证用例数取决于实际状态组合数量,按矩阵逐项展开后约 30-40 条子用例。
---
## 16. 测试执行计划
| 阶段 | 内容 | 预计周期 |
|---|---|---|
| 第一轮 | P0 用例全量执行(订单主流程、取消流程、司机履约、权限越权、状态机) | 3 天 |
| 第二轮 | P1 用例全量执行(客户/产品/工厂管理、报表、配置、审计、物流/AI | 2 天 |
| 第三轮 | P2 用例 + 端到端流程 + 配置驱动规则 + 外部集成 | 2 天 |
| 回归测试 | 按回归清单全量回归 | 1 天 |
| 验收确认 | 对照验收标准出具测试报告 | 1 天 |
---
## 17. 附录
### 17.1 订单状态全集
```
draft草稿
→ pending_approve待审核
→ approved已通过
→ pending_factory待下发工厂
→ pending_driver_accept待司机接单
→ accepted已接单
→ picked_up已揽货
→ delivered已送达
→ completed已完成
→ settled已结算
→ rejected已退回
→ [业务员修改后重新提交]
→ canceled已取消
特殊取消路径:
approved → cancel_pending → canceled / 恢复原状态
picked_up → cancel_fulfillment_pending → canceled / 恢复原状态
```
### 17.2 错误码参考
| 错误码 | 含义 |
|---|---|
| `40001` | 参数校验失败 |
| `40002` | 认证失败无token/token过期 |
| `40003` | 权限不足 |
| `40004` | 资源不存在或无权访问 |
| `40005` | 状态不允许该操作 |
| `40006` | 数据重复(唯一约束冲突) |
| `40007` | 业务约束不满足 |
| `40008` | 文件上传失败 |
| `40009` | AI 识别服务异常 |
### 17.3 利润计算公式
```
利润 = 销售金额 - 成本金额 - 回扣 - 运费 - 税费 - 其他费用
利润率 = 利润 ÷ 销售金额 × 100%
```