订单全流程管理系统 - 测试方案汇总
📦 测试文件清单
后端测试文件
| 文件路径 |
测试模块 |
用例数 |
优先级分布 |
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. 安装依赖
# 后端依赖
cd backend
pip install -r requirements.txt
pip install pytest pytest-asyncio httpx pytest-cov
# 前端依赖
cd ../e2e
npm install
npx playwright install chromium
2. 运行测试
# 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") |
使用示例
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 |
🔍 已知问题与限制
测试环境限制
- 数据库: 使用 SQLite 内存数据库,与 MySQL 可能存在差异
- 外部服务: 使用 mock 模式,不测试真实外部服务
- 文件上传: 模拟上传,不测试真实 OSS
- 微信通知: 模拟发送,不测试真实微信推送
待完善功能
- 取消流程特殊审批逻辑(完成度 35%)
- 履约状态流转(完成度 45%)
- 秘书端功能(完成度 55%)
📞 联系方式
如有测试相关问题,请联系开发团队。
文档版本: v1.0
最后更新: 2026-06-10
维护人: 开发团队