Playwright与PyTest结合指南

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

为了让你快速上手,我先用一个流程图来概括Playwright与PyTest结合使用的核心步骤和关键配置:

图片

下面我们来详细看看各个环节。

🛠️ 安装与环境搭建

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

# 1. 安装pytest和pytest-playwright插件
pip install pytest pytest-playwright# 2. 安装Playwright浏览器驱动(安装较慢,耐心等待)
playwright install

✍️ 编写你的第一个测试用例

创建一个测试文件(如test_example.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)来灵活控制测试行为:

参数 (--)

说明

示例

--headed

有头模式(显示浏览器UI)下运行测试(默认:无头模式)

pytest --headed
--browser

指定浏览器(chromiumfirefoxwebkit)。可多次指定

pytest --browser chromium --browser firefox
--slowmo

减慢操作速度(毫秒),便于观察

pytest --slowmo 1000
--video

录制视频(onoffretain-on-failure

pytest --video on
--screenshot

截屏(onoffonly-on-failure

pytest --screenshot on
--tracing

记录追踪信息(onoffretain-on-failure),用于调试

pytest --tracing on
--numprocesses

使用pytest-xdist进行并行测试

pytest --numprocesses auto

你可以通过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 = pageself.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 fixtureiphone_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自动化测试方案。从简单的脚本到复杂的企业级测试套件,这个组合都能应对自如。

测试开发全景图:人工智能测试、智能驱动、自动化、测试开发、左移右移与DevOps的持续交付https://ceshiren.com/t/topic/34328

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/94629.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/94629.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

plantsimulation知识点 一条轨道上多台RGV如何引用

最近做项目有如下需求:轨道1上初始化生成三台RGV,然后通过另一条轨道2上的传感器代码控制轨道1上的三台RGV,之前如果另一条轨道只有一台RGV,我是通过轨道2.cont来引用这台RGV的。但是现在轨道上有了多台RGV,此代码就不…

【Canvas与盾牌】“靡不有初,鲜克有终”黄竖条盾牌

【成图】【代码】<!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>黄竖条盾牌 Draft1</title><style type"text/css"&…

使用linux+javascript+html+mysql+nodejs+npm+express等构建信息资料采集系统

一、适用场景 1、人才信息库、档案管理&#xff0c;构建企业或单位内部人才库。 2、公务员/事业单位招聘&#xff0c;网上报名填写资料、上传证书等。 3、科研项目申报&#xff0c;课题负责人信息、成果附件、审查材料上传。 4、志愿者招募&#xff1a;在线填写报名信息&#…

低空经济产业白皮书:音视频链路在智能飞行体系中的核心地位

引言 低空经济正在成为继数字经济、新能源产业之后的又一战略制高点。它不仅意味着无人机物流、空中通勤、应急救援、文旅体验等新业态的兴起&#xff0c;更代表着 城市治理、智能制造、公共服务全面进入空域数字化时代。从政策引导到产业投资&#xff0c;从技术突破到应用创新…

【LeetCode 热题 100】32. 最长有效括号——(解法二)动态规划

Problem: 32. 最长有效括号 文章目录整体思路完整代码时空复杂度时间复杂度&#xff1a;O(N)空间复杂度&#xff1a;O(N)整体思路 这段代码同样旨在解决 “最长有效括号” 问题&#xff0c;但它采用的是一种 动态规划 (Dynamic Programming) 的方法。这种方法通过构建一个DP表…

使用Docker部署ZLMediaKit流媒体服务器实现gb/t28181协议的设备

最近在研究一个摄像头&#xff0c;通信协议是 gb/t28181。对于这个协议也是第一次接触&#xff0c;通过查阅多方资料&#xff0c;找到了两个开源的源码&#xff0c;来实现 视频播放、摄像头直播。以前也没有深入的了解过关于视频播放的这方面的技术&#xff0c;偶尔网站播放视频…

硬件三人行--运算基础篇

第3讲 负反馈放大电路

【LINUX网络】TCP原理

目录 本文介绍 1. 什么是TCP&#xff1f; 2. TCP结构 为什么需要协议栈&#xff1a;两台主机通信的复杂性解决方案 3. 确认应答机制 进一步理解什么是确认和请求以及序号 进一步理解什么是序号和确认序号 并发发送带来的问题以及解决方案&#xff08;序号&#xff09; …

Java -- 文件基础知识--Java IO流原理--FileReader

目录 1. 常用文件操作 2. Java IO流原理 2.1 流的分类 3. FileReader和FileWriter介绍 FileReader相关方法&#xff1a; FileWriter常用方法&#xff1a; 文件是保存数据的地方&#xff0c;比如大家经常使用的word文档&#xff0c;txt文件&#xff0c;excel文件...都是文…

向量方法证明正余弦定理的数学理论体系

向量方法证明正余弦定理的数学理论体系 摘要&#xff1a; 向量理论为几何定理的证明提供了强有力的代数化工具。本文基于向量空间的基本概念与运算性质&#xff0c;严格推导平面几何中的正弦定理与余弦定理。通过建立系统的向量表示框架&#xff0c;将几何关系转化为向量运算&a…

【笔记ing】大模型算法架构

前言 随着人工智能技术的飞速发展,大模型算法及其架构已成为推动科技前沿的重要力量。它们不仅能够处理海量的数据,还具备强大的表征学习能力,能够应对日益复杂的场景需求。本章节将介绍大模型算法及其架构,带您了解其背后的原理、技术创新以及在实际应用中的广阔前景。 …

ConcurrentHashMap的原理

1.底层数据结构JDK1.7底层采用分段的数组链表实现JDK1.8 采用的数据结构跟HashMap1.8的结构一样,数组链表/红黑二叉树2.加锁的方式JDK1.7采用Segment分段锁,底层使用的是ReentrantLockJDK1.8采用CAS添加新节点,采用synchronized锁定链表或红黑二叉树的首节点,相对Segment分段锁…

【论文阅读】健全个体无辅助运动期间可穿戴传感器双侧下肢神经机械信号的基准数据集

Benchmark Datasets for Bilateral Lower-Limb Neuromechanical Signals from Wearable Sensors during Unassisted Locomotion in Able-Bodied Individuals 原文&#xff1a;DOI&#xff1a; 10.3389/frobt.2018.00014 2018年 翻译&#xff1a;靠岸学术 目录 1引言 2仪器设…

反向海淘系统搭建:从架构设计到合规运营的全方位指南

一、系统架构设计1.1 分层架构设计反向海淘系统通常采用四层架构设计&#xff1a;‌接入层‌&#xff1a;负责与淘宝开放平台、1688海外接口通信&#xff0c;处理接口认证、请求转发与响应解析。‌业务层‌&#xff1a;包含商品检索、订单管理、支付处理、物流追踪等核心模块。…

20.22 QLoRA微调实战:中文语音识别数据准备全流程解密

QLoRA微调实战:中文语音识别数据准备全流程解密 实战项目:QLoRA 微调数据准备详解 本环节我们将以中文语音识别任务为场景,详细拆解 QLoRA 微调前的数据准备流程。以下流程图展示了完整的数据处理路径: #mermaid-svg-A3ZpWn1ysZUg6jg4 {font-family:"trebuchet ms&q…

工业电子看板赋能线缆工厂生产高效运转

在制造业智能化转型的浪潮中&#xff0c;工业电子看板已不再只是“显示数据的屏幕”&#xff0c;而是成为连接设备层、控制层与管理层的实时信息枢纽。尤其在线缆制造这类对工艺参数敏感、生产连续性要求高的行业中&#xff0c;电子看板通过对关键数据的透明化、实时化与交互化…

Java爬虫是什么,如何获取API接口

一、Java爬虫的定义Java爬虫是一种基于Java编程语言开发的网络爬虫程序。它通过模拟浏览器行为&#xff0c;向目标网站发送HTTP请求&#xff0c;获取网页内容并解析出所需数据。Java爬虫技术广泛应用于数据采集、市场分析、竞争情报等领域。二、Java爬虫获取API接口的方法&…

Python篇---返回类型

基础返回类型&#xff1a;在 Python 中&#xff0c;函数的返回类型就像函数 “产出” 的不同 “物品”&#xff0c;理解它们能帮你更好地控制代码的输出。下面用通俗的方式介绍常见的返回类型及用法&#xff1a;一、最基础的返回类型1. 无返回值&#xff08;None&#xff09;特…

ArkTS 与 TypeScript 的关系及鸿蒙开发常见错误案例

随着 HarmonyOS NEXT&#xff08;纯血鸿蒙&#xff09; 的到来&#xff0c;开发者在学习鸿蒙应用开发时会遇到一个新的语言 —— ArkTS。很多人会疑惑&#xff1a;它和 TypeScript&#xff08;TS&#xff09;是什么关系&#xff1f;又有哪些新的特性&#xff1f;在实际开发中&a…

初识socket编程(实现一个简单的TCPServer)

监听套接字的创建流程 在网络编程中&#xff0c;listen 套接字&#xff08;通常称为“监听套接字”&#xff09;是服务器端用于接收客户端连接请求的特殊套接字&#xff0c;是 TCP 服务器建立连接过程中的核心组件。下面我们就来简单看一下监听套接字创建的过程创建流程&#x…