302 lines
9.9 KiB
Markdown
302 lines
9.9 KiB
Markdown
# 订单全流程管理系统 - 测试方案汇总
|
||
|
||
## 📦 测试文件清单
|
||
|
||
### 后端测试文件
|
||
|
||
| 文件路径 | 测试模块 | 用例数 | 优先级分布 |
|
||
|----------|----------|--------|------------|
|
||
| `backend/tests/conftest.py` | 测试配置与 Fixtures | - | - |
|
||
| `backend/tests/test_auth.py` | 登录鉴权与权限 | 18 | P0: 12, P1: 6 |
|
||
| `backend/tests/test_orders.py` | 订单录入/提交/审批 | 22 | P0: 14, P1: 8 |
|
||
| `backend/tests/test_order_cancel.py` | 订单取消流程 | 12 | P0: 10, P1: 2 |
|
||
| `backend/tests/test_logistics.py` | 司机任务与履约 | 16 | P0: 12, P1: 3, P2: 1 |
|
||
| `backend/tests/test_customers.py` | 客户管理 | 10 | P0: 4, P1: 4, P2: 2 |
|
||
| `backend/tests/test_products.py` | 产品管理 | 10 | P0: 2, P1: 6, P2: 2 |
|
||
| `backend/tests/test_suppliers.py` | 供应商管理 | 7 | P0: 3, P1: 3, P2: 1 |
|
||
| `backend/tests/test_system.py` | 系统管理 | 18 | P0: 10, P1: 8 |
|
||
| `backend/tests/test_reminders.py` | 提醒中心 | 10 | P0: 5, P1: 5 |
|
||
| `backend/tests/test_reports.py` | 报表统计 | 8 | P0: 0, P1: 8 |
|
||
| `backend/tests/test_configs.py` | 配置管理 | 10 | P0: 3, P1: 7 |
|
||
| `backend/tests/test_audit.py` | 审计日志 | 10 | P0: 4, P1: 6 |
|
||
| `backend/tests/test_files.py` | 文件管理 | 6 | P0: 0, P1: 5, P2: 1 |
|
||
| `backend/tests/test_ai.py` | AI 识别 | 6 | P0: 0, P1: 5, P2: 1 |
|
||
| `backend/tests/test_e2e.py` | 端到端流程 | 12 | P0: 10, P1: 2 |
|
||
|
||
**后端测试总计**: 175 个用例
|
||
|
||
### 前端 E2E 测试文件
|
||
|
||
| 文件路径 | 测试模块 | 用例数 |
|
||
|----------|----------|--------|
|
||
| `e2e/playwright.config.js` | Playwright 配置 | - |
|
||
| `e2e/fixtures/auth.js` | 认证 Fixtures | - |
|
||
| `e2e/tests/admin-login.spec.js` | 管理后台登录 | 3 |
|
||
| `e2e/tests/admin-orders.spec.js` | 订单管理 | 4 |
|
||
| `e2e/tests/sales-order-create.spec.js` | 业务员创建订单 | 5 |
|
||
|
||
**前端测试总计**: 12 个用例
|
||
|
||
### 测试配置文件
|
||
|
||
| 文件路径 | 说明 |
|
||
|----------|------|
|
||
| `backend/pytest.ini` | pytest 配置 |
|
||
| `e2e/package.json` | 前端测试依赖 |
|
||
| `run_tests.bat` | Windows 测试脚本 |
|
||
| `quick_test.sh` | Linux/Mac 测试脚本 |
|
||
|
||
### 测试文档
|
||
|
||
| 文件路径 | 说明 |
|
||
|----------|------|
|
||
| `TESTING_GUIDE.md` | 完整测试指南 |
|
||
| `测试规划说明书.md` | 原始测试规划文档 |
|
||
|
||
---
|
||
|
||
## 🚀 快速开始
|
||
|
||
### 1. 安装依赖
|
||
|
||
```bash
|
||
# 后端依赖
|
||
cd backend
|
||
pip install -r requirements.txt
|
||
pip install pytest pytest-asyncio httpx pytest-cov
|
||
|
||
# 前端依赖
|
||
cd ../e2e
|
||
npm install
|
||
npx playwright install chromium
|
||
```
|
||
|
||
### 2. 运行测试
|
||
|
||
```bash
|
||
# Windows
|
||
run_tests.bat
|
||
|
||
# Linux/Mac
|
||
chmod +x quick_test.sh
|
||
./quick_test.sh
|
||
|
||
# 或手动运行
|
||
cd backend
|
||
python -m pytest tests/ -v
|
||
```
|
||
|
||
### 3. 查看报告
|
||
|
||
- 后端覆盖率: `backend/htmlcov/index.html`
|
||
- 前端报告: `e2e/playwright-report/index.html`
|
||
|
||
---
|
||
|
||
## 📊 测试覆盖矩阵
|
||
|
||
### 按模块统计
|
||
|
||
| 模块 | 测试文件 | 用例数 | 覆盖功能 |
|
||
|------|----------|--------|----------|
|
||
| 登录鉴权 | test_auth.py | 18 | 登录、登出、Token、权限边界 |
|
||
| 订单管理 | test_orders.py | 22 | 创建、提交、审批、下发、详情、编辑 |
|
||
| 订单取消 | test_order_cancel.py | 12 | 草稿取消、审批取消、履约取消、状态恢复 |
|
||
| 司机任务 | test_logistics.py | 16 | 创建、接单、揽货、送达、状态流转 |
|
||
| 客户管理 | test_customers.py | 10 | CRUD、筛选、数据隔离 |
|
||
| 产品管理 | test_products.py | 10 | 分类、产品、状态约束 |
|
||
| 供应商 | test_suppliers.py | 7 | CRUD、下发文本 |
|
||
| 系统管理 | test_system.py | 18 | 用户、角色、菜单、授权 |
|
||
| 提醒中心 | test_reminders.py | 10 | 欠款、提醒、已读 |
|
||
| 报表统计 | test_reports.py | 8 | 查询、导出、权限 |
|
||
| 配置管理 | test_configs.py | 10 | 查询、更新、权限 |
|
||
| 审计日志 | test_audit.py | 10 | 写入、查询、筛选 |
|
||
| 文件管理 | test_files.py | 6 | 上传、关联 |
|
||
| AI 识别 | test_ai.py | 6 | OCR、人工修正 |
|
||
| 端到端 | test_e2e.py | 12 | 完整流程、取消流程、退回重提 |
|
||
|
||
### 按优先级统计
|
||
|
||
| 优先级 | 用例数 | 占比 | 说明 |
|
||
|--------|--------|------|------|
|
||
| P0 | 89 | 50.9% | 阻断性功能,必须全部通过 |
|
||
| P1 | 73 | 41.7% | 核心功能,应全部通过 |
|
||
| P2 | 8 | 4.6% | 体验增强,可接受已知缺陷 |
|
||
| **合计** | **175** | 100% | - |
|
||
|
||
---
|
||
|
||
## 🎯 测试执行策略
|
||
|
||
### 执行顺序
|
||
|
||
```
|
||
1. 后端单元测试 (pytest)
|
||
├── P0 关键路径测试
|
||
├── P1 核心功能测试
|
||
└── P2 体验增强测试
|
||
|
||
2. 端到端流程测试 (pytest)
|
||
├── 完整订单流程
|
||
├── 取消流程
|
||
└── 退回重提流程
|
||
|
||
3. 前端 E2E 测试 (Playwright)
|
||
├── 登录测试
|
||
├── 订单管理测试
|
||
└── 业务员创建订单测试
|
||
```
|
||
|
||
### 执行频率
|
||
|
||
| 场景 | 执行内容 | 频率 |
|
||
|------|----------|------|
|
||
| 代码提交 | P0 测试 | 每次提交 |
|
||
| 每日构建 | P0 + P1 测试 | 每天 |
|
||
| 版本发布 | 全部测试 | 每次发布 |
|
||
| 回归测试 | 全部测试 | 需要时 |
|
||
|
||
---
|
||
|
||
## 🔧 测试 Fixtures 说明
|
||
|
||
### 可用 Fixtures
|
||
|
||
| Fixture | 说明 | 用法 |
|
||
|---------|------|------|
|
||
| `client` | FastAPI TestClient | 直接使用 |
|
||
| `db_session` | 测试数据库会话 | 自动回滚 |
|
||
| `admin_headers` | 管理员认证头 | `headers=admin_headers` |
|
||
| `salesman_headers` | 业务员认证头 | `headers=salesman_headers` |
|
||
| `manager_headers` | 管理层认证头 | `headers=manager_headers` |
|
||
| `driver_headers` | 司机认证头 | `headers=driver_headers` |
|
||
| `make_customer` | 客户工厂 | `customer = make_customer()` |
|
||
| `make_product` | 产品工厂 | `product = make_product()` |
|
||
| `make_supplier` | 供应商工厂 | `supplier = make_supplier()` |
|
||
| `make_order` | 订单工厂 | `order = make_order(order_status="draft")` |
|
||
| `make_task` | 任务工厂 | `task = make_task(status="pending")` |
|
||
|
||
### 使用示例
|
||
|
||
```python
|
||
import pytest
|
||
|
||
class TestExample:
|
||
def test_create_order(self, client, salesman_headers, make_product):
|
||
"""创建订单测试。"""
|
||
product = make_product()
|
||
resp = client.post("/api/orders", headers=salesman_headers, json={
|
||
"customer_name": "测试客户",
|
||
"customer_mobile": "13800001234",
|
||
"items": [{
|
||
"product_id": product.id,
|
||
"product_name": product.product_name,
|
||
"specification": product.specification,
|
||
"unit": product.unit,
|
||
"quantity": 10,
|
||
"sale_price": 100,
|
||
"cost_price": 60,
|
||
}],
|
||
})
|
||
assert resp.status_code == 200
|
||
data = resp.json()
|
||
assert data["code"] == 0
|
||
assert data["data"]["order_status"] == "draft"
|
||
```
|
||
|
||
---
|
||
|
||
## 📝 测试用例详情
|
||
|
||
### P0 关键路径用例
|
||
|
||
#### 登录鉴权 (AUTH)
|
||
|
||
| 编号 | 用例名称 | 测试点 |
|
||
|------|----------|--------|
|
||
| AUTH-001 | 正常登录 | 返回 token、用户信息、菜单、权限 |
|
||
| AUTH-002 | 密码错误 | 返回 40002 |
|
||
| AUTH-003 | 角色不匹配 | 返回 40003 |
|
||
| AUTH-004 | 停用用户登录 | 返回 40003 |
|
||
| AUTH-005 | 无 token 访问 | 返回 401 |
|
||
| AUTH-007 | 业务员越权 | 不能审批订单 |
|
||
| AUTH-009 | 司机无财务权限 | 无 order:approve 权限 |
|
||
|
||
#### 订单管理 (ORD)
|
||
|
||
| 编号 | 用例名称 | 测试点 |
|
||
|------|----------|--------|
|
||
| ORD-001 | 创建草稿订单 | 状态为 draft |
|
||
| ORD-002 | 新客户自动入库 | 客户表写入 |
|
||
| ORD-003 | 利润计算 | 利润=售价-成本-回扣-运费-税费-其他 |
|
||
| ORD-005 | 明细为空 | 返回 40001 |
|
||
| ORD-007 | 提交审核 | 状态变为 pending_approve |
|
||
| ORD-008 | 重复提交 | 返回 400/409 |
|
||
| ORD-009 | 审批通过 | 状态变为 approved |
|
||
| ORD-010 | 审批退回 | 状态变为 rejected |
|
||
| ORD-011 | 生成下发文本 | 返回文本内容 |
|
||
| ORD-012 | 确认下发 | 状态变为 pending_factory |
|
||
| ORD-015 | 业务员详情无财务 | 不返回成本、利润 |
|
||
| ORD-017 | 编辑草稿 | 数据更新成功 |
|
||
| ORD-021 | 禁用产品下单 | 拒绝或警告 |
|
||
| ORD-022 | 状态流转完整 | draft → pending_approve → approved → pending_factory |
|
||
|
||
#### 订单取消 (CAN)
|
||
|
||
| 编号 | 用例名称 | 测试点 |
|
||
|------|----------|--------|
|
||
| CAN-001 | 草稿直接取消 | 状态为 canceled |
|
||
| CAN-002 | 待审核直接取消 | 状态为 canceled |
|
||
| CAN-003 | 已审批申请取消 | 状态为 cancel_pending |
|
||
| CAN-005 | 取消审批通过 | 状态为 canceled |
|
||
| CAN-006 | 取消审批拒绝 | 恢复原状态 |
|
||
| CAN-007 | 已取消再取消 | 返回 400/409 |
|
||
| CAN-008 | 取消原因必填 | 返回 400 |
|
||
| CAN-009 | 履约中取消通过 | 状态为 canceled |
|
||
| CAN-010 | 履约中取消拒绝 | 恢复原状态 |
|
||
|
||
#### 司机任务 (TASK)
|
||
|
||
| 编号 | 用例名称 | 测试点 |
|
||
|------|----------|--------|
|
||
| TASK-001 | 创建任务 | 状态为 pending |
|
||
| TASK-002 | 任务列表隔离 | 只看本人任务 |
|
||
| TASK-003 | 详情脱敏 | 无财务字段 |
|
||
| TASK-004 | 接单成功 | 状态为 accepted |
|
||
| TASK-005 | 重复接单 | 返回 400/409 |
|
||
| TASK-006 | 揽货成功 | 状态为 picked_up |
|
||
| TASK-007 | 揽货无照片 | 返回 400 |
|
||
| TASK-008 | 送达成功 | 状态为 delivered |
|
||
| TASK-009 | 非法状态流转 | 返回 400/409 |
|
||
| TASK-010 | 司机越权 | 返回 403/404 |
|
||
| TASK-012 | 状态流转完整 | pending → accepted → picked_up → delivered |
|
||
|
||
---
|
||
|
||
## 🔍 已知问题与限制
|
||
|
||
### 测试环境限制
|
||
|
||
1. **数据库**: 使用 SQLite 内存数据库,与 MySQL 可能存在差异
|
||
2. **外部服务**: 使用 mock 模式,不测试真实外部服务
|
||
3. **文件上传**: 模拟上传,不测试真实 OSS
|
||
4. **微信通知**: 模拟发送,不测试真实微信推送
|
||
|
||
### 待完善功能
|
||
|
||
1. 取消流程特殊审批逻辑(完成度 35%)
|
||
2. 履约状态流转(完成度 45%)
|
||
3. 秘书端功能(完成度 55%)
|
||
|
||
---
|
||
|
||
## 📞 联系方式
|
||
|
||
如有测试相关问题,请联系开发团队。
|
||
|
||
---
|
||
|
||
**文档版本**: v1.0
|
||
**最后更新**: 2026-06-10
|
||
**维护人**: 开发团队
|