跳至主要内容

隔离

简介

使用Playwright编写的测试在称为浏览器上下文的隔离全新环境中执行。这种隔离模型提高了可重现性并防止级联测试失败。

什么是测试隔离?

测试隔离指的是每个测试完全独立于其他测试。每个测试都独立于任何其他测试运行。这意味着每个测试都有自己的本地存储、会话存储、cookies等。Playwright通过使用BrowserContext来实现这一点,这相当于无痕模式的配置文件。它们创建起来快速且成本低,并且完全隔离,即使在单个浏览器中运行也是如此。Playwright为每个测试创建一个上下文,并在该上下文中提供一个默认的Page

为什么测试隔离很重要?

  • 无失败传递。如果一个测试失败,不会影响其他测试。
  • 调试错误或不稳定性非常容易,因为您可以按需多次运行单个测试。
  • 在并行运行、分片等情况下无需考虑执行顺序。

两种测试隔离方法

在测试隔离方面有两种不同的策略:从头开始或在测试之间进行清理。在测试之间进行清理的问题在于,很容易忘记清理,而且有些东西是无法清理的,比如"已访问的链接"。一个测试的状态可能会泄漏到下一个测试中,这可能导致测试失败,并使调试更加困难,因为问题来自另一个测试。从头开始意味着一切都是新的,因此如果测试失败,您只需在该测试内部进行调试。

Playwright如何实现测试隔离

Playwright使用浏览器上下文来实现测试隔离。每个测试都有自己的浏览器上下文。每次运行测试时都会创建一个新的浏览器上下文。当使用Playwright作为测试运行器时,浏览器上下文默认会被创建。否则,您可以手动创建浏览器上下文。

browser = playwright.chromium.launch()
context = browser.new_context()
page = context.new_page()

浏览器上下文还可用于模拟涉及移动设备、权限、区域设置和配色方案的多页面场景。查看我们的模拟指南了解更多详情。

单个测试中的多个上下文

Playwright可以在单个场景中创建多个浏览器上下文。这在您想要测试多用户功能(如聊天)时非常有用。

from playwright.sync_api import sync_playwright, Playwright

def run(playwright: Playwright):
# create a chromium browser instance
chromium = playwright.chromium
browser = chromium.launch()

# create two isolated browser contexts
user_context = browser.new_context()
admin_context = browser.new_context()

# create pages and interact with contexts independently

with sync_playwright() as playwright:
run(playwright)