# 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 ## 联系方式 如有问题或建议,请联系项目维护者。