当前位置: 首页 > news >正文

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

playwright支持进行API测试

示例:

如下代码创建API请求上下文,使用post方法请求API,并返回响应结果。

import playwright
from playwright.sync_api import sync_playwrightwith sync_playwright() as p:api_request_context=p.request.new_context()headers={"Content-Type":"application/json"}query_params = {"username":"tester","password":"tester"}response=api_request_context.post("https://api.pity.fun/auth/login", data=query_params,headers=headers)print(response.body())print(response)

APIRequestContext | Playwright Python

playwright.request 方法返回APIRequest类型

API请求上下文

此 API 用于 Web API 测试。您可以使用它来触发 API 端点、配置微服务、准备环境或服务以进行 e2e 测试。

每个 Playwright 浏览器上下文都与其关联 APIRequestContext 实例,该实例与浏览器上下文共享 cookie 存储,可以通过 browser_context.request 或 page.request 访问。也可以通过调用api_request.new_context()手动创建新的APIRequestContext实例。

Cookie管理

browser_context.request 返回的 APIRequestContext 和 page.request 与相应的 BrowserContext 共享 cookie 存储。每个 API 请求的标头都将填充浏览器上下文中的值。如果 API 响应包含标头,它将自动更新浏览器上下文 cookie,并且从页面发出的请求将选取它们。这意味着,如果您使用此 API 登录,您的 e2e 测试将被登录,反之亦然。CookieSet-Cookie

如果您希望 API 请求不会干扰浏览器 cookie,则应通过调用 api_request.new_context() 创建新的 APIRequestContext。此类对象将具有自己的独立 cookie 存储。

get方法

query_params = {
  "isbn": "1234",
  "page": "23"
}
api_request_context.get("https://example.com/api/getText", params=query_params)

 POST方法

body为json类型

data = {"title": "Book Title","body": "John Doe",
}
api_request_context.post("https://example.com/api/createBook", data=data)

body为formapplication/x-www-form-urlencodedmultipart/form-data类型

formData = {"title": "Book Title","body": "John Doe",
}
api_request_context.post("https://example.com/api/findBook", form=formData)

body为multipart/form-data

api_request_context.post("https://example.com/api/uploadScrip'",multipart={"fileField": {"name": "f.js","mimeType": "text/javascript","buffer": b"console.log(2022);",},}) 

delete方法

api_request_context.delete(url)
api_request_context.delete(url, **kwargs)

dispose方法

api_request_context.dispose()

fetch方法

data = {"title": "Book Title","body": "John Doe",
}
api_request_context.fetch("https://example.com/api/createBook", method="post", data=data)

请求数据类型为multipart/form-data

api_request_context.fetch("https://example.com/api/uploadScrip'",method="post",multipart={"fileField": {"name": "f.js","mimeType": "text/javascript","buffer": b"console.log(2022);",},})

 head方法

api_request_context.head(url)
api_request_context.head(url, **kwargs)

patch方法

api_request_context.patch(url)
api_request_context.patch(url, **kwargs)

put方法

api_request_context.put(url)
api_request_context.put(url, **kwargs)

storage_state

返回请求上下文的存储状态,包含当前的cookie和本地存储快照。

api_request_context.storage_state()
api_request_context.storage_state(**kwargs)

API响应

APIRequestContext请求对应方法,可以得到APIResponse,根据APIResponse获得响应结果内容。

from playwright.sync_api import sync_playwrightwith sync_playwright() as p:context = playwright.request.new_context()response = context.get("https://example.com/user/repos")assert response.okassert response.status == 200assert response.headers["content-type"] == "application/json; charset=utf-8"assert response.json()["name"] == "foobar"assert response.body() == '{"status": "ok"}'

body

返回响应体

api_response.body()

dispose

释放此响应的正文。如果未调用,则正文将保留在内存中,直到上下文关闭。 

api_response.dispose()

json

返回响应结果json

api_response.json() 

text

返回响应体的text文本

api_response.text() 

header

返回响应头

api_response.headers 

header数组

api_response.headers_array 

ok

返回响应是否成功布尔值

api_response.ok 

status

返回响应状态码

api_response.status 

status_text

返回响应结果文本值,通常是ok

api_response.status_text 

url

返回响应的URL

api_response.url 

相关文章:

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

playwright支持进行API测试 示例: 如下代码创建API请求上下文,使用post方法请求API,并返回响应结果。 import playwright from playwright.sync_api import sync_playwrightwith sync_playwright() as p:api_request_contextp.request.new…...

