Playwright与PyTest结合使用指南

简介: Playwright与PyTest强强联合,打造高效Web自动化测试方案。前者提供现代化跨浏览器自动化能力,后者带来结构化测试管理与强大扩展性。本文详解二者集成:从环境安装、用例编写、配置执行,到高级技巧如Fixture深度使用、并行测试、页面对象模式及移动端模拟,助你快速构建稳定、可维护的自动化测试体系。

Playwright与PyTest的结合为Web自动化测试注入了强大动能。通过Playwright的现代化跨浏览器自动化功能,又能借助PyTest成熟测试框架的结构化、可扩展性来高效管理和组织测试用例。我会带你了解如何将这两者结合使用。

为了让你快速上手,我先用一个流程图来概括Playwright与PyTest结合使用的核心步骤和关键配置:
企业微信截图_4e131d00-fd2f-4941-90ad-6603ff7075ad.png
下面我们来详细看看各个环节。

🛠️ 安装与环境搭建

首先,你需要安装pytest和pytest-playwright插件,并安装Playwright所需的浏览器驱动。

# 1. 安装pytest和pytest-playwright插件
pip install pytest pytest-playwright

# 2. 安装Playwright浏览器驱动(安装较慢,耐心等待)
playwright install

✍️ 编写你的第一个测试用例
创建一个测试文件(如testexample.py),PyTest会自动发现以test开头的文件或函数。

import pytest
from playwright.sync_api import Page

# 使用page fixture,它由pytest-playwright提供
def test_visit_baidu(page: Page): # 将page fixture作为参数注入
    page.goto("https://www.baidu.com")
    page.fill('//*[@id="kw"]', "Playwright") # 使用XPath定位搜索框并输入
    page.click('#su') # 使用CSS选择器定位并点击“百度一下”按钮
    assert "Playwright" in page.title() # 断言页面标题包含特定文本
    print(page.title) # 打印当前页面标题

⚙️ 配置与执行测试

PyTest-P laywright提供了丰富的命令行参数(CLI)来灵活控制测试行为:

image.png

你可以通过pytest.ini文件预设这些参数,避免每次手动输入:


# pytest.ini
[pytest]
addopts = --headed --browser chromium --slowmo 100 --video on --screenshot on

📁 Fixtures的深度使用

Fixtures是PyTest的核心功能,用于设置和清理测试环境。pytest-playwright提供了开箱即用的fixtures。

1. 使用内置Fixtures最常用的是page fixture,它为你提供了一个全新的浏览器页面。

def test_my_app(page: Page):
    page.goto("https://example.com")
    # ... 你的测试逻辑

2. Fixture的作用域 (Scope)Fixtures可以有不同的作用域,控制其创建和销毁的频率。

@pytest.fixture(scope='module') # 该fixture在整个模块中只执行一次
def browser():
    with sync_playwright() as p:
        browser = p.chromium.launch()
        yield browser # 提供浏览器实例给测试用例
        browser.close() # 所有测试完成后关闭浏览器

def test_example_1(browser): # 在不同的测试中复用同一个浏览器实例
    page = browser.new_page()
    # ...

3. 覆盖Fixtures的默认选项你可以自定义浏览器或上下文的启动参数。

# conftest.py
import pytest

@pytest.fixture(scope="session")
def browser_context_args(browser_context_args):
    return {**browser_context_args, "ignore_https_errors": True} # 忽略HTTPS错误

# 或在测试用例中直接标记以覆盖特定上下文的选项
@pytest.mark.browser_context_args(timezone_id="Europe/Berlin", locale="de-DE")
def test_with_custom_timezone(page):
    # 这个测试将在欧洲/柏林时区运行

🧰 高级技巧与最佳实践

1. 并行测试:使用pytest-xdist插件可以显著缩短大型测试集的运行时间。

pip install pytest-xdist 
pytest --numprocesses auto # 根据CPU核心数自动创建worker进程

2. 跳过测试:可以使用PyTest的skip标记根据条件跳过测试。

import pytest
@pytest.mark.skip("skip this test for now") # 无条件跳过
def test_skip_example(): 
    pass
@pytest.mark.skip_browser("firefox") # 自定义标记(需实现),跳过特定浏览器
def test_skip_firefox(page):
    pass

3. 录制生成代码:Playwright的Codegen功能可以录制你的操作并生成PyTest代码。

playwright codegen --target python-pytest -o test_recording.py https://baidu.com

4. 页面对象模式 (Page Object Model):对于复杂项目,强烈建议使用页面对象模式来分离页面元素定位和操作逻辑,提高代码的可维护性和可读性。

# 示例:一个简单的页面对象
 class BaiduPage: 
    def __init__(self, page: Page):
         self.page = page
         self.search_input = page.locator("#kw") 
        self.search_button = page.locator("#su")
      def search(self, keyword): 
        self.search_input.fill(keyword) 
        self.search_button.click()  # 在测试中使用
 def test_using_pom(page: Page): 
    baidu_page = BaiduPage(page) 
    baidu_page.search("Playwright")     # ... 断言

5. 移动端模拟与多浏览器测试:Playwright可以模拟移动设备,并利用PyTest的参数化功能进行多浏览器测试。

import pytest
 from playwright.sync_api import sync_playwright
  # 多浏览器参数化测试
 @pytest.mark.parametrize("browser_type", ["chromium", "firefox", "webkit"])
 def test_cross_browser(browser_type):
     with sync_playwright() as p:
         browser = getattr(p, browser_type).launch()
         # ... 测试逻辑
         browser.close() 
 # 移动端模拟
 def test_mobile_emulation(playwright):# 使用playwright fixture
     iphone_12 = playwright.devices['iPhone 12 Pro'] 
    browser = playwright.webkit.launch()
     context = browser.new_context(**iphone_12)
     page = context.new_page()
     page.goto("https://m.example.com")
     # ... 移动端测试逻辑
     browser.close()

