隔离
介绍
使用 Playwright 编写的测试在称为浏览器上下文的隔离干净环境中执行。这种隔离模型提高了可重复性并防止级联测试失败。
什么是测试隔离?
测试隔离是指每个测试与其他测试完全隔离。每个测试独立于任何其他测试运行。这意味着每个测试都有自己的本地存储、会话存储、cookie 等。Playwright 使用 BrowserContext 实现此目的,它相当于隐身模式的配置文件。它们创建速度快且资源消耗低,并且即使在单个浏览器中运行也是完全隔离的。Playwright 为每个测试创建一个上下文,并在该上下文中提供一个默认的 Page。
为什么测试隔离很重要?
- 没有故障传递。如果一个测试失败,不会影响其他测试。
- 易于调试错误或不稳定的情况,因为您可以多次单独运行单个测试。
- 在并行运行、分片等情况下不必考虑执行顺序。
测试隔离的两种方式
测试隔离有两种不同的策略:从头开始或在测试之间进行清理。问题在于测试之间进行清理可能会忘记清理某些内容,例如“已访问链接”就无法完全清理。来自一个测试的状态可能会泄漏到下一个测试中,这可能导致您的测试失败并使调试更加困难,因为问题可能来自另一个测试。从头开始意味着一切都是新的,因此如果测试失败,您只需查看该测试即可进行调试。
Playwright 如何实现测试隔离
Playwright 使用浏览器上下文来实现测试隔离。每个测试都有自己的浏览器上下文。每次运行测试时都会新建一个浏览器上下文。当使用 Playwright 作为测试运行器时,默认会创建浏览器上下文。否则,您可以手动创建浏览器上下文。
- 同步
- 异步
browser = playwright.chromium.launch()
context = browser.new_context()
page = context.new_page()
browser = await playwright.chromium.launch()
context = await browser.new_context()
page = await context.new_page()
浏览器上下文还可以用于模拟涉及移动设备、权限、区域设置和颜色方案的多页面场景。更多详细信息,请查看我们的模拟指南。
单个测试中的多个上下文
Playwright 可以在单个场景中创建多个浏览器上下文。这在您想要测试多用户功能(如聊天)时非常有用。
- 同步
- 异步
from playwright.sync_api import sync_playwright, Playwright
def run(playwright: Playwright):
# 创建一个 chromium 浏览器实例
chromium = playwright.chromium
browser = chromium.launch()
# 创建两个隔离的浏览器上下文
user_context = browser.new_context()
admin_context = browser.new_context()
# 创建页面并独立地与上下文交互
with sync_playwright() as playwright:
run(playwright)
import asyncio
from playwright.async_api import async_playwright, Playwright
async def run(playwright: Playwright):
# 创建一个 chromium 浏览器实例
chromium = playwright.chromium
browser = await chromium.launch()
# 创建两个隔离的浏览器上下文
user_context = await browser.new_context()
admin_context = await browser.new_context()
# 创建页面并独立地与上下文交互
async def main():
async with async_playwright() as playwright:
await run(playwright)
asyncio.run(main())