474 lines
10 KiB
Markdown
474 lines
10 KiB
Markdown
# 订单全流程管理系统 - 自动化测试指南
|
||
|
||
## 📋 目录
|
||
|
||
1. [测试概览](#测试概览)
|
||
2. [环境准备](#环境准备)
|
||
3. [后端测试](#后端测试)
|
||
4. [前端 E2E 测试](#前端-e2e-测试)
|
||
5. [测试覆盖率](#测试覆盖率)
|
||
6. [CI/CD 集成](#cicd-集成)
|
||
7. [常见问题](#常见问题)
|
||
|
||
---
|
||
|
||
## 测试概览
|
||
|
||
### 测试架构
|
||
|
||
```
|
||
测试金字塔
|
||
┌─────────────────────────────────────────────┐
|
||
│ E2E 测试 (Playwright) │ 10%
|
||
│ web-admin / web-sales 前端页面测试 │
|
||
├─────────────────────────────────────────────┤
|
||
│ API 集成测试 (pytest) │ 30%
|
||
│ 后端接口 + 数据库 + 状态流转测试 │
|
||
├─────────────────────────────────────────────┤
|
||
│ 单元测试 (pytest) │ 60%
|
||
│ Service/Repository 层业务逻辑测试 │
|
||
└─────────────────────────────────────────────┘
|
||
```
|
||
|
||
### 测试用例统计
|
||
|
||
| 模块 | 文件 | 用例数 | P0 | P1 | P2 |
|
||
|------|------|--------|----|----|-----|
|
||
| 登录鉴权 | test_auth.py | 18 | 12 | 6 | 0 |
|
||
| 订单管理 | test_orders.py | 22 | 14 | 8 | 0 |
|
||
| 订单取消 | test_order_cancel.py | 12 | 10 | 2 | 0 |
|
||
| 司机任务 | test_logistics.py | 16 | 12 | 3 | 1 |
|
||
| 客户管理 | test_customers.py | 10 | 4 | 4 | 2 |
|
||
| 产品管理 | test_products.py | 10 | 2 | 6 | 2 |
|
||
| 供应商管理 | test_suppliers.py | 7 | 3 | 3 | 1 |
|
||
| 系统管理 | test_system.py | 18 | 10 | 8 | 0 |
|
||
| 提醒中心 | test_reminders.py | 10 | 5 | 5 | 0 |
|
||
| 报表统计 | test_reports.py | 8 | 0 | 8 | 0 |
|
||
| 配置管理 | test_configs.py | 10 | 3 | 7 | 0 |
|
||
| 审计日志 | test_audit.py | 10 | 4 | 6 | 0 |
|
||
| 文件管理 | test_files.py | 6 | 0 | 5 | 1 |
|
||
| AI 识别 | test_ai.py | 6 | 0 | 5 | 1 |
|
||
| 端到端 | test_e2e.py | 12 | 10 | 2 | 0 |
|
||
| **合计** | **15 个文件** | **175** | **89** | **73** | **8** |
|
||
|
||
---
|
||
|
||
## 环境准备
|
||
|
||
### 1. 后端环境
|
||
|
||
```bash
|
||
# 进入后端目录
|
||
cd backend
|
||
|
||
# 安装依赖
|
||
pip install -r requirements.txt
|
||
|
||
# 安装测试依赖
|
||
pip install pytest pytest-asyncio httpx pytest-cov
|
||
```
|
||
|
||
### 2. 前端 E2E 环境
|
||
|
||
```bash
|
||
# 进入 E2E 测试目录
|
||
cd e2e
|
||
|
||
# 安装依赖
|
||
npm install
|
||
|
||
# 安装 Playwright 浏览器
|
||
npx playwright install chromium
|
||
```
|
||
|
||
### 3. 环境变量配置
|
||
|
||
创建 `backend/.env.test` 文件:
|
||
|
||
```env
|
||
APP_ENV=test
|
||
SECRET_KEY=test-secret-key-for-testing
|
||
JWT_EXPIRE_MINUTES=60
|
||
MYSQL_DATABASE=:memory:
|
||
AI_PROVIDER=mock
|
||
```
|
||
|
||
---
|
||
|
||
## 后端测试
|
||
|
||
### 运行全部测试
|
||
|
||
```bash
|
||
cd backend
|
||
python -m pytest tests/ -v
|
||
```
|
||
|
||
### 按优先级运行
|
||
|
||
```bash
|
||
# 只运行 P0 测试(关键路径)
|
||
python -m pytest tests/ -v -m "p0"
|
||
|
||
# 只运行 P1 测试
|
||
python -m pytest tests/ -v -m "p1"
|
||
|
||
# 运行 P0 和 P1 测试
|
||
python -m pytest tests/ -v -m "p0 or p1"
|
||
```
|
||
|
||
### 按模块运行
|
||
|
||
```bash
|
||
# 登录鉴权测试
|
||
python -m pytest tests/test_auth.py -v
|
||
|
||
# 订单管理测试
|
||
python -m pytest tests/test_orders.py -v
|
||
|
||
# 订单取消测试
|
||
python -m pytest tests/test_order_cancel.py -v
|
||
|
||
# 司机任务测试
|
||
python -m pytest tests/test_logistics.py -v
|
||
|
||
# 端到端测试
|
||
python -m pytest tests/test_e2e.py -v
|
||
```
|
||
|
||
### 生成测试覆盖率报告
|
||
|
||
```bash
|
||
# 生成覆盖率报告
|
||
python -m pytest tests/ --cov=app --cov-report=html
|
||
|
||
# 查看报告
|
||
# 打开 htmlcov/index.html
|
||
```
|
||
|
||
### 测试输出示例
|
||
|
||
```
|
||
============================= test session starts =============================
|
||
platform win32 -- Python 3.10.0, pytest-7.4.0
|
||
collected 175 items
|
||
|
||
tests/test_auth.py::TestLoginSuccess::test_admin_login_success PASSED [ 5%]
|
||
tests/test_auth.py::TestLoginSuccess::test_salesman_login_success PASSED [ 11%]
|
||
tests/test_auth.py::TestLoginFailure::test_wrong_password PASSED [ 17%]
|
||
...
|
||
|
||
======================== 175 passed in 45.23s ================================
|
||
```
|
||
|
||
---
|
||
|
||
## 前端 E2E 测试
|
||
|
||
### 运行全部测试
|
||
|
||
```bash
|
||
cd e2e
|
||
npx playwright test
|
||
```
|
||
|
||
### 运行特定测试文件
|
||
|
||
```bash
|
||
# 登录测试
|
||
npx playwright test tests/admin-login.spec.js
|
||
|
||
# 订单管理测试
|
||
npx playwright test tests/admin-orders.spec.js
|
||
|
||
# 业务员创建订单测试
|
||
npx playwright test tests/sales-order-create.spec.js
|
||
```
|
||
|
||
### 有头模式运行(可视化)
|
||
|
||
```bash
|
||
npx playwright test --headed
|
||
```
|
||
|
||
### 调试模式
|
||
|
||
```bash
|
||
npx playwright test --debug
|
||
```
|
||
|
||
### UI 模式(交互式)
|
||
|
||
```bash
|
||
npx playwright test --ui
|
||
```
|
||
|
||
### 查看测试报告
|
||
|
||
```bash
|
||
npx playwright show-report
|
||
```
|
||
|
||
---
|
||
|
||
## 测试覆盖率
|
||
|
||
### 后端覆盖率目标
|
||
|
||
| 模块 | 目标覆盖率 | 当前状态 |
|
||
|------|------------|----------|
|
||
| API 路由层 | 90% | 待测试 |
|
||
| Service 层 | 85% | 待测试 |
|
||
| Repository 层 | 80% | 待测试 |
|
||
| Model 层 | 95% | 待测试 |
|
||
|
||
### 生成覆盖率报告
|
||
|
||
```bash
|
||
cd backend
|
||
python -m pytest tests/ --cov=app --cov-report=html --cov-report=term-missing
|
||
```
|
||
|
||
### 查看未覆盖代码
|
||
|
||
```bash
|
||
python -m pytest tests/ --cov=app --cov-report=term-missing | grep "TOTAL"
|
||
```
|
||
|
||
---
|
||
|
||
## CI/CD 集成
|
||
|
||
### GitHub Actions 示例
|
||
|
||
创建 `.github/workflows/test.yml`:
|
||
|
||
```yaml
|
||
name: 自动化测试
|
||
|
||
on:
|
||
push:
|
||
branches: [main, develop]
|
||
pull_request:
|
||
branches: [main]
|
||
|
||
jobs:
|
||
backend-tests:
|
||
runs-on: ubuntu-latest
|
||
|
||
steps:
|
||
- uses: actions/checkout@v3
|
||
|
||
- name: Set up Python
|
||
uses: actions/setup-python@v4
|
||
with:
|
||
python-version: '3.10'
|
||
|
||
- name: Install dependencies
|
||
run: |
|
||
cd backend
|
||
pip install -r requirements.txt
|
||
pip install pytest pytest-cov
|
||
|
||
- name: Run tests
|
||
run: |
|
||
cd backend
|
||
python -m pytest tests/ -v --cov=app --cov-report=xml
|
||
|
||
- name: Upload coverage
|
||
uses: codecov/codecov-action@v3
|
||
with:
|
||
file: backend/coverage.xml
|
||
|
||
frontend-e2e:
|
||
runs-on: ubuntu-latest
|
||
|
||
steps:
|
||
- uses: actions/checkout@v3
|
||
|
||
- name: Set up Node.js
|
||
uses: actions/setup-node@v3
|
||
with:
|
||
node-version: '18'
|
||
|
||
- name: Install dependencies
|
||
run: |
|
||
cd e2e
|
||
npm install
|
||
npx playwright install chromium
|
||
|
||
- name: Run E2E tests
|
||
run: |
|
||
cd e2e
|
||
npx playwright test
|
||
|
||
- name: Upload test results
|
||
uses: actions/upload-artifact@v3
|
||
if: always()
|
||
with:
|
||
name: playwright-report
|
||
path: e2e/playwright-report/
|
||
```
|
||
|
||
### GitLab CI 示例
|
||
|
||
创建 `.gitlab-ci.yml`:
|
||
|
||
```yaml
|
||
stages:
|
||
- test
|
||
|
||
backend-tests:
|
||
stage: test
|
||
image: python:3.10
|
||
script:
|
||
- cd backend
|
||
- pip install -r requirements.txt
|
||
- pip install pytest pytest-cov
|
||
- python -m pytest tests/ -v --cov=app
|
||
artifacts:
|
||
reports:
|
||
coverage_report:
|
||
coverage_format: cobertura
|
||
path: backend/coverage.xml
|
||
|
||
frontend-e2e:
|
||
stage: test
|
||
image: mcr.microsoft.com/playwright:v1.40.0-jammy
|
||
script:
|
||
- cd e2e
|
||
- npm install
|
||
- npx playwright test
|
||
artifacts:
|
||
when: always
|
||
paths:
|
||
- e2e/playwright-report/
|
||
```
|
||
|
||
---
|
||
|
||
## 常见问题
|
||
|
||
### Q1: 测试数据库连接失败
|
||
|
||
**问题**: `pytest` 报错 `ModuleNotFoundError: No module named 'backend'`
|
||
|
||
**解决**: 确保在项目根目录运行测试,或设置 `PYTHONPATH`:
|
||
|
||
```bash
|
||
# 方法 1: 在 backend 目录运行
|
||
cd backend
|
||
python -m pytest tests/
|
||
|
||
# 方法 2: 设置 PYTHONPATH
|
||
set PYTHONPATH=D:\work\python\coding\dingdanquanliucheng
|
||
python -m pytest backend/tests/
|
||
```
|
||
|
||
### Q2: Playwright 浏览器未安装
|
||
|
||
**问题**: `Error: browserType.launch: Executable doesn't exist`
|
||
|
||
**解决**:
|
||
|
||
```bash
|
||
cd e2e
|
||
npx playwright install chromium
|
||
```
|
||
|
||
### Q3: 前端服务未启动
|
||
|
||
**问题**: `page.goto: net::ERR_CONNECTION_REFUSED`
|
||
|
||
**解决**: 确保前端开发服务器已启动:
|
||
|
||
```bash
|
||
# 启动 web-admin
|
||
cd frontend/web-admin
|
||
npm run dev
|
||
|
||
# 启动 web-sales
|
||
cd frontend/web-sales
|
||
npm run dev
|
||
```
|
||
|
||
### Q4: 测试数据污染
|
||
|
||
**问题**: 测试之间数据相互影响
|
||
|
||
**解决**: 测试使用 SQLite 内存数据库,每个测试函数独立事务,测试结束后自动回滚。如果仍有问题,检查 `conftest.py` 中的 fixture 配置。
|
||
|
||
### Q5: 如何添加新的测试用例
|
||
|
||
**步骤**:
|
||
|
||
1. 在 `backend/tests/` 目录创建或编辑测试文件
|
||
2. 使用 `@pytest.mark` 添加测试标记(p0, p1, p2 等)
|
||
3. 使用 fixtures(如 `client`, `admin_headers`, `make_order`)简化测试代码
|
||
4. 运行测试验证:`python -m pytest tests/test_your_file.py -v`
|
||
|
||
**示例**:
|
||
|
||
```python
|
||
import pytest
|
||
|
||
@pytest.mark.p0
|
||
class TestYourFeature:
|
||
def test_your_case(self, client, admin_headers):
|
||
"""测试用例描述。"""
|
||
resp = client.get("/api/your-endpoint", headers=admin_headers)
|
||
assert resp.status_code == 200
|
||
data = resp.json()
|
||
assert data["code"] == 0
|
||
```
|
||
|
||
---
|
||
|
||
## 测试用例清单
|
||
|
||
### P0 关键路径(必须通过)
|
||
|
||
- [ ] AUTH-001: 正常登录
|
||
- [ ] AUTH-002: 密码错误
|
||
- [ ] AUTH-003: 角色不匹配
|
||
- [ ] AUTH-004: 停用用户登录
|
||
- [ ] AUTH-005: 无 token 访问
|
||
- [ ] ORD-001: 创建草稿订单
|
||
- [ ] ORD-002: 新客户自动入库
|
||
- [ ] ORD-003: 利润计算
|
||
- [ ] ORD-007: 提交审核成功
|
||
- [ ] ORD-009: 管理层审批通过
|
||
- [ ] ORD-010: 管理层审批退回
|
||
- [ ] CAN-001: 草稿订单取消
|
||
- [ ] CAN-002: 待审核订单取消
|
||
- [ ] CAN-003: 已审批订单取消申请
|
||
- [ ] CAN-005: 取消审批通过
|
||
- [ ] TASK-001: 创建司机任务
|
||
- [ ] TASK-004: 司机接单
|
||
- [ ] TASK-006: 司机揽货
|
||
- [ ] TASK-008: 司机送达
|
||
- [ ] E2E-001: 完整订单流程
|
||
- [ ] E2E-008: 草稿取消流程
|
||
- [ ] E2E-009: 已通过取消流程
|
||
|
||
### P1 核心功能
|
||
|
||
- [ ] 客户 CRUD
|
||
- [ ] 产品 CRUD
|
||
- [ ] 供应商 CRUD
|
||
- [ ] 系统用户/角色/菜单管理
|
||
- [ ] 提醒中心
|
||
- [ ] 报表统计
|
||
- [ ] 配置管理
|
||
- [ ] 审计日志
|
||
|
||
---
|
||
|
||
## 联系方式
|
||
|
||
如有测试相关问题,请联系开发团队。
|
||
|
||
---
|
||
|
||
**最后更新**: 2026-06-10
|