下面是一套 企业级 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报告
Logo

这里是“一人公司”的成长家园。我们提供从产品曝光、技术变现到法律财税的全栈内容,并连接云服务、办公空间等稀缺资源,助你专注创造,无忧运营。

更多推荐