Playwright Python API 测试:从入门到实践

Python+Playwright自动化入门 Playwright 是专门为满足端到端测试的需求而创建的。Playwright 支持所有现代渲染引擎,包括 Chromium、WebKit 和 Firefox。在 Windows、Linux 和 macOS 上进行测试,在本地或在 CI 上进行测试,无头或使用本机移动仿真。参考:(官方文档)注:Python版本需要3.8及以上。 阅读详情

Playwright Python API 测试:从入门到实践

在现代软件开发中,API 测试是确保应用程序后端功能正常运行的关键环节。Playwright 是一个强大的自动化测试工具,支持多种编程语言,其中包括 Python。通过 Playwright,我们可以方便地对 REST API 进行测试,而无需依赖于加载页面或运行 JavaScript 代码。本文将详细介绍如何使用 Playwright for Python 进行 API 测试,从环境配置到测试用例编写,再到测试的执行与验证。

内容架构

  1. Playwright API 测试简介
    • 介绍 Playwright 的 API 测试功能及其应用场景。
  2. 环境配置
    • 说明如何安装 Playwright 和配置必要的环境变量。
  3. 编写 API 测试
    • 通过具体示例展示如何使用 Playwright 的 APIRequestContext 发送 HTTP 请求。
  4. 测试用例的组织与执行
    • 介绍如何使用 Pytest 框架组织测试用例,并通过 fixtures 管理测试环境。
  5. 测试数据的准备与清理
    • 展示如何通过 API 调用准备测试数据,并在测试完成后清理资源。
  6. 测试用例的完整示例
    • 提供一个完整的测试用例,包括创建测试仓库、创建问题、验证问题列表等。
  7. 进阶应用
    • 介绍如何通过 API 调用准备服务器状态、验证用户操作后的服务器状态,以及如何复用认证状态。
  8. 总结
    • 总结 Playwright 在 API 测试中的优势和适用场景。

Playwright API 测试简介

Playwright 是一个跨浏览器的自动化测试工具,支持 Chrome、Firefox 和 WebKit 等主流浏览器。除了用于前端界面的自动化测试外,Playwright 还提供了强大的 API 测试功能。通过 API 测试,我们可以直接与服务器进行交互,发送 HTTP 请求并验证响应,从而实现以下目标:

  • 测试服务器端的 API 功能。
  • 在测试前端功能之前,通过 API 调用准备服务器端的状态。
  • 在用户操作后,通过 API 验证服务器端的状态是否符合预期。

环境配置

在开始编写 API 测试之前,我们需要先安装 Playwright 和配置必要的环境变量。以下是具体步骤:

  1. 安装 Playwright
    使用 pip 安装 Playwright for Python:

    pip install playwright
    playwright install
    
  2. 安装 Pytest
    Pytest 是一个流行的 Python 测试框架,Playwright 提供了对 Pytest 的支持,可以通过以下命令安装:

    pip install pytest pytest-playwright
    
  3. 配置环境变量
    GitHub API 需要认证令牌(Token),因此需要在环境变量中设置 GITHUB_API_TOKEN 和 GITHUB_USER:

    export GITHUB_API_TOKEN="your_github_token"
    export GITHUB_USER="your_github_username"
    

编写 API 测试

Playwright 的 APIRequestContext 提供了发送 HTTP 请求的功能。以下是一个简单的示例,展示如何使用 APIRequestContext 向 GitHub API 发送请求。

示例:创建 GitHub 问题

import os
import pytest
from playwright.sync_api import Playwright, APIRequestContext

GITHUB_API_TOKEN = os.getenv("GITHUB_API_TOKEN")
assert GITHUB_API_TOKEN, "GITHUB_API_TOKEN is not set"

GITHUB_USER = os.getenv("GITHUB_USER")
assert GITHUB_USER, "GITHUB_USER is not set"

GITHUB_REPO = "test"

@pytest.fixture(scope="session")
def api_request_context(playwright: Playwright) -> APIRequestContext:
    headers = {
        "Accept": "application/vnd.github.v3+json",
        "Authorization": f"token {GITHUB_API_TOKEN}",
    }
    request_context = playwright.request.new_context(
        base_url="https://api.github.com", extra_http_headers=headers
    )
    yield request_context
    request_context.dispose()

编写测试用例

以下是一个测试用例,验证是否可以通过 GitHub API 创建一个新的问题:

