一、为何需要 Pytest + Playwright 集成?
在自动化测试中,测试框架的集成能力直接影响脚本的复用性和执行效率。Playwright 提供强大的浏览器控制能力,而 Pytest 作为 Python 生态中最流行的测试框架,其参数化测试、Fixture 管理和并行执行功能可显著提升测试覆盖率和执行速度。
核心价值对比:
| 传统模式 | Pytest 集成模式 |
|---|---|
| 手动编写重复测试逻辑 |
参数化驱动多场景测试 |
| 串行执行浏览器测试 |
多浏览器并行执行 |
| 缺乏统一报告和失败重试机制 |
自动生成 HTML 报告 + 失败重试 |
二、参数化测试实战:四种模式详解
参数化是减少代码冗余的核心手段,Pytest 通过 @pytest.mark.parametrize 实现数据驱动测试。
1. 基础参数化:多账号登录测试
import pytest
from playwright.sync_api import Page
@pytest.mark.parametrize("username, password", [
("user1", "pass1"),
("user2", "pass2"),
("admin", "admin123")
])
def test_login(page: Page, username, password):
page.goto("https://example.com/login")
page.locator("#username").fill(username)
page.locator("#password").fill(password)
page.locator("#submit").click()
assert page.url == "https://example.com/dashboard"
2. 文件驱动参数化:从 CSV 读取测试数据
import csv
import pytest
def load_test_data():
with open("test_data.csv") as f:
return list(csv.reader(f))
@pytest.mark.parametrize("product, quantity", load_test_data())
def test_add_to_cart(page: Page, product, quantity):
page.locator(f"text={product}").click()
page.locator("#quantity").fill(quantity)
page.locator("#add-cart").click()
assert page.locator(".cart-count").text_content() == quantity
3. 动态参数生成:组合测试策略
import pytest
from itertools import product
# 生成浏览器+分辨率组合参数
browsers = ["chromium", "firefox"]
resolutions = [(1920, 1080), (375, 812)]
@pytest.mark.parametrize("browser_type, resolution", product(browsers, resolutions))
def test_responsive(browser_type, resolution, request):
browser = request.getfixturevalue("browser")
context = browser.new_context(viewport={"width": resolution[0], "height": resolution[1]})
page = context.new_page()
page.goto("https://example.com")
assert page.locator("#header").is_visible()
4. Fixture 参数化:复用浏览器上下文
@p

最低0.47元/天 解锁文章
2230

被折叠的 条评论
为什么被折叠?



