Перейти к основному содержимому

Изоляция

Введение​

Тесты, написанные с помощью 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" во втором тесте полностью
// изолированы от первого теста.
});

Контексты браузера также могут использоваться для эмуляции сценариев с несколькими страницами, включая мобильные устройства, разрешения, локализацию и цветовую схему. Ознакомьтесь с нашим руководством по Эмуляции для получения дополнительных сведений.

Несколько контекстов в одном тесте​

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();
});