# auto_test_by_ai **Repository Path**: jiangbin2/auto_test_by_ai ## Basic Information - **Project Name**: auto_test_by_ai - **Description**: AI自动创建的自动化框架 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-03-31 - **Last Updated**: 2026-03-31 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Pytest 自动化测试框架 基于Playwright和YAML定位的PO模式自动化测试框架。 ## 项目结构 ``` project/ ├── base/ # 基础层:封装webdriver和requests公共方法 │ ├── base_page.py # Web UI基础类 │ └── base_api.py # API基础类 ├── page/ # 页面层:每个页面对应一个类 │ └── baidu_page.py # 百度搜索页面 ├── locators/ # 定位层:存放各页面的元素定位(YAML格式) │ └── baidu_page.yml # 百度搜索页面元素定位 ├── testcases/ # 用例层:pytest测试用例 │ └── test_baidu_search.py # 百度搜索测试用例 ├── config/ # 配置:URL、等待时间 │ └── config.py # 配置文件 ├── data/ # 数据:存放用例数据 │ └── test_data.py # 测试数据 ├── reports/ # 测试报告 ├── tools/ # 存放各类工具类封装 │ └── logs.py # 日志模块 ├── conftest.py # 封装pytest的基础功能 ├── pytest.ini # pytest配置 ├── main.py # 测试运行入口 └── requirements.txt # 依赖包 ``` ## 快速开始 ### 1. 安装依赖 ```bash pip install -r requirements.txt ``` ### 2. 配置测试环境 编辑 `config/config.py` 文件,修改测试URL和账号信息: ```python class Config: BASE_URL = "https://your-test-site.com" API_BASE_URL = "https://api.your-test-site.com" TEST_USER = { "username": "your_test_user", "password": "your_test_password" } ``` ### 3. 运行测试 #### 使用 main.py 运行(推荐) ```bash # 运行所有测试(显示浏览器窗口) python main.py # 运行所有测试(无头模式) python main.py --headless # 运行特定测试文件 python main.py testcases/test_baidu_search.py # 运行特定测试类 python main.py testcases/test_baidu_search.py::TestBaiduSearch # 运行特定测试函数 python main.py testcases/test_baidu_search.py::TestBaiduSearch::test_baidu_search # 运行特定标记的测试 python main.py -m smoke python main.py -m ui python main.py -m "not slow" # 生成Allure报告 python main.py --allure # 组合使用 python main.py --headless -m ui --allure ``` #### 直接使用 pytest 命令 ```bash # 运行所有测试 pytest # 运行UI测试 pytest -m ui # 运行API测试 pytest -m api # 运行冒烟测试 pytest -m smoke # 生成Allure报告 pytest --alluredir=reports/allure-results allure generate reports/allure-results -o reports/allure-report --clean allure open reports/allure-report ``` ## 核心特性 - **PO模式**: 清晰的分层架构,Base层、Page层、Testcase层职责明确 - **YAML定位**: 元素定位存储在YAML文件中,便于维护 - **Playwright**: 使用现代浏览器自动化工具,支持多浏览器 - **数据驱动**: 支持参数化测试和数据驱动 - **日志记录**: 完整的日志记录,便于调试 - **测试报告**: - Allure报告:详细的测试报告,包含历史趋势、参数化展示、失败截图等 - **自动截图**: UI测试失败时自动截图并附加到Allure报告中 ## 编写测试用例 ### UI测试示例 ```python import pytest from page.login_page import LoginPage from config.config import Config @pytest.mark.ui class TestLogin: def test_login_with_valid_credentials(self, page, login_page): page.goto(Config.BASE_URL + "/login") login_page.login(Config.TEST_USER["username"], Config.TEST_USER["password"]) assert login_page.is_login_success(), "登录失败" ``` ### API测试示例 ```python import pytest from base.base_api import BaseAPI @pytest.mark.api class TestUserAPI: def setup_method(self): self.api = BaseAPI() def test_get_user_list(self): response = self.api.get("/users") assert response.status_code == 200 data = response.json() assert "users" in data ``` ## 添加新页面 ### 1. 创建YAML定位文件 在 `locate/` 目录下创建 `your_page.yml`: ```yaml elements: element_name: name: "元素名称" locate: "CSS选择器或XPath" description: "元素描述" ``` ### 2. 创建Page类 在 `page/` 目录下创建 `your_page.py`: ```python from playwright.sync_api import Page from base.base_page import BasePage class YourPage(BasePage): def __init__(self, page: Page): super().__init__(page, "your_page") def your_method(self): """页面操作方法""" self.click("element_name") ``` ### 3. 编写测试用例 在 `testcases/` 目录下创建 `test_your_page.py`: ```python import pytest from page.your_page import YourPage @pytest.mark.ui class TestYourPage: def test_your_functionality(self, page): your_page = YourPage(page) page.goto(Config.BASE_URL + "/your-page") your_page.your_method() ``` ## 常用命令 ```bash # 运行所有测试 pytest # 运行特定测试文件 pytest testcases/test_login.py # 运行特定测试类 pytest testcases/test_login.py::TestLogin # 运行特定测试函数 pytest testcases/test_login.py::TestLogin::test_login_with_valid_credentials # 运行特定标记的测试 pytest -m smoke pytest -m ui pytest -m api pytest -m "not slow" # 生成测试报告 # HTML报告 pytest --html=reports/report.html --self-contained-html # Allure报告 pytest --alluredir=allure-results allure generate allure-results -o allure-report --clean allure open allure-report # 在浏览器中打开报告 # 使用Playwright运行测试 pytest --headed # 显示浏览器窗口 pytest --headless # 无头模式运行(默认) # 指定浏览器 pytest --browser chromium pytest --browser firefox pytest --browser webkit # 调试模式 pytest --tracing=retain # 保留trace文件用于调试 pytest --debug # 调试模式 # 并行运行测试 pytest -n auto # 显示详细输出 pytest -v # 显示打印输出 pytest -s # 停止在第一个失败 pytest -x # 只运行上次失败的测试 pytest --lf # 组合使用 pytest -v -m ui --headed --html=reports/ui_report.html --self-contained-html ``` ## 最佳实践 1. **分层清晰**: Base层、Locate层、Page层、Testcase层职责明确 2. **页面封装**: 每个页面对应一个Page类,封装元素定位和操作 3. **方法复用**: 公共方法放在Base层,避免重复代码 4. **数据分离**: 测试数据与测试代码分离,便于维护 5. **定位分离**: 元素定位存储在YAML文件中,便于维护 6. **测试命名**: 使用描述性的测试名称 7. **AAA模式**: Arrange(准备)- Act(执行)- Assert(断言) 8. **单一职责**: 每个测试只验证一个功能点 9. **独立性**: 测试之间不应有依赖关系 10. **可重复性**: 测试应该可以重复运行且结果一致 ## 许可证 MIT License