跳至主要内容

隔离

简介

使用 Playwright 编写的测试在称为浏览器上下文的隔离、干净的环境中执行。此隔离模型提高了可重复性,并防止测试失败级联。

什么是测试隔离?

测试隔离是指每个测试都完全与其他测试隔离。每个测试都独立于任何其他测试运行。这意味着每个测试都有自己的本地存储、会话存储、Cookie 等。Playwright 使用浏览器上下文来实现这一点,浏览器上下文相当于类似隐身模式的配置文件。创建这些上下文既快又便宜,而且完全隔离,即使在单个浏览器中运行也是如此。Playwright 为每个测试创建上下文,并在该上下文中提供默认页面

为什么测试隔离很重要?

  • 没有失败传递。如果一个测试失败,它不会影响其他测试。
  • 易于调试错误或不稳定性,因为您可以根据需要多次运行单个测试。
  • 在并行、分片等运行时,不必考虑顺序。

两种测试隔离方法

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

Playwright 如何实现测试隔离?

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

import { test } from '@playwright/test';

test('example test', async ({ page, context }) => {
// "context" is an isolated BrowserContext, created for this specific test.
// "page" belongs to this context.
});

test('another test', async ({ page, context }) => {
// "context" and "page" in this second test are completely
// isolated from the first test.
});

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

单个测试中的多个上下文

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

import { test } from '@playwright/test';

test('admin and user', async ({ browser }) => {
// Create two isolated browser contexts
const adminContext = await browser.newContext();
const userContext = await browser.newContext();

// Create pages and interact with contexts independently
const adminPage = await adminContext.newPage();
const userPage = await userContext.newPage();
});