企业级 Python + Pytest + Playwright UI 自动化测试框架方案
·
下面是一套 企业级 Python + Pytest + Playwright UI 自动化测试框架方案,包含:
-
框架结构设计
-
环境安装
-
完整代码示例
-
PageObject 模式
-
数据驱动
-
日志+截图
-
失败自动截图
-
Allure 报告
-
CI/CD 集成思路
这套框架是很多 互联网公司 UI 自动化测试的标准结构。
一、pytest-playwright 自动化测试框架架构
推荐目录结构:
ui-test-framework │ ├── config │ └── config.yaml # 环境配置 │ ├── data │ └── login_data.yaml # 测试数据 │ ├── pages # PageObject层 │ └── login_page.py │ ├── tests # 测试用例 │ └── test_login.py │ ├── utils # 工具类 │ ├── logger.py │ ├── yaml_util.py │ └── screenshot.py │ ├── reports │ └── allure-results │ ├── conftest.py # pytest全局fixture │ ├── pytest.ini │ └── requirements.txt
二、环境安装
1 安装依赖
pip install pytest pip install playwright pip install pytest-playwright pip install allure-pytest pip install pyyaml
安装浏览器
playwright install
三、配置文件
config/config.yaml
ase_url: "https://example.com" timeout: 10000 browser: chromium headless: false
四、数据驱动
data/login_data.yaml
login_data: - username: test1 password: 123456 expect: 登录成功 - username: wrong password: 123456 expect: 用户名错误
五、工具类
1 YAML读取工具
utils/yaml_util.py
ort yaml class YamlUtil: @staticmethod def read_yaml(file_path): with open(file_path, 'r', encoding='utf-8') as f: return yaml.safe_load(f)
2 日志工具
utils/logger.py
import logging
def get_logger():
logger = logging.getLogger("ui-test")
logger.setLevel(logging.INFO)
handler = logging.StreamHandler()
formatter = logging.Formatter(
"%(asctime)s - %(levelname)s - %(message)s"
)
handler.setFormatter(formatter)
logger.addHandler(handler)
return logger
3 截图工具
utils/screenshot.py
import time
def take_screenshot(page):
file_name = f"screenshot_{int(time.time())}.png"
page.screenshot(path=f"reports/{file_name}")
return file_name
六、Page Object 设计
pages/login_page.py
lass LoginPage: def __init__(self, page): self.page = page self.username = "#username" self.password = "#password" self.login_button = "#login" self.error_msg = ".error" def goto(self, url): self.page.goto(url) def login(self, username, password): self.page.fill(self.username, username) self.page.fill(self.password, password) self.page.click(self.login_button) def get_error_msg(self): return self.page.inner_text(self.error_msg)
七、pytest 全局配置
conftest.py
import pytest
from playwright.sync_api import sync_playwright
from utils.yaml_util import YamlUtil
config = YamlUtil.read_yaml("config/config.yaml")
@pytest.fixture(scope="session")
def browser():
with sync_playwright() as p:
browser = p.chromium.launch(
headless=config["headless"]
)
yield browser
browser.close()
@pytest.fixture()
def page(browser):
context = browser.new_context()
page = context.new_page()
yield page
context.close()
八、测试用例
tests/test_login.py
import pytest
from pages.login_page import LoginPage
from utils.yaml_util import YamlUtil
data = YamlUtil.read_yaml("data/login_data.yaml")["login_data"]
@pytest.mark.parametrize("case", data)
def test_login(page, case):
login_page = LoginPage(page)
login_page.goto("https://example.com/login")
login_page.login(
case["username"],
case["password"]
)
if case["expect"] == "登录成功":
assert "dashboard" in page.url
else:
assert case["expect"] in login_page.get_error_msg()
九、失败自动截图
修改 conftest.py
import pytest from utils.screenshot import take_screenshot @pytest.hookimpl(hookwrapper=True) def pytest_runtest_makereport(item): outcome = yield report = outcome.get_result() if report.when == "call" and report.failed: page = item.funcargs["page"] take_screenshot(page)
十、pytest配置
pytest.ini
[pytest] addopts = -s -v testpaths = ./tests
十一、Allure 报告
运行测试
pytest --alluredir=reports/allure-results
生成报告
allure serve reports/allure-results
报告包含:
-
成功率
-
步骤
-
截图
-
执行时间
-
失败原因
十二、CI/CD 自动执行
例如 GitLab CI
stages: - test ui-test: stage: test script: - pip install -r requirements.txt - playwright install - pytest --alluredir=reports
十三、进阶企业级能力(建议增加)
建议再增加:
1 自动等待封装
base_page.py
2 多浏览器执行
pytest -n 4 --browser chromium
3 并发执行
pip install pytest-xdist pytest -n auto
4 自动录屏
Playwright 支持:
record_video_dir="videos/"
5 失败自动重跑
pip install pytest-rerunfailures pytest --reruns 2
十四、完整执行流程
1 安装依赖 2 playwright install 3 编写page对象 4 编写yaml测试数据 5 编写pytest用例 6 运行pytest 7 生成allure报告
更多推荐


所有评论(0)