主题: 基于 pytest + Playwright 的 UI 自动化测试框架
技术选型
| 维度 |
选择 |
理由 |
| 浏览器驱动 |
Playwright |
内置浏览器管理,速度快,API 简洁,与 pytest 集成成熟 |
| 设计模式 |
POM (Page Object Model) |
页面逻辑与测试分离,维护性强 |
| 配置管理 |
pytest.ini + conftest.py |
标准 pytest 生态做法,简洁够用 |
| 报告 |
Allure |
可视化报告,支持步骤标记、截图附件 |
项目结构
ui-test-framework/
├── pytest.ini # pytest 配置
├── conftest.py # fixtures:browser 生命周期管理
├── pages/ # Page Object 层
│ ├── __init__.py
│ └── baidu_page.py # 百度首页 + 搜索结果页
├── tests/ # 测试用例层
│ ├── __init__.py
│ └── test_baidu_search.py # 搜索"世界杯赛程"测试
├── utils/ # 工具层
│ ├── __init__.py
│ └── driver.py # Playwright browser 工厂
└── requirements.txt # 依赖
分层职责
- pages/ --- 封装百度首页的搜索框、搜索按钮等元素定位和操作方法
- tests/ --- 纯测试逻辑,调用 Page 方法,断言结果
- utils/ --- Playwright browser 实例的创建与销毁
- conftest.py --- 为每个测试函数自动注入 browser 和 page 对象
测试流程
- conftest.py fixture 启动 Chromium 浏览器(headless 模式)
- 注入 page 对象到测试函数
- 测试函数创建 BaiduPage 实例
- BaiduPage.open() → 导航到 https://www.baidu.com
- BaiduPage.search("世界杯赛程") → 输入关键字并搜索
- 等待搜索结果加载
- 断言:搜索结果标题包含"世界杯赛程"
- fixture teardown 自动关闭浏览器
Allure 集成
- 运行:
pytest --alluredir=reports/allure-results
- 生成:
allure generate reports/allure-results -o reports/allure-report --clean
- 查看:
allure open reports/allure-report
- 使用
allure.step() 标记步骤,失败自动截图
依赖
- pytest
- pytest-playwright
- allure-pytest
- playwright