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

playwright支持进行API测试

示例:

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

import playwright
from playwright.sync_api import sync_playwright

with 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_playwright

with sync_playwright() as p:
    context = playwright.request.new_context()
    response = context.get("https://example.com/user/repos")
    assert response.ok
    assert response.status == 200
    assert 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 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值