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

380 lines
10 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.

# 测试修复计划
## 📊 当前测试状态
| 指标 | 数量 |
|------|------|
| 总测试数 | 155 |
| 通过 | 107 ✅ |
| 失败 | 48 ❌ |
| 通过率 | 69.0% |
---
## 🔍 失败测试分类分析
### 第一类API 路径不匹配25 个)
**问题描述**:测试中使用的 API 路径与实际路由不一致
| 测试文件 | 失败数 | 实际路径 | 测试路径 | 修复方式 |
|----------|--------|----------|----------|----------|
| test_customers.py | 7 | `/api/customers` | 正确 | 检查权限配置 |
| test_products.py | 5 | `/api/products`, `/api/product-categories` | `/api/products/categories` | 修正路径 |
| test_configs.py | 4 | `/api/configs/{key}` | `/api/configs?key=xxx` | 修正路径 |
| test_reports.py | 7 | `/api/reports/performance` | 正确 | 检查权限配置 |
| test_system.py | 3 | `/api/system/*` | 正确 | 检查权限配置 |
### 第二类权限配置问题12 个)
**问题描述**:测试用户的权限码未正确配置或接口权限检查不匹配
| 测试文件 | 失败数 | 问题原因 |
|----------|--------|----------|
| test_audit.py | 2 | 审计日志接口权限码未配置 |
| test_configs.py | 2 | 配置接口权限码未配置 |
| test_logistics.py | 5 | 物流任务接口权限码未配置 |
| test_order_cancel.py | 3 | 取消审批接口权限码未配置 |
### 第三类接口实现问题8 个)
**问题描述**:接口未完全实现或返回格式不匹配
| 测试文件 | 失败数 | 问题原因 |
|----------|--------|----------|
| test_logistics.py | 3 | 司机任务接口实现问题 |
| test_order_cancel.py | 3 | 取消流程状态恢复逻辑问题 |
| test_e2e.py | 2 | 端到端流程接口串联问题 |
### 第四类数据模型问题3 个)
**问题描述**:测试中的数据字段与实际模型不匹配
| 测试文件 | 失败数 | 问题原因 |
|----------|--------|----------|
| test_orders.py | 1 | 数量为 0 的校验未实现 |
| test_auth.py | 1 | 系统用户接口路径问题 |
| test_files.py | 1 | 文件上传接口路径问题 |
---
## 📋 修复计划
### 阶段一:修复 API 路径问题(预计 1 小时)
#### 1.1 修复 test_products.py
**问题**:分类接口路径错误
- 测试路径:`/api/products/categories`
- 实际路径:`/api/product-categories`
**修复方案**
```python
# 修改前
resp = client.post("/api/products/categories", headers=admin_headers, json={...})
# 修改后
resp = client.post("/api/product-categories", headers=admin_headers, json={...})
```
**影响文件**`backend/tests/test_products.py`
**影响用例**5 个
#### 1.2 修复 test_configs.py
**问题**:配置查询接口路径错误
- 测试路径:`/api/configs?config_key=xxx`
- 实际路径:`/api/configs/{config_key}`
**修复方案**
```python
# 修改前
resp = client.get("/api/configs?config_key=logistics_timeout_days", headers=admin_headers)
# 修改后
resp = client.get("/api/configs/logistics_timeout_days", headers=admin_headers)
```
**影响文件**`backend/tests/test_configs.py`
**影响用例**2 个
#### 1.3 修复 test_customers.py
**问题**:部分接口路径和请求格式不匹配
**修复方案**:检查 customers.py 的实际接口定义,调整测试代码
**影响文件**`backend/tests/test_customers.py`
**影响用例**7 个
---
### 阶段二:修复权限配置问题(预计 1.5 小时)
#### 2.1 添加缺失的权限码到 conftest.py
**需要添加的权限码**
| 权限码 | 说明 | 关联接口 |
|--------|------|----------|
| `audit:list` | 审计日志查看 | GET /api/audit-logs |
| `config:view` | 配置查看 | GET /api/configs/{key} |
| `config:update` | 配置更新 | PUT /api/configs/{key} |
| `logistics:task:create` | 创建物流任务 | POST /api/logistics/tasks |
| `logistics:task:cancel` | 取消物流任务 | POST /api/logistics/tasks/{id}/cancel |
| `order:cancel-approve` | 取消审批 | POST /api/orders/{id}/cancel-approve |
**修复方案**:在 `conftest.py``seed_menus` 中添加对应的菜单项
**影响文件**`backend/tests/conftest.py`
**影响用例**12 个
#### 2.2 更新角色-菜单关联
**需要更新的角色权限**
| 角色 | 需要添加的权限 |
|------|---------------|
| 管理员 (admin) | 全部权限(已配置) |
| 业务员 (salesman) | `order:cancel-approve`(取消审批) |
| 管理层 (manager) | `audit:list`, `config:view`, `logistics:task:create` |
| 司机 (driver) | `logistics:task:accept`, `logistics:task:pickup`, `logistics:task:deliver` |
---
### 阶段三:修复接口实现问题(预计 2 小时)
#### 3.1 修复物流任务接口
**问题**
1. 创建任务接口权限检查不正确
2. 司机任务接口返回格式不匹配
**修复方案**
1. 检查 `backend/app/api/logistics.py` 的权限配置
2. 确保接口返回格式与测试期望一致
**影响文件**
- `backend/app/api/logistics.py`
- `backend/tests/test_logistics.py`
**影响用例**5 个
#### 3.2 修复订单取消流程
**问题**
1. 取消审批拒绝后状态恢复逻辑不正确
2. 履约中取消流程未完全实现
**修复方案**
1. 检查 `backend/app/services/order_service.py` 的取消逻辑
2. 确保状态恢复逻辑正确
**影响文件**
- `backend/app/services/order_service.py`
- `backend/tests/test_order_cancel.py`
**影响用例**3 个
#### 3.3 修复端到端流程
**问题**
1. 完整订单生命周期测试失败
2. 提醒流程测试失败
**修复方案**
1. 检查订单状态流转的完整性
2. 确保提醒接口正确实现
**影响文件**
- `backend/tests/test_e2e.py`
**影响用例**2 个
---
### 阶段四:修复数据模型问题(预计 0.5 小时)
#### 4.1 修复订单数量校验
**问题**:数量为 0 时未返回 40001 错误
**修复方案**:在 `CreateOrderRequest``order_service` 中添加数量校验
**影响文件**
- `backend/app/schemas/orders.py`
- `backend/app/services/order_service.py`
**影响用例**1 个
#### 4.2 修复文件上传接口
**问题**:获取上传凭证接口路径不正确
**修复方案**:检查 `backend/app/api/files.py` 的实际路径
**影响文件**
- `backend/tests/test_files.py`
**影响用例**1 个
---
## 📝 修复优先级
### P0 - 必须修复(影响核心功能)
1. **权限配置问题** - 12 个用例
- 影响登录鉴权、订单管理、系统管理等核心模块
2. **订单取消流程** - 3 个用例
- 影响订单全流程完整性
3. **物流任务接口** - 5 个用例
- 影响司机履约流程
### P1 - 应该修复(影响功能完整性)
4. **API 路径问题** - 25 个用例
- 影响客户、产品、配置、报表等模块测试
5. **端到端流程** - 2 个用例
- 影响整体流程验证
### P2 - 可以延后(影响较小)
6. **数据模型问题** - 3 个用例
- 影响边界条件测试
---
## 🛠️ 具体修复步骤
### 步骤 1修复 conftest.py 权限配置
```python
# 在 seed_menus 中添加以下菜单项
Menu(id=17, menu_name="审计日志", menu_path="/audit-logs", menu_type="page",
permission_code="audit:list", sort_no=11, status=1),
Menu(id=18, menu_name="配置查看", menu_path="", menu_type="button",
permission_code="config:view", parent_id=6, sort_no=1, status=1),
Menu(id=19, menu_name="配置更新", menu_path="", menu_type="button",
permission_code="config:update", parent_id=6, sort_no=2, status=1),
Menu(id=20, menu_name="创建物流任务", menu_path="", menu_type="button",
permission_code="logistics:task:create", parent_id=8, sort_no=4, status=1),
Menu(id=21, menu_name="取消物流任务", menu_path="", menu_type="button",
permission_code="logistics:task:cancel", parent_id=8, sort_no=5, status=1),
```
### 步骤 2更新角色-菜单关联
```python
# 在 role_menus 中添加
# 管理层
RoleMenu(role_id=3, menu_id=17), # audit:list
RoleMenu(role_id=3, menu_id=18), # config:view
RoleMenu(role_id=3, menu_id=20), # logistics:task:create
# 司机
RoleMenu(role_id=4, menu_id=20), # logistics:task:create (查看)
```
### 步骤 3修复 test_products.py 路径
```python
# 所有 /api/products/categories 替换为 /api/product-categories
resp = client.post("/api/product-categories", headers=admin_headers, json={...})
resp = client.get("/api/product-categories", headers=admin_headers)
resp = client.put(f"/api/product-categories/{cat.id}", headers=admin_headers, json={...})
```
### 步骤 4修复 test_configs.py 路径
```python
# 查询配置
resp = client.get("/api/configs/logistics_timeout_days", headers=admin_headers)
# 更新配置
resp = client.put("/api/configs/logistics_timeout_days", headers=admin_headers, json={
"config_value": "3",
})
```
### 步骤 5检查并修复物流任务接口
```python
# 检查 backend/app/api/logistics.py 的权限配置
# 确保 require_roles 和 require_permissions 正确
```
### 步骤 6检查并修复订单取消流程
```python
# 检查 backend/app/services/order_service.py
# 确保 cancel_order_approve 方法正确处理拒绝情况
```
---
## 📊 修复后预期结果
| 阶段 | 修复用例数 | 预期通过率 |
|------|-----------|-----------|
| 阶段一 | 25 | 85.2% |
| 阶段二 | 12 | 92.9% |
| 阶段三 | 8 | 98.1% |
| 阶段四 | 3 | 100% |
| **总计** | **48** | **100%** |
---
## ⏰ 时间估算
| 阶段 | 预计时间 | 依赖 |
|------|---------|------|
| 阶段一 | 1 小时 | 无 |
| 阶段二 | 1.5 小时 | 阶段一 |
| 阶段三 | 2 小时 | 阶段二 |
| 阶段四 | 0.5 小时 | 阶段三 |
| **总计** | **5 小时** | - |
---
## 🎯 验收标准
1. **所有 155 个测试用例通过**
2. **测试通过率达到 100%**
3. **无测试警告**
4. **测试执行时间 < 10 秒**
---
## 📌 注意事项
1. **修改接口代码时要谨慎**:确保不影响现有功能
2. **优先修复 P0 问题**:权限和核心流程问题优先解决
3. **测试与代码同步修改**:确保测试和接口代码保持一致
4. **回归测试**:修复后运行全部测试,确保无新增失败
---
## 🔄 修复后验证
```bash
# 运行全部测试
cd backend
python -m pytest tests/ -v
# 运行 P0 测试
python -m pytest tests/ -v -m "p0"
# 生成覆盖率报告
python -m pytest tests/ --cov=app --cov-report=html
```
---
**文档版本**: v1.0
**创建日期**: 2026-06-10
**维护人**: 开发团队