dingdanquanliucheng/TEST_SUMMARY.md
2026-06-14 16:20:04 +08:00

9.9 KiB
Raw Blame History

订单全流程管理系统 - 测试方案汇总

📦 测试文件清单

后端测试文件

文件路径 测试模块 用例数 优先级分布
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

🔍 已知问题与限制

测试环境限制

  1. 数据库: 使用 SQLite 内存数据库,与 MySQL 可能存在差异
  2. 外部服务: 使用 mock 模式,不测试真实外部服务
  3. 文件上传: 模拟上传,不测试真实 OSS
  4. 微信通知: 模拟发送,不测试真实微信推送

待完善功能

  1. 取消流程特殊审批逻辑(完成度 35%
  2. 履约状态流转(完成度 45%
  3. 秘书端功能(完成度 55%

📞 联系方式

如有测试相关问题,请联系开发团队。


文档版本: v1.0 最后更新: 2026-06-10 维护人: 开发团队