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

302 lines
9.9 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.

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