feat(admin): 添加用户管理相关文件
添加用户管理视图、API和状态管理文件
This commit is contained in:
@@ -0,0 +1,269 @@
|
||||
# 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
|
||||
|
||||
## 联系方式
|
||||
|
||||
如有问题或建议,请联系项目维护者。
|
||||
Reference in New Issue
Block a user