08ea5fbe98
添加用户管理视图、API和状态管理文件
270 lines
6.2 KiB
Markdown
270 lines
6.2 KiB
Markdown
# E2E测试框架
|
|
|
|
基于Python + Playwright的端到端测试框架,支持Admin后台管理端和Uniapp客户端的双端测试。
|
|
|
|
## 项目结构
|
|
|
|
```
|
|
python_e2e/
|
|
├── config/ # 配置文件
|
|
│ └── config.yaml # 多环境配置
|
|
├── core/ # 核心框架
|
|
│ ├── config_manager.py # 配置管理器
|
|
│ ├── logger.py # 日志记录器
|
|
│ ├── exception_handler.py # 异常处理器
|
|
│ ├── retry_decorator.py # 重试装饰器
|
|
│ ├── reporter.py # 报告生成器
|
|
│ └── screenshot_helper.py # 截图辅助
|
|
├── pages/ # 页面对象模型
|
|
│ ├── base_page.py # 页面基类
|
|
│ ├── web/ # Admin端页面
|
|
│ │ ├── login_page.py
|
|
│ │ ├── dashboard_page.py
|
|
│ │ ├── user_management_page.py
|
|
│ │ ├── role_management_page.py
|
|
│ │ └── menu_management_page.py
|
|
│ └── uniapp/ # Uniapp端页面
|
|
│ ├── almanac_page.py
|
|
│ ├── calendar_page.py
|
|
│ └── user_page.py
|
|
├── test_data/ # 测试数据
|
|
│ └── factories/
|
|
│ ├── user_factory.py
|
|
│ ├── role_factory.py
|
|
│ └── almanac_factory.py
|
|
├── tests/ # 测试用例
|
|
│ ├── web/ # Admin端测试
|
|
│ │ ├── test_auth.py
|
|
│ │ ├── test_user_management.py
|
|
│ │ └── ...
|
|
│ └── uniapp/ # Uniapp端测试
|
|
│ ├── test_almanac.py
|
|
│ ├── test_calendar.py
|
|
│ └── ...
|
|
├── scripts/ # 执行脚本
|
|
│ └── run_tests.sh # 测试执行脚本
|
|
├── conftest.py # 全局夹具
|
|
├── pytest.ini # pytest配置
|
|
└── requirements.txt # 依赖包
|
|
```
|
|
|
|
## 快速开始
|
|
|
|
### 1. 安装依赖
|
|
|
|
```bash
|
|
pip install -r requirements.txt
|
|
```
|
|
|
|
### 2. 安装Playwright浏览器
|
|
|
|
```bash
|
|
python -m playwright install chromium
|
|
```
|
|
|
|
### 3. 运行测试
|
|
|
|
```bash
|
|
# 运行所有测试
|
|
./scripts/run_tests.sh
|
|
|
|
# 运行冒烟测试
|
|
./scripts/run_tests.sh -m smoke
|
|
|
|
# 运行Admin端测试
|
|
./scripts/run_tests.sh -m admin
|
|
|
|
# 运行Uniapp端测试
|
|
./scripts/run_tests.sh -m uniapp
|
|
|
|
# 运行指定测试文件
|
|
./scripts/run_tests.sh -p tests/web/test_auth.py
|
|
|
|
# 无头模式运行并生成报告
|
|
./scripts/run_tests.sh --headless --html --allure
|
|
```
|
|
|
|
### 4. 查看报告
|
|
|
|
```bash
|
|
# HTML报告
|
|
open reports/html/test_report.html
|
|
|
|
# Allure报告
|
|
allure serve reports/allure-results
|
|
```
|
|
|
|
## 配置说明
|
|
|
|
### 环境配置
|
|
|
|
编辑 `config/config.yaml` 文件配置不同环境:
|
|
|
|
```yaml
|
|
environments:
|
|
dev:
|
|
admin:
|
|
base_url: "http://localhost:5174"
|
|
api_url: "http://127.0.0.1:8080"
|
|
uniapp:
|
|
base_url: "http://localhost:3000"
|
|
api_url: "http://127.0.0.1:8080"
|
|
```
|
|
|
|
### 环境变量
|
|
|
|
- `TEST_ENV`: 测试环境 (dev/test/prod)
|
|
- `TEST_BASE_URL`: 基础URL
|
|
- `TEST_API_URL`: API URL
|
|
- `TEST_HEADLESS`: 是否无头模式 (true/false)
|
|
|
|
## 测试用例编写规范
|
|
|
|
### 基本结构
|
|
|
|
```python
|
|
import pytest
|
|
import allure
|
|
from playwright.sync_api import Page
|
|
|
|
@allure.epic("Admin后台管理")
|
|
@allure.feature("用户管理模块")
|
|
class TestUserManagement:
|
|
"""用户管理测试类"""
|
|
|
|
@allure.title("创建新用户测试")
|
|
@allure.description("验证可以成功创建新用户")
|
|
@allure.severity(allure.severity_level.CRITICAL)
|
|
@pytest.mark.smoke
|
|
def test_create_user_success(self, authenticated_page: Page, user_management_page):
|
|
with allure.step("导航到用户管理页面"):
|
|
user_management_page.navigate()
|
|
assert user_management_page.is_loaded()
|
|
|
|
with allure.step("创建新用户"):
|
|
user_management_page.click_create_button()
|
|
user_management_page.fill_form_username("testuser")
|
|
user_management_page.click_form_submit()
|
|
|
|
with allure.step("验证创建成功"):
|
|
assert user_management_page.has_success_message()
|
|
```
|
|
|
|
### 标记使用
|
|
|
|
- `@pytest.mark.smoke`: 冒烟测试
|
|
- `@pytest.mark.regression`: 回归测试
|
|
- `@pytest.mark.admin`: Admin端测试
|
|
- `@pytest.mark.uniapp`: Uniapp端测试
|
|
- `@pytest.mark.slow`: 慢速测试
|
|
|
|
## 核心功能
|
|
|
|
### 1. 配置管理
|
|
|
|
支持多环境配置,通过配置文件或环境变量设置。
|
|
|
|
### 2. 页面对象模型 (POM)
|
|
|
|
封装页面元素和操作,提高测试可维护性。
|
|
|
|
### 3. 数据工厂
|
|
|
|
使用Faker生成测试数据,支持批量数据生成。
|
|
|
|
### 4. 异常处理
|
|
|
|
智能异常分类,自动重试机制。
|
|
|
|
### 5. 报告生成
|
|
|
|
支持HTML、JSON、Allure多种报告格式。
|
|
|
|
## 最佳实践
|
|
|
|
### 1. 元素定位策略
|
|
|
|
优先使用以下定位方式:
|
|
1. `data-testid` 属性
|
|
2. ARIA属性
|
|
3. 角色定位
|
|
4. 文本定位
|
|
5. CSS选择器
|
|
6. XPath(最后选择)
|
|
|
|
### 2. 测试数据管理
|
|
|
|
- 使用数据工厂生成动态数据
|
|
- 避免硬编码测试数据
|
|
- 测试后清理数据
|
|
|
|
### 3. 测试独立性
|
|
|
|
- 每个测试用例独立执行
|
|
- 不依赖其他测试的执行顺序
|
|
- 使用夹具准备测试环境
|
|
|
|
### 4. 断言策略
|
|
|
|
- 使用明确的断言消息
|
|
- 验证关键业务逻辑
|
|
- 避免过度断言
|
|
|
|
## 故障排除
|
|
|
|
### 测试失败常见原因
|
|
|
|
1. **元素未找到**
|
|
- 检查元素定位器是否正确
|
|
- 增加等待时间
|
|
- 检查页面是否完全加载
|
|
|
|
2. **超时错误**
|
|
- 增加超时配置
|
|
- 检查网络连接
|
|
- 检查服务是否正常运行
|
|
|
|
3. **浏览器崩溃**
|
|
- 重启测试
|
|
- 检查系统资源
|
|
- 更新Playwright版本
|
|
|
|
### 调试技巧
|
|
|
|
1. **启用可视化模式**
|
|
```bash
|
|
./scripts/run_tests.sh --headed
|
|
```
|
|
|
|
2. **启用慢动作**
|
|
修改 `pytest.ini` 中的 `--slowmo` 参数
|
|
|
|
3. **查看截图**
|
|
测试失败时自动保存截图到 `reports/screenshots/`
|
|
|
|
4. **查看日志**
|
|
日志文件保存在 `logs/` 目录
|
|
|
|
## 贡献指南
|
|
|
|
### 代码规范
|
|
|
|
- 遵循PEP 8编码规范
|
|
- 使用类型注解
|
|
- 编写文档字符串
|
|
- 添加适当的注释
|
|
|
|
### 提交规范
|
|
|
|
- 使用清晰的提交信息
|
|
- 一个提交只包含一个功能
|
|
- 提交前运行测试
|
|
|
|
## 许可证
|
|
|
|
MIT License
|
|
|
|
## 联系方式
|
|
|
|
如有问题或建议,请联系项目维护者。
|