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
|