def test_should_create_bug_report(api_request_context: APIRequestContext) -> None:
    data = {
        "title": "[Bug] report 1",
        "body": "Bug description",
    }
    new_issue = api_request_context.post(
        f"/repos/{GITHUB_USER}/{GITHUB_REPO}/issues", data=data
    )
    assert new_issue.ok

    issues = api_request_context.get(f"/repos/{GITHUB_USER}/{GITHUB_REPO}/issues")
    assert issues.ok
    issues_response = issues.json()
    issue = list(
        filter(lambda issue: issue["title"] == "[Bug] report 1", issues_response)
    )[0]
    assert issue
    assert issue["body"] == "Bug description"

测试用例的组织与执行

在 Playwright 中,测试用例通常使用 Pytest 框架进行组织和执行。Pytest 提供了强大的 fixtures 功能,可以用于管理测试环境的初始化和清理。

使用 fixtures 管理测试环境

以下是一个使用 fixtures 管理测试环境的示例:

@pytest.fixture(scope="session", autouse=True)
def create_test_repository(api_request_context: APIRequestContext) -> None:
    # Before all
    new_repo = api_request_context.post("/user/repos", data={"name": GITHUB_REPO})
    assert new_repo.ok
    yield
    # After all
    deleted_repo = api_request_context.delete(f"/repos/{GITHUB_USER}/{GITHUB_REPO}")
    assert deleted_repo.ok

在这个示例中,create_test_repository fixture 在所有测试用例执行之前创建一个新的 GitHub 仓库,并在所有测试用例执行完成后删除该仓库。

测试数据的准备与清理

在测试过程中,我们通常需要准备一些测试数据,并在测试完成后清理这些数据,以确保测试环境的干净和稳定。以下是一个完整的测试用例,包括测试数据的准备和清理:

完整测试用例

import os
import pytest
from playwright.sync_api import Playwright, APIRequestContext

GITHUB_API_TOKEN = os.getenv("GITHUB_API_TOKEN")
assert GITHUB_API_TOKEN, "GITHUB_API_TOKEN is not set"

GITHUB_USER = os.getenv("GITHUB_USER")
assert GITHUB_USER, "GITHUB_USER is not set"

GITHUB_REPO = "test"

@pytest.fixture(scope="session")
def api_request_context(playwright: Playwright) -> APIRequestContext:
    headers = {
        "Accept": "application/vnd.github.v3+json",
        "Authorization": f"token {GITHUB_API_TOKEN}",
    }
    request_context = playwright.request.new_context(
        base_url="https://api.github.com", extra_http_headers=headers
    )
    yield request_context
    request_context.dispose()

@pytest.fixture(scope="session", autouse=True)
def create_test_repository(api_request_context: APIRequestContext) -> None:
    # Before all
    new_repo = api_request_context.post("/user/repos", data={"name": GITHUB_REPO})
    assert new_repo.ok
    yield
    # After all
    deleted_repo = api_request_context.delete(f"/repos/{GITHUB_USER}/{GITHUB_REPO}")
    assert deleted_repo.ok

def test_should_create_bug_report(api_request_context: APIRequestContext) -> None:
    data = {
        "title": "[Bug] report 1",
        "body": "Bug description",
    }
    new_issue = api_request_context.post(
        f"/repos/{GITHUB_USER}/{GITHUB_REPO}/issues", data=data
    )
    assert new_issue.ok

    issues = api_request_context.get(f"/repos/{GITHUB_USER}/{GITHUB_REPO}/issues")
    assert issues.ok
    issues_response = issues.json()
    issue = list(
        filter(lambda issue: issue["title"] == "[Bug] report 1", issues_response)
    )[0]
    assert issue
    assert issue["body"] == "Bug description"

进阶应用

通过 API 调用准备服务器状态

在某些测试场景中,我们可能需要在用户操作之前通过 API 调用准备服务器的状态。以下是一个示例,展示如何通过 API 创建问题,并验证问题是否出现在页面上:

def test_last_created_issue_should_be_first_in_the_list(api_request_context: APIRequestContext, page: Page) -> None:
    def create_issue(title: str) -> None:
        data = {
            "title": title,
            "body": "Feature description",
        }
        new_issue = api_request_context.post(
            f"/repos/{GITHUB_USER}/{GITHUB_REPO}/issues", data=data
        )
        assert new_issue.ok
    create_issue("[Feature] request 1")
    create_issue("[Feature] request 2")
    page.goto(f"https://github.com/{GITHUB_USER}/{GITHUB_REPO}/issues")
    first_issue = page.locator("a[data-hovercard-type='issue']").first
    expect(first_issue).to_have_text("[Feature] request 2")

