接口测试怎么用
Playwright 内置的 APIRequestContext 可以绕过浏览器直接发 HTTP 请求:既用于接口测试,也为 UI 测试做数据准备与清理(接口建单、界面验单)。杀手锏是与浏览器上下文共享 cookie 与 storageState——接口登录一次,UI 直接用;或复用 UI 登录后的会话。用它组织「接口快、界面准」的混合套件,是平衡反馈速度与真实性的常用手段。
基本信息
| 入口 | request fixture(测试级)、playwright.request.new_context()、context.request |
|---|---|
| 会话共享 | context.request 继承对应浏览器上下文的 cookie |
| 断言 | expect(response).to_be_ok() 加状态码与 JSON 断言组合 |
| 数据准备 | beforeAll 里用接口造数,UI 用例只做业务验证 |
| 认证 | 复用 storage state,或手动在请求头带 token |
| 混合测试 | 同一用例里接口加界面组合,兼顾速度与真实性 |
混合用法示例
混合用法示例
from playwright.sync_api import expect
def test_create_order_via_api_then_ui(page, request):
resp = request.post("/api/orders", data={"sku": "SKU-1"}) # 接口造数
expect(resp).to_be_ok()
order_id = resp.json()["id"]
page.goto(f"/orders/{order_id}") # 界面验证展示
expect(page.get_by_text("待支付")).to_be_visible()典型使用场景
- 接口层回归:不起浏览器,速度快、稳定性高
- UI 用例的数据准备与清理:API 前置,UI 收尾
- 混合测试:API 造状态加界面走关键交互
- 认证复用:接口侧拿会话,界面侧免登录
- 接口冒烟进 CI:分钟级跑完核心接口
- 接口巡检:独立脚本批量扫核心接口,产出结构校验报告
- 环境切换:baseURL 与凭据从配置注入,一套用例多环境复用
四种入口怎么选
| 入口 | 作用域 | 适用 |
|---|---|---|
| request fixture | 单条测试 | 纯接口用例 |
| context.request | 共享浏览器会话 | API 加 UI 混合流 |
| request.new_context() | 独立会话 | 多账号隔离场景 |
| page.request | 页面级 | 跟随页面会话发请求 |
APIRequestContext 不受浏览器同源限制,但也不会自动重试与自动等待:超时、重试策略要自己配置。
token 与 storageState 二选一:两种认证方式混用会出现「一半请求带不上会话」的诡异失败。
别用直连数据库来造数:绕过被测试边界,接口或界面的问题会被掩盖,验证结果失真。
接口造数后要清理:残留数据会污染后续用例断言与统计报表,收尾逻辑和造数逻辑同样重要。