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

Изоляция

Введение​

Тесты, написанные с использованием Playwright, выполняются в изолированных средах с чистого листа, называемых контекстами браузера. Эта модель изоляции улучшает воспроизводимость и предотвращает каскадные сбои тестов.

Что такое изоляция тестов?​

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

Почему изоляция тестов важна?​

  • Отсутствие переноса сбоев. Если один тест не проходит, это не влияет на другой тест.
  • Легко отлаживать ошибки или нестабильность, так как вы можете запускать только один тест столько раз, сколько захотите.
  • Не нужно думать о порядке при параллельном запуске, шардировании и т.д.

Два способа изоляции тестов​

Существует две разные стратегии изоляции тестов: начинать с нуля или очищать между тестами. Проблема с очисткой между тестами заключается в том, что легко забыть очистить, и некоторые вещи невозможно очистить, такие как "посещенные ссылки". Состояние из одного теста может просочиться в следующий тест, что может привести к сбою теста и усложнить отладку, так как проблема исходит из другого теста. Начинать с нуля означает, что все новое, поэтому если тест не проходит, вам нужно искать проблему только в этом тесте.

Как Playwright достигает изоляции тестов​

Playwright использует контексты браузера для достижения изоляции тестов. Каждый тест имеет свой собственный контекст браузера. Запуск теста создает новый контекст браузера каждый раз. При использовании Playwright в качестве тестового раннера контексты браузера создаются по умолчанию. В противном случае вы можете создать контексты браузера вручную.

browser = playwright.chromium.launch()
context = browser.new_context()
page = context.new_page()

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

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

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

from playwright.sync_api import sync_playwright, Playwright

def run(playwright: Playwright):
# создайте экземпляр браузера chromium
chromium = playwright.chromium
browser = chromium.launch()

# создайте два изолированных контекста браузера
user_context = browser.new_context()
admin_context = browser.new_context()

# создайте страницы и взаимодействуйте с контекстами независимо

with sync_playwright() as playwright:
run(playwright)