验证用户操作后的服务器状态

在用户通过界面完成操作后,我们可以通过 API 验证服务器的状态是否符合预期

Playwright Web 自动化测试:Python 版入门指南 本文介绍了如何使用Python版Playwright进行Web自动化测试。Playwright是微软开发的开源框架,支持Chromium、Firefox和WebKit浏览器,提供页面交互、截图、视频录制等功能。文章详细讲解了环境配置、基础操作(启动浏览器、填写表单、点击按钮)以及调试技巧(日志记录、断点调试、Inspector工具)。通过Python集成,开发者可以高效实现跨浏览器的Web自动化测试,提升应用测试的效率和可靠性。 阅读详情

相关推荐

Python + Playwright(21):API接口测试

Playwright 是一个强大的自动化框架,不仅可用于浏览器测试,还可以进行 API 测试。本文将探讨如何利用 Playwright 进行有效的 API 测试,涵盖设置、编写测试等内容。A

blues_C的博客 1998

Python Playwright API使用实例详解

下方查看历史精选文章重磅发布 - 自动化框架基础指南pdfv1.1大数据测试过程、策略及挑战测试框架原理,构建成功的基石在自动化测试工作之前,你应该知道的10条建议在自动化测试中,重要的不是工具什么是 PlaywrightPlaywright 是一个 Node.js 库,它提供了一个高级的 API 来自动化 Chromium、Firefox 和 WebKit 浏览器中的操作。Python Play...

开源优测 1651

Playwright+Python自动化测试入门:环境搭建、脚本录制与断点调试

自动化测试中,浏览器驱动版本匹配常导致环境问题。Playwright 内置浏览器二进制与通信协议,通过 playwright install 即可完成环境准备,无需手动配置驱动。其同步与异步 API 支持不同并发场景,codegen 录制可快速生成脚本,page.pause() 提供断点调试能力。这些特性降低了自动化测试的入门门槛,适用于 Web 页面巡检、数据采集和 CI 集成。本文基于《Playwright+Python 自动化测试》第一章 PDF,拆解从 Selenium 迁移到 Playwright

weixin_28833069的博客 249

playwright API测试

【代码】playwright API测试。

我们一起进步吧 979

Playwright+Python自动化测试:环境准备与快速开始实战指南

自动化测试框架选型中,浏览器驱动版本管理是常见痛点。Playwright 通过内置浏览器和自动等待机制,简化了环境配置与元素定位流程。其核心原理在于进程外运行测试和 Web 优先断言,提升了跨浏览器测试的稳定性与执行速度。在 Python 自动化测试场景下,Playwright 支持同步与异步写法,结合 codegen 录制和 Inspector 调试,能快速生成可维护的测试脚本。本文围绕 Playwright 环境准备与快速开始,梳理从安装到跑通第一段脚本的完整路径,帮助测试团队避开驱动版本对齐等历史包袱

weixin_28826961的博客 113

Playwright+Python自动化测试:从环境准备到快速上手的完整指南

在UI自动化测试中,元素定位不稳定、页面加载超时、脚本脆弱等问题常让测试工程师疲于应对。Playwright作为新一代浏览器自动化框架,通过自动等待机制和浏览器上下文隔离,将稳定性内建到框架底层,显著降低脚本维护成本。其三层对象模型(Browser、Context、Page)提供了清晰的资源管理边界,适合并行测试与多场景隔离。面对从Selenium迁移或初学Playwright的开发者,环境准备往往是第一道门槛——Python虚拟环境、驱动安装、浏览器二进制下载缺一不可。而借助pytest-playwrig

weixin_28833069的博客 124

palywright: API测试(APIRequestContext, APIResponse)

【代码】palywright: API测试(APIRequestContext, APIResponse)

z917185537的专栏 1091

图论:Dijkstra算法——最详细的分析,图文并茂,一次看懂!

Dijstra算法

普罗米修斯的博客 18万+

最强自动化测试框架Playwright(23)-API测试

playwright支持进行API测试playwright.request 方法返回APIRequest类型。

seanyang_的博客 1332

基于ADS\HFSS\Matlab的平面带通发夹滤波器设计

