在现代Web应用测试中,精准控制网络请求是提升测试效率和可靠性的关键。Playwright 提供了强大的网络请求拦截与Mock能力,让你能够:
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch()
context = browser.new_context()
page = context.new_page()
# 核心路由拦截方法
def handle_route(route):
if"api/v1/user"in route.request.url:
# 在此处处理特定请求
...
route.continue_()
# 注册全局路由处理器
page.route("**/*", handle_route)
page.goto("https://your-app.com")
def handle_route(route):
headers = route.request.headers
headers["Authorization"] = "Bearer mock_token" # 注入模拟Token
route.continue_(headers=headers) # 修改后继续请求
def mock_user_api(route):
if route.request.url.endswith("/api/user"):
# 构造JSON响应
route.fulfill(
status=200,
content_type="application/json",
body=json.dumps({"name": "测试用户", "id": 1001})
)
else:
route.continue_()
def simulate_failure(route):
if "payment-api" in route.request.url:
# 返回500错误
route.fulfill(status=500, body="Service Unavailable")
else:
route.continue_()
def replace_styles(route):
if route.request.url.endswith(".css"):
route.fulfill(
body="* { color: red !important; }" # 强制所有文字变红
)
结合 pytest 实现自动化Mock:
import pytest
from playwright.sync_api import Page
@pytest.fixture
def setup_mock(page: Page):
def mock_handler(route):
if"/data"in route.request.url:
# 根据请求参数动态响应
params = route.request.url.split("?")[1]
route.fulfill(body=f"Response to {params}")
page.route("**/api/*", mock_handler)
yield
def test_dynamic_mock(setup_mock, page: Page):
page.goto("https://app.com")
# 测试将自动获得动态Mock响应
# 监听所有请求
page.on("request", lambda req: print(f">> {req.method} {req.url}"))
# 监听所有响应
page.on("response", lambda res: print(f"<< {res.status} {res.url}"))
# 捕获请求失败
page.on("requestfailed", lambda req: print(f"!! {req.url} {req.failure}"))
避免不必要的处理开销:
# 精确匹配URL
page.route("https://api.example.com/v1/users", handler)
# 使用正则表达式
page.route(re.compile(r".*\.(jpg|png)#34;), lambda r: r.abort()) # 阻止图片加载
# 按请求类型过滤
def handle_post(route):
if route.request.method == "POST":
...
最佳实践提示:
将核心Mock逻辑封装为独立模块,通过环境变量控制Mock开关:if os.getenv("MOCK_MODE") == "enable":
apply_mocks(page)
通过灵活运用Playwright的请求拦截能力,你可以构建出完全可控的测试环境,大幅提升测试用例的稳定性和执行速度。这种技术特别适用于:
掌握这些技巧,将使你的自动化测试水平进入全新维度!
行业首个「知识图谱+测试开发」深度整合课程【人工智能测试开发训练营】,赠送智能体工具。提供企业级解决方案,人工智能的管理平台部署,实现智能化测试,落地大模型,实现从传统手工转向用AI和自动化来实现测试,提升效率和质量。
更新时间:2025-08-28
本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828
© CopyRight 2020-=date("Y",time());?> All Rights Reserved. Powered By 71396.com 闽ICP备11008920号
闽公网安备35020302034903号