k8s 自身原理 4

前面咱们分享了 mater 和 worker 节点里面都有哪些组件,他们又是各自主要负责的工作是什么,现在我们心里应该都有数了吧 master 节点: etcd 存储资源配置,ApiServer 提供 RESTful Api 用于交互,scheduler 用于调度 p…...

ZLMediaKit(webrtc)在linux上(CentOS7)部署与启动

一.ZLMediaKit(webrtc)在CentOS7部署与启动 # 1. 卸载旧版本 yum remove git # 2. 安装 yum 源的 Git 版本 yum install -y git # 3. 查看版本 git version # 输出 git version 1.8.3.1配置全局环境变量 # 1. 编辑配置文件 vim /etc/profile # 2. 在 /etc/profile 文件中末尾…...

汽车基础软件新「战争」:群雄混战,谁在抢跑?

中国车用基础软件迎来了发展的黄金窗口期。 当前,汽车电子电气架构正在加速向“跨域融合”的时代演进,汽车软件架构也在加速向SOA架构升级,软硬件分层解耦成为了实现“软件定义汽车”新开发模式的前提。 过去,汽车的所有功能开发…...

阿里云预装LAMP应用导致MySQL不显示访问密码如何解决

😀前言 本篇博文是关于阿里云云服务器ECS部署MySQL过程中出现的一下坑,希望能够帮助到您😊 🏠个人主页:晨犀主页 🧑个人简介:大家好,我是晨犀,希望我的文章可以帮助到大家…...

SQL 自动清除7天前数据前收缩数据库

