隔离
简介
使用 Playwright 编写的测试在称为浏览器上下文(browser context)的隔离且全新的环境中执行。这种隔离模型提高了可重复性,并防止测试失败的连锁反应。
什么是测试隔离?
测试隔离是指每个测试都与其他测试完全隔离。每个测试都独立于其他任何测试运行。这意味着每个测试都有自己的本地存储、会话存储、cookie 等。Playwright 使用 BrowserContext 来实现这一点,它相当于无痕浏览模式的配置文件。它们创建速度快且开销小,并且即使在单个浏览器中运行时也完全隔离。Playwright 为每个测试创建一个上下文,并在该上下文中提供一个默认的 Page。
为什么测试隔离很重要?
- 无失败传递。如果一个测试失败,它不会影响其他测试。
- 易于调试错误或不稳定问题,因为你可以根据需要多次运行单个测试。
- 在并行运行、分片等情况下无需考虑运行顺序。
两种测试隔离方式
在测试隔离方面有两种不同的策略:从头开始或在测试之间进行清理。在测试之间进行清理的问题在于,很容易忘记清理,而且有些内容(如“已访问链接”)无法清理。一个测试的状态可能会泄漏到下一个测试中,这可能导致测试失败,并且由于问题来自另一个测试,调试会变得更加困难。从头开始意味着一切都是全新的,所以如果测试失败,你只需在该测试内部进行调试。
Playwright 如何实现测试隔离
Playwright 使用浏览器上下文(browser contexts)来实现测试隔离。每个测试都有其自己的浏览器上下文。每次运行测试时都会创建一个新的浏览器上下文。当将 Playwright 用作测试运行器(Test Runner)时,默认会创建浏览器上下文。否则,你可以手动创建浏览器上下文。
Browser browser = chromium.launch();
BrowserContext context = browser.newContext();
Page page = context.newPage();
浏览器上下文还可用于模拟涉及移动设备、权限、区域设置和颜色模式的多页面场景。有关更多详细信息,请查看我们的 模拟(Emulation) 指南。
单个测试中的多个上下文
Playwright 可以在单个场景中创建多个浏览器上下文。当你想要测试多用户功能(如聊天功能)时,这非常有用。
import com.microsoft.playwright.*;
public class Example {
public static void main(String[] args) {
try (Playwright playwright = Playwright.create()) {
BrowserType chromium = playwright.chromium();
// 创建一个 Chromium 浏览器实例
Browser browser = chromium.launch();
// 创建两个隔离的浏览器上下文
BrowserContext userContext = browser.newContext();
BrowserContext adminContext = browser.newContext();
// 创建页面并独立与上下文进行交互
}
}
}