Изоляция
Введение
Тесты, написанные с помощью Playwright, выполняются в изолированных чистых средах, называемых контекстами браузера. Эта модель изоляции улучшает воспроизводимость и предотвращает каскадные сбои тестов.
Что такое изоляция тестов?
Изоляция тестов — это когда каждый тест полностью изолирован от другого теста. Каждый тест выполняется независимо от любого другого теста. Это означает, что каждый тест имеет свое собственное локальное хранилище, хранилище сессий, куки и т.д. Playwright достигает этого с помощью BrowserContext, которые эквивалентны профилям в режиме инкогнито. Их быстро и недорого создавать, и они полностью изолированы, даже при выполнении в одном браузере. Playwright создает контекст для каждого теста и предоставляет по умолчанию Page в этом контексте.
Почему изоляция тестов важна?
- Нет переноса ошибок. Если один тест не проходит, это не влияет на другой тест.
- Легко отлаживать ошибки или нестабильность, потому что вы можете запускать только один тест столько раз, сколько захотите.
- Не нужно думать о порядке выполнения при параллельном запуске, шардировании и т.д.
Два способа изоляции тестов
Существует две разные стратегии, когда речь идет об изоляции тестов: начинать с нуля или очищать между тестами. Проблема с очисткой между тестами заключается в том, что легко забыть очистить, и некоторые вещи невозможно очистить, такие как "посещенные ссылки". Состояние одного теста может просочиться в следующий тест, что может привести к сбою теста и усложнить отладку, так как проблема исходит от другого теста. Начинать с нуля означает, что все новое, поэтому, если тест не проходит, вам нужно искать проблему только в этом тесте.
Как Playwright достигает изоляции тестов
Playwright использует контексты браузера для достижения изоляции тестов. Каждый тест имеет свой собственный контекст браузера. Запуск теста создает новый контекст браузера каждый раз. При использовании Playwright в качестве тестового раннера контексты браузера создаются по умолчанию. В противном случае вы можете создавать контексты браузера вручную.
- Тест
- Библиотека
import { test } from '@playwright/test';
test('пример теста', async ({ page, context }) => {
// "context" — это изолированный BrowserContext, созданный для этого конкретного теста.
// "page" принадлежит этому контексту.
});
test('другой тест', async ({ page, context }) => {
// "context" и "page" во втором тесте полностью
// изолированы от первого теста.
});
const browser = await chromium.launch();
const context = await browser.newContext();
const page = await context.newPage();
Контексты браузера также могут использоваться для эмуляции сценариев с несколькими страницами, включая мобильные устройства, разрешения, локализацию и цветовую схему. Ознакомьтесь с нашим руководством по Эмуляции для получения дополнительных сведений.
Несколько контекстов в одном тесте
Playwright может создавать несколько контекстов браузера в рамках одного сценария. Это полезно, когда вы хотите протестировать функциональность для нескольких пользователей, например, чат.
- Тест
- Библиотека
import { test } from '@playwright/test';
test('администратор и пользователь', async ({ browser }) => {
// Создайте два изолированных контекста браузера
const adminContext = await browser.newContext();
const userContext = await browser.newContext();
// Создайте страницы и взаимодействуйте с контекстами независимо
const adminPage = await adminContext.newPage();
const userPage = await userContext.newPage();
});
const { chromium } = require('playwright');
// Создайте экземпляр браузера Chromium
const browser = await chromium.launch();
// Создайте два изолированных контекста браузера
const userContext = await browser.newContext();
const adminContext = await browser.newContext();
// Создайте страницы и взаимодействуйте с контекстами независимо
const adminPage = await adminContext.newPage();
const userPage = await userContext.newPage();