写在最前面,前段时间完成了一个小项目,实现13.5~14GHz的带通滤波器,算是第一个微波项目,在老师、学长、各种大神的指点下,最终完成了指标,想来这段时间收获良多,想到老师教导的,有能力的话要尽可能帮助别人,以及网络上很少面向于小白的教程,于是决定把自己做这个小项目的经过,一些关键步骤,还有软件操作和公式讲解都发出来,供大家指正借鉴。由于我目前大三,刚学习电磁场、微波工程等等,技术实在有限,同时这样是我第一次发帖子,只能尽可能的将自己确认过正确的内容,步骤以及一些经验写出来,供大家借鉴。

likaifeng12138的博客 5219

从零开始:QNX SDP 8.0开发环境搭建与实战入门

本文详细介绍了如何从零开始搭建QNX SDP 8.0开发环境并进行实战入门。内容涵盖许可证获取、环境安装、命令行与IDE工具使用、BSP构建、系统镜像生成,以及编写、编译和运行第一个QNX程序的全过程。旨在帮助嵌入式开发者,特别是汽车电子和工业控制领域的工程师,快速掌握这一实时操作系统(RTOS)的开发基础。

weixin_29163857的博客 641

Playwright Python入门指南:5分钟搭建第一个自动化测试

还在为Web自动化测试的复杂性而头疼吗?每次遇到浏览器兼容性问题、异步操作等待、或者元素定位困难时,是否感到束手无策?本文将带你5分钟快速上手Playwright Python,轻松搭建你的第一个自动化测试! 通过本文,你将获得: - ✅ Playwright Python的完整安装配置指南 - ✅ 同步和异步两种编程模式的实战示例 - ✅ 跨浏览器自动化测试的最佳实践 - ✅ 常见Web操作(...

gitblog_00384的博客 891

csp-j/s

CSP-J/S 是中国计算机学会(CCF)主办的 ‌‌(Certified Software Professional Junior/Senior),是信息学奥赛(NOI)体系的入门级选拔考试,也是国内最具权威性的青少年编程能力认证之一。

gxyxxrYYDS的博客 2028

三分钟掌握Playwright Python:跨浏览器自动化测试终极指南

还在为Web自动化测试的兼容性问题头疼吗?Playwright Python为你提供了终极解决方案!这是一个强大的Python库,能够自动化Chromium、Firefox和WebKit三大浏览器,实现真正的跨浏览器测试。无论你是测试新手还是经验丰富的开发者,Playwright都能让你的自动化测试工作变得简单高效。 ## 🔍 痛点分析与解决方案概述 **问题一:浏览器兼容性测试太复杂?**

gitblog_00201的博客 280

TortoiseGit之配置密钥

基于github的开发必须要用到rsa密钥,因此需要用到TortoiseGit的putty key generator工具,来生成既适用于github的rsa密钥也适用于TortoiseGit的ppk密钥。

欧文的博客 2079

攻克低照度检测难题:YOLOv11主干网络增强新方案PE-YOLO详解

编码器部分# 解码器部分self.dec_conv2 = nn.Conv2d(512, 128, 3, padding=1) # 跳跃连接self.dec_conv3 = nn.Conv2d(256, 64, 3, padding=1) # 跳跃连接self.dec_conv4 = nn.Conv2d(128, 32, 3, padding=1) # 跳跃连接# 编码路径# 解码路径(带跳跃连接)

FJN110的博客 106

3分钟上手Playwright Python:API自动化测试从入门到实战

你是否还在为API测试工具配置复杂而烦恼?是否在寻找一个既能处理HTTP请求又能集成浏览器自动化的全能解决方案?本文将带你3分钟入门Playwright Python的API测试功能,从环境搭建到实战案例,让你快速掌握RESTful API自动化验证的核心技巧。读完本文后,你将能够独立编写API测试脚本、处理认证授权、验证响应数据,并集成到你的测试流程中。 ## 为什么选择Playwright ...

gitblog_00009的博客 1227

Flink 运维监控与指标采集实战(Prometheus + Grafana 全流程)

Flink运维监控在实时计算场景中至关重要,因为Flink作业需要7×24小时稳定运行,对性能、资源、故障感知和状态变化的实时监控是保障系统稳定的关键。Flink自带的Metrics系统提供了基本的监控能力,但为了更全面的监控,Prometheus+Grafana成为最主流的解决方案。通过配置PrometheusReporter和Grafana仪表盘,可以实现对Flink作业的全面监控,包括CPU、内存、吞吐量、Checkpoint状态、KafkaSink性能等关键指标。此外,自定义指标采集和报警机制的配置

晴天彩虹雨的博客 1368

Playwright Python端到端测试:告别Selenium等待地狱

端到端测试是保障Web应用质量的关键环节,其核心在于稳定、可观测、跨浏览器的自动化执行能力。传统方案如Selenium依赖脆弱的同步等待与CSS选择器,易受页面加载时序、框架渲染机制及UI变更影响;而Playwright基于事件驱动架构与浏览器协议层深度集成,提供语义化定位、自动等待、全栈网络/控制台/性能可观测性等原生支持。它不仅提升测试稳定性与可维护性,更将质量验证左移到开发阶段,成为Python工程师构建高可靠性Web系统的技术标配。

weixin_30444105的博客 3712

【实验必备】对AffectNet数据集进行人脸对齐的小Demo

本文首先简单介绍了AffectNet数据集,及人脸关键点等背景知识,接着Po出了人脸对齐的代码及效果展示。注:本文代码参考自FG2021的Emotion-GCN的开源代码,具有一定的可靠性,欢迎大家学习!

信小海 2670

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

【Playwright+Python】使用Playwright进行API接口测试

在当今的自动化测试领域,结合Web UI和API接口测试已成为提升测试覆盖率和效率的关键。Playwright作为一个强大的自动化测试工具,除了在Web UI测试中大放异彩,还能与Python结合,实现强大的API接口测试功能。本文将带你探索如何使用Playwright和Python进行高效的API接口测试。Playwright除了在Web UI测试中的出色表现,如何通过与Python结合,开展API接口测试,并实现高效的自动化测试?playwright也是可以做接口测试的,但个人觉得还是没有。

朱雀随云记的博客 1542

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Python Playwright的同步API和异步API

同步 API:适合不需要并发的应用场景,简化了代码结构,避免了异步编程的复杂性。异步 API:适合高并发应用,如同时处理多个页面或任务,能够提高性能并减少阻塞。

freetester的博客 1242

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Playwright Python API 测试实战:用 APIRequestContext 测试 REST 接口与验证服务端状态

本文基于 Playwright 官方文档 [API testing (Python)](https://link.gitcode.com/i/fb9991304c9367025473081191caa944) 编写,围绕 `APIRequestContext` 这一核心对象展开:如何在纯 Python 环境下不启动页面直接发送 HTTP(S) 请求测试 REST API、如何用 API 调用为浏览

gitblog_00497的博客 777

Playwright Python API测试实战:从基础到混合测试的完整指南

API测试是现代软件质量保障的核心环节,它通过模拟客户端请求来验证后端服务的功能、性能和可靠性。其原理在于发送HTTP请求并断言响应,确保接口契约的正确性。在微服务与前后端分离架构下,API测试的技术价值尤为突出,它能快速反馈、易于自动化,是持续集成流程的关键部分。常见的应用场景包括RESTful接口验证、数据一致性检查以及服务间集成测试。本文聚焦于使用Playwright Python这一新兴工具进行API测试,它通过内置的APIRequestContext提供了强大的HTTP客户端能力,并支持与浏览器上

weixin_33700809的博客 334

Python,Playwright 测试全面指南:从理论到实践

Playwright是一个跨浏览器自动化测试框架,支持Chrome、Firefox和Safari等主流浏览器。它提供了强大的功能,包括网页测试、数据抓取和性能监控等。通过汽车修理工、餐厅神秘顾客等生活化比喻,文章生动地解释了Playwright的工作原理。最佳实践部分强调了模块化设计、PageObject模式等专业技巧,并提供了电商网站测试等实际案例。文章还介绍了录制调试、处理复杂场景等高级功能,最后总结了选择稳定选择器、并行执行等核心要点,帮助开发者像专业工匠一样使用Playwright进行高效测试。

leohu0723的博客 1153

为什么Playwright Python是构建现代Web测试框架的最佳选择?

你是否曾为跨浏览器测试的复杂性而头疼?当同一段测试代码在Chrome上运行正常,却在Firefox或Safari上频繁失败时,那种挫败感是否让你想要放弃自动化测试?传统的WebDriver方案在处理现代单页应用时显得力不从心,而Playwright Python的出现彻底改变了这一局面。这个基于Python的浏览器自动化库不仅解决了跨浏览器一致性问题,更带来了全新的测试思维模式。Playwrigh

gitblog_00206的博客 940
上一篇: Playwright Python 输入操作指南
下一篇: 深入解析Playwright for Python:浏览器功能与代码实例详解
未来创世纪
博客等级 码龄18年 960粉丝 209原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值