# 订单全流程管理系统 - 测试方案汇总 ## 📦 测试文件清单 ### 后端测试文件 | 文件路径 | 测试模块 | 用例数 | 优先级分布 | |----------|----------|--------|------------| | `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 **维护人**: 开发团队