Playwright Python — справочник На главный сайт

Базовый запуск

Самый простой способ запустить все тесты в проекте — просто выполнить команду pytest в корневой директории:

pytest

По умолчанию pytest находит все файлы вида test_*.py и запускает функции, начинающиеся с test_. Playwright будет работать в headless-режиме (без видимого окна браузера) с использованием Chromium.

Примечание: Если вы не указали браузер явно, Playwright использует Chromium. Вы можете изменить браузер по умолчанию через конфигурационный файл.

Запуск одного файла

pytest test_login.py

Запуск одного теста по имени

pytest test_login.py::test_successful_login

Запуск тестов по марке

pytest -m smoke

Запуск с видимым браузером

Для отладки полезно видеть, что происходит в браузере. Используйте флаг --headed:

pytest --headed

Браузер откроется в обычном окне, и вы сможете наблюдать за выполнением теста в реальном времени. Это особенно полезно на этапе написания и отладки тестов.

Замедление выполнения

Флаг --slowmo добавляет задержку между каждым действием Playwright. Указывается в миллисекундах:

pytest --slowmo 500

Это замедлит выполнение на 500 мс между шагами. Полезно для визуального наблюдения за быстрыми тестами или для демонстрации.

Запуск в нескольких браузерах

Playwright позволяет запускать одни и те же тесты в разных браузерах без изменения кода. Просто перечислите нужные браузеры через флаг --browser:

pytest --browser chromium --browser firefox --browser webkit

Каждый тест будет выполнен по одному разу для каждого указанного браузера. Если тест падает в одном браузере, но проходит в других — pytest покажет это в отчёте.

Совет: Запуск во всех трёх браузерах — лучший способ убедиться, что ваше приложение работает одинаково во всех браузерных движках. Однако это увеличивает общее время прогона примерно в три раза.

Параллельный запуск

Для ускорения прогона тестов используйте параллельный запуск. Для этого необходим пакет pytest-xdist:

pip install pytest-xdist

Затем запускайте тесты с флагом -n:

# Запуск на всех доступных ядрах CPU
pytest -n auto

# Запуск на 4 рабочих процессах
pytest -n 4

Важно: При параллельном запуске каждый рабочий процесс создаёт отдельный экземпляр браузера. Убедитесь, что у вашей системы достаточно ресурсов (ОЗУ, CPU). Для больших проектов рекомендуется выделять по 512 МБ ОЗУ на каждый рабочий процесс.

Переиспользование браузера между тестами

По умолчанию Playwright создаёт новый браузер для каждого теста. Это обеспечивает изоляцию, но замедляет выполнение. Вы можете переиспользовать один экземпляр браузера между несколькими тестами с помощью флагов --reuse и --workers:

pytest --reuse --workers 4

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

Запись трассировки

Playwright может записывать трассировку (trace) для каждого теста. Трассировка содержит все действия, скриншоты, сетевые запросы и консольные логи:

pytest --trace on

Трассировки сохраняются в формате trace.zip в папке test-results/. Их можно просмотреть в Trace Viewer командой:

playwright show-trace test-results/trace.zip

Совет: Используйте трассировку для анализа упавших тестов. Trace Viewer позволяет «перематывать» выполнение теста и видеть состояние страницы в каждый момент времени.

Запись видео

Флаг --video включает запись видео прохождения каждого теста:

pytest --video on

Доступные режимы:

  • on — запись видео для каждого теста
  • off — видео не записывается (по умолчанию)
  • retain-on-failure — запись видео только для упавших тестов

Видео сохраняются в формате WebM в папку test-results/.

Скриншоты при падении

Автоматические скриншоты при падении теста включаются флагом --screenshot:

pytest --screenshot only-on-failure

Доступные режимы:

  • on — скриншот для каждого теста
  • off — скриншоты не делаются
  • only-on-failure — скриншот только для упавших тестов (по умолчанию)

Примечание: Скриншоты сохраняются в папку test-results/ вместе с трассировками и видео. Каждый тест получает отдельную подпапку.

HTML-отчёт

Для генерации красивых HTML-отчётов используйте pytest-html:

pip install pytest-html
pytest --html=report.html

Отчёт будет содержать полную информацию о прогоне: количество пройденных и упавших тестов, время выполнения, логи ошибок и скриншоты (если они были сделаны).

Конфигурация через pyproject.toml

Вместо длинных команд можно настроить все параметры в файле pyproject.toml:

[tool.pytest.ini_options]
minversion = "8.0"
testpaths = ["tests"]
addopts = """
    --headed
    --browser chromium
    --browser firefox
    --slowmo 200
    --trace on
    --video only-on-failure
    --screenshot only-on-failure
    --html=report.html
    -n auto
"""

Конфигурация через pytest.ini

Классический способ конфигурации — файл pytest.ini в корне проекта:

[pytest]
testpaths = tests
addopts = --headed --browser chromium --slowmo 300 --trace on --html=report.html

Пример: полный запуск для CI/CD

Типичная команда для CI-окружения, где нужна максимальная информативность:

pytest \
  --browser chromium \
  --browser firefox \
  --browser webkit \
  --trace on \
  --video on \
  --screenshot on \
  --html=report.html \
  --junitxml=junit.xml \
  -n auto \
  --maxfail 5

Эта команда:

  • Запускает тесты во всех трёх браузерах
  • Записывает трассировки, видео и скриншоты
  • Генерирует HTML-отчёт
  • Создаёт JUnit XML-отчёт для интеграции с CI
  • Выполняет тесты параллельно на всех ядрах
  • Останавливается после 5 неудачных тестов

Комбинирование флагов

Все флаги можно комбинировать. Например, для отладки сложного теста:

pytest test_complex.py::test_feature --headed --slowmo 1000 --trace on

Это запустит один тест с видимым браузером, замедлением в 1 секунду между действиями и записью трассировки. Идеально для анализа и отладки.

Совет: Начните с минимальной конфигурации (pytest --headed --slowmo 300) при разработке тестов. Для регулярного прогона в CI используйте headless-режим с записью трассировки и скриншотов при падении.

Переменные окружения

Некоторые настройки можно задать через переменные окружения:

# Установка браузера по умолчанию
export PLAYWRIGHT_BROWSER=firefox

# Путь к браузерам
export PLAYWRIGHT_BROWSERS_PATH=/custom/path

# Запуск в режиме отладки
export PWDEBUG=1

Переменная PWDEBUG=1 автоматически включает режим отладки с Playwright Inspector и отключает таймауты.

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