💡 常见问题与排查

  • Fixtures未注入:确保测试函数的参数名与fixture名称完全一致(例如page)。
  • 异步与同步API:上述示例均使用同步API。Playwright也支持异步(async/await),如需使用异步,请确保使用async def定义测试函数,并使用from playwright.async_api import Page。
  • 元素定位问题:充分利用Playwright强大的定位器(locator),如page.locator('css=button').click(),并配合page.wait_for_selector()等等待方法避免竞态条件。
  • 查看详细输出:运行测试时添加-v或-s参数(如pytest -v -s)可以获取更详细的输出和打印语句。

Playwright与PyTest的结合,为你提供了一个功能全面、易于编写且易于维护的现代Web自动化测试方案。从简单的脚本到复杂的企业级测试套件,这个组合都能应对自如。

希望这份指南能帮助你快速上手。实践出真知,多写多试,你就会越来越熟练。

相关文章
|
Web App开发 开发框架 前端开发
Playwright与PyTest结合指南
本教程介绍如何结合Playwright与PyTest进行Web自动化测试,涵盖环境搭建、测试编写、配置管理、Fixtures使用及高级技巧,助你高效构建稳定、可维护的测试方案。
|
11月前
|
人工智能 自然语言处理 JavaScript
Playwright MCP:AI驱动自动化测试,轻松告别传统脚本编写
本文介绍如何结合Playwright与MCP协议实现对话式UI自动化测试。通过自然语言指令驱动浏览器操作,显著降低脚本编写门槛,提升测试效率。文章涵盖环境配置、核心功能及实战案例,为构建智能自动化测试方案提供完整指南。
|
11月前
|
人工智能 自然语言处理 JavaScript
借助Playwright MCP实现UI自动化测试:全面指南与实战案例
本文介绍了Playwright与MCP协议结合的UI自动化测试新方法。通过自然语言指令替代传统脚本编写,详细讲解了环境搭建、核心工具和实战案例,展示了从登录测试到报告生成的完整流程。这种创新方式显著降低了技术门槛,让非专业人员也能快速创建可靠的自动化测试。
|
9月前
|
人工智能 运维 监控
进阶指南:BrowserUse + AgentRun Sandbox 最佳实践
本文将深入讲解 BrowserUse 框架集成、提供类 Manus Agent 的代码示例、Sandbox 高级生命周期管理、性能优化与生产部署策略。涵盖连接池设计、安全控制、可观测性建设及成本优化方案,助力构建高效、稳定、可扩展的 AI 浏览器自动化系统。
1125 47
|
10月前
|
人工智能 开发框架 自然语言处理
解放双手:Playwright+AI如何让测试工程师“躺赢”
Playwright携手大模型,重塑自动化测试:代码精度与人类理解融合,让测试从“苦力”升级为“指挥”。MCP作AI之手眼,快照技术传关键上下文,实现自适应操作。案例涵盖公众号发布、智能表单填充,支持自然语言驱动、实时调试,维护成本降80%,覆盖率翻数倍,开启智能测试新纪元。
|
8月前
|
Web App开发 人工智能 前端开发
Playwright 面试必备:测试工程师的实战指南
太多新人把 Playwright 当“黑盒”用:脚本能跑就行,一问原理就懵。其实面试官不关心你用了多新潮的工具,而是你是否真正理解它、能否用它稳定解决问题。这篇整理自一线实战和大厂真题,专为测试/测开同学准备,帮你把“会用”变成“懂用”。
|
11月前
|
人工智能 自然语言处理 JavaScript
使用Playwright MCP实现UI自动化测试:从环境搭建到实战案例
本文介绍如何通过Playwright与MCP协议结合,实现基于自然语言指令的UI自动化测试。从环境搭建、核心工具到实战案例,展示AI驱动的测试新范式,降低技术门槛,提升测试效率与适应性。
|
Web App开发 人工智能 自然语言处理
Playwright MCP浏览器自动化指南
本文教你如何通过Playwright MCP让AI直接操作浏览器,自动运行和调试代码,无需手动切换界面。只需简单配置,即可用自然语言指挥AI完成页面操作、问题排查与自主修复,真正实现自动化高效开发。
|
人工智能 JavaScript 算法
Playwright携手MCP:AI智能体实现自主化UI回归测试
MCP 协议使得 AI 能够通过 Playwright 操作浏览器,其中快照生成技术将页面状态转化为 LLM 可理解的文本,成为驱动自动化测试的关键。该方式适用于探索性测试和快速验证,但目前仍面临快照信息缺失、元素定位不稳定、成本高、复杂场景适应性差以及结果确定性不足等挑战。人机协同被认为是未来更可行的方向,AI 负责执行固定流程,人类则专注策略与验证。
|
9月前
|
人工智能 算法 测试技术
AI能否实现APP自动化测试?「墨迹天气」案例完整验证
APP自动化,真的能被AI接住吗?最近,我们用一款真实App——墨迹天气,完成了从“添加”到“删除”城市的全流程自动化测试。这不是脚本拼接的Demo,而是AI测试智能体像真人一样理解意图、规划路径、执行操作,并生成可回溯的完整报告。本次演示直击一个核心问题:AI能否将测试工程师从重复、明确的执行工作中解放出来?结果,或许比你想象的更近一步。