作用: 删除七天前数据库中间表的资料,并收缩数据库 delete-Ecustom-xml-midtable.sql delete Mid_bom where datediff(day,dty,getdate())>7 delete Mid_cus where datediff(day,dty,getdate())>7 delete Mid_exp where datediff(day,dty,getdate(…...

LangChain-ChatGLM在WIndows10下的部署

LangChain-ChatGLM在WIndows10下的部署 参考资料 1、LangChain ChatGLM2-6B 搭建个人专属知识库中的LangChain ChatGLM2-6B 构建知识库这一节:基本的逻辑和步骤是对的,但要根据Windows和现状做很多调整。 2、没有动过model_config.py中的“LORA_MOD…...

Telerik UI for ASP.NET Core Crack

Telerik UI for ASP.NET Core Crack Telerik ASP.NET Core还包括MVC和Kendo UI捆绑包(用于JavaScript)、Figma的设计工具包以及文档处理库、用于ASP.NET Core的Telerik REPL、RTL支持、辅助功能和键盘导航、主题化、虚拟课堂培训、详细文档、演示、KBs和世界级支持。使用一整套…...

【TypeScript】中关于 { 声明合并 } 的使用及注意事项

概念: 在TS中,如果定义了多个相同命名的函数,接口或者class 类,那么它们会自动合并成一个类型 函数的合并: 前面章节讲解的函数重载就是使用了定义多个函数的类型进行合并: function reverse(x: number):…...

Day 43

Day 43 1049.最后一块石头的重量II 本题中,石头的重量是 stones[i],石头的价值也是 stones[i] ,可以 “最多可以装的价值为 dp[j]” “最多可以背的重量为dp[j]” dp[j] max(dp[j], dp[j - stones[i]] stones[i]); 最后dp[target]里是…...

服务器安全需要注意的几个方面?

服务器安全需要注意的几个方面? 服务器的核心技术相对复杂,专业人员稀少,尤其在病毒技术快速更新迭代的前提下,安全问题更为突出。这里提供一些实际工作中总结出的安全防护经验,以供参考。 一,增强网络整…...

Mysql数据库第十三课-----------sql语句的拔高3--------直冲云霄

作者前言 🎂 ✨✨✨✨✨✨🍧🍧🍧🍧🍧🍧🍧🎂 ​🎂 作者介绍: 🎂🎂 🎂 🎉🎉&#x1f389…...

计算机网络-物理层(一)物理层的概念与传输媒体

计算机网络-物理层(一)物理层的概念与传输媒体 物理层相关概念 物理层的作用用来解决在各种传输媒体上传输比特0和1的问题,进而为数据链路层提供透明(看不见)传输比特流的服务物理层为数据链路层屏蔽了各种传输媒体的差异,使数据…...

差分升级在物联网水表上的实现与应用(学习)

摘要 当越来越多的物联网水表加入抄表系统后,实现了水表数据的信息化,并且当水表终端需要技术更新时,通过网络方式来升级产品可以高效修复设备面临的问题,减少用户损失,降低维护成本,但同时也对有限的网络…...

ubuntu磁盘管理

show partition information 挂载设备在这 显示文件系统信息 build file system mkfs -t ext4 /dev/nvme0n1p4命令作用:将/dev/nvme0n1p4 格式化为 ext4 建立交换分区 mkswap -c -v1 /dev/nvme0n1p4 102400-c:check -v1:新版交换分区 -v0&…...

前端处理后端返回的数据中有\n\n字样的换行符标识

后端返回的数据: 上面圈着的部分就是\n,前端需要将数据进行换行,对于这类型的数据,在前端页面是需要进行稍微处理才能正常显示。如果没有经过处理,那么内容是不会在有换行符的位置进行换行显示的 解决办法1&#xff1…...

matlab解常微分方程常用数值解法2:龙格库塔方法

总结和记录一下matlab求解常微分方程常用的数值解法,本文将介绍龙格库塔方法(Runge-Kutta Method)。 龙格库塔迭代的基本思想是: x k 1 x k a k 1 b k 2 x_{k1}x_{k}a k_{1}b k_{2} xk1​xk​ak1​bk2​ k 1 h f ( x k , t …...

数据结构-栈(C语言简单实现)

简介 栈是一种数据结构栈可以用来存放数字一次只能向栈里加入一个数字,一次也只能从栈里获得一个数字栈里到的数字有前后顺序,先进入到的数字在前,后进入的数字在后每次从栈里获取的数字一定是最后面的数字,最后获取的数字一定是…...

山东布谷科技直播软件源码探索高效、稳定直播传输的技术介绍:流媒体传输技术

今天我们探索的是让直播软件源码平台在直播时能够高效、稳定的进行直播传输的技术,而这个技术就是直播软件源码平台的流媒体传输技术,在直播软件源码平台中,流媒体传输技术会将直播的图像、视频、音频等相关的流媒体信号通过网络传递到用户的…...

LeetCode 热题 100 JavaScript -- 74. 搜索二维矩阵

给你一个满足下述两条属性的 m x n 整数矩阵: 每行中的整数从左到右按非递减顺序排列。 每行的第一个整数大于前一行的最后一个整数。 给你一个整数 target ,如果 target 在矩阵中,返回 true ;否则,返回 false 。 …...

挑战杯推荐项目

“人工智能”创意赛 - 智能艺术创作助手:借助大模型技术,开发能根据用户输入的主题、风格等要求,生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用,帮助艺术家和创意爱好者激发创意、提高创作效率。 ​ - 个性化梦境…...

python打卡day49

知识点回顾: 通道注意力模块复习空间注意力模块CBAM的定义 作业:尝试对今天的模型检查参数数目,并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...

定时器任务——若依源码分析

分析util包下面的工具类schedule utils: ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类,封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz,先构建任务的 JobD…...

Frozen-Flask :将 Flask 应用“冻结”为静态文件

Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是:将一个 Flask Web 应用生成成纯静态 HTML 文件,从而可以部署到静态网站托管服务上,如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...

跨链模式:多链互操作架构与性能扩展方案

跨链模式:多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈:模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展(H2Cross架构): 适配层&#xf…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成

厌倦手动写WordPress文章?AI自动生成,效率提升10倍! 支持多语言、自动配图、定时发布,让内容创作更轻松! AI内容生成 → 不想每天写文章?AI一键生成高质量内容!多语言支持 → 跨境电商必备&am…...

工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配

AI3D视觉的工业赋能者 迁移科技成立于2017年,作为行业领先的3D工业相机及视觉系统供应商,累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成,通过稳定、易用、高回报的AI3D视觉系统,为汽车、新能源、金属制造等行…...

优选算法第十二讲:队列 + 宽搜 优先级队列

优选算法第十二讲:队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...

HashMap中的put方法执行流程(流程图)

1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中,其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下: 初始判断与哈希计算: 首先,putVal 方法会检查当前的 table(也就…...

论文笔记——相干体技术在裂缝预测中的应用研究

目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术:基于互相关的相干体技术(Correlation)第二代相干体技术:基于相似的相干体技术(Semblance)基于多道相似的相干体…...