跳到主内容

隔离

介绍

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

什么是测试隔离?

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

为什么测试隔离很重要?

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

测试隔离的两种方式

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

Playwright 如何实现测试隔离

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

using var playwright = await Playwright.CreateAsync();
var browser = await playwright.Chromium.LaunchAsync();
var context = await browser.NewContextAsync();
var page = await context.NewPageAsync();

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

单个测试中的多个上下文

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

using Microsoft.Playwright;
using System.Threading.Tasks;

class Program
{
public static async Task Main()
{
using var playwright = await Playwright.CreateAsync();
// Create a Chromium browser instance
await using var browser = await playwright.Chromium.LaunchAsync();
await using var userContext = await browser.NewContextAsync();
await using var adminContext = await browser.NewContextAsync();
// Create pages and interact with contexts independently.
}
}