Современный подход к автоматизации тестирования веб-приложений с помощью Python Playwright

Рассмотрели инструмент для автотестов веб-приложений — Playwright, его преимущества, настройку, проектирование и запуск тестов.

10К открытий18К показов

Автоматизация тестирования веб-приложений является неотъемлемой частью процесса разработки ПО. Многие QA-специалисты сталкиваются с трудностями при выборе инструментов для автоматизации. C подобной задачей столкнулась и наша команда тестирования.

Зачастую одним из главных вызовов автоматизации тестирования веб-приложений является сложность поддержки тестов. Веб-приложения часто могут меняться и обновляться, что требует постоянной доработки тестов. Некоторые инструменты автоматизации могут быть сложными в использовании и часто требуют большого количества времени на их изучение.

В данной статье рассмотрим инструмент для автоматизации тестирования веб-приложений — Playwright, его преимущества над некоторыми инструментами, настройку, проектирование и запуск тестов.

В чем основные преимущества Python Playwright

У многих на слуху Selenium и Cypress — это два наиболее популярных инструмента для автоматизации тестирования веб-приложений.

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

Cypress тоже популярный инструмент. Он имеет более простой API, чем Selenium, но ограничен в использовании парой браузеров, а также может быть медленным при выполнении тестов на больших приложениях.

Playwright — библиотека, созданная командой Microsoft, и основанная на асинхронном подходе. Она позволяет тестировать веб-приложения на разных платформах, предоставляет простой и интуитивно понятный API для написания тестов, который помогает легко взаимодействовать с элементами веб-страницы и выполнять различные действия: клики, заполнение форм, скроллинг и другие.

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

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

Все эти аспекты подтолкнули нас к выбору библиотеки Playwright. Мы используем ее в связке с языком Python для тестирования веб-приложений, потому что Python — один из самых популярных языков программирования, который обладает широким набором библиотек и фреймворков для тестирования. Кроме того, Python имеет простой и понятный синтаксис, что делает его легким в изучении и использовании.

Комбинация Python и Playwright позволяет создавать мощные и эффективные тесты для веб-приложений, которые можно легко поддерживать и масштабировать.

Настройка окружения, проектирование и запуск тестов с помощью Python Playwright

Настройка окружения для автоматизации тестирования с помощью Python Playwright включает несколько шагов:

1. Установка Python и зависимостей

Сначала необходимо установить Python на компьютер, а затем — библиотеку Playwright с помощью команды в терминале:

			pip install playwright
		

2. Установка браузеров

Для использования Playwright необходимо установить браузеры, которые будут использоваться для тестирования. Playwright поддерживает Chromium, Firefox и WebKit. Для установки всех браузеров можно использовать команду

			python -m playwright install
		

3. Создание тестового проекта

Далее нужно создать тестовый проект, который будет содержать тесты. Можно использовать любую удобную структуру проекта. Однако мы рекомендуем использовать готовые шаблоны. Шаблоны проектирования в тестировании программного обеспечения помогают создавать эффективные и надежные тесты.

Наиболее распространенные шаблоны проектирования в тестировании:

Page Object Pattern — шаблон проектирования, который используется для организации автоматизированных тестов на основе веб-страниц. Он позволяет разделить логику тестирования и логику взаимодействия с веб-страницами, что делает тесты более устойчивыми к изменениям в пользовательском интерфейсе.

Data Driven Testing — шаблон проектирования, позволяющий использовать различные наборы данных для одного и того же теста. Благодаря этому увеличивается покрытие тестирования и есть возможность обнаружить больше ошибок в приложении.

Behavior Driven Development (BDD) — методология разработки программного обеспечения, использующая язык понятный для бизнес-аналитиков и заказчиков для определения требований к приложению. BDD также может использоваться для создания автоматизированных тестов, которые проверяют, соответствует ли приложение требованиям заказчика.

Для использования шаблонов проектирования в тестировании с помощью Python Playwright необходимо:

  1. Определить цель тестирования и требования к приложению.
  2. Выбрать соответствующий шаблон проектирования для тестирования.
  3. Создать код для теста с использованием выбранного шаблона проектирования.
  4. Запустить тест и проанализировать результаты.

Рассмотрим проектирование по шаблону Page Object.

Для использования Page Object Pattern в тестировании веб-приложений с помощью Python Playwright необходимо создать классы, которые представляют веб-страницы приложения. Каждый класс должен содержать методы для взаимодействия с элементами на странице и проверки ожидаемых результатов.

Например, для тестирования страницы авторизации мы можем создать класс LoginPage:

			from playwright.sync_api import Pag
		
			class LoginPage:
    def __init__(self, page: Page):
        self.page = page

    def enter_username(self, username: str):
        self.page.fill('input[name="username"]', username)

    def enter_password(self, password: str):
        self.page.fill('input[name="password"]', password)

    def click_login_button(self):
        self.page.click('button[type="submit"]')

    def is_error_message_displayed(self):
        return self.page.is_visible('.error-message')
		

В данном примере мы импортируем класс Page из модуля playwright.sync_api и создаем класс LoginPage.

В конструкторе класса LoginPage происходит инициализация экземпляра класса Page, который передается в качестве параметра.

Затем определяем методы класса LoginPage:

  • enter_username(self, username: str): метод для ввода имени пользователя в поле ввода с именем «username».
  • enter_password(self, password: str): метод для ввода пароля в поле ввода с именем «password».
  • click_login_button(self): метод для нажатия на кнопку «submit».
  • is_error_message_displayed(self): метод для проверки отображения сообщения об ошибке.

В методе is_error_message_displayed(self) используется метод is_visible() экземпляра класса Page для проверки видимости элемента с классом «error-message».

Далее мы можем использовать этот класс в нашем тесте:

			class TestAuth:
    def test_login_with_invalid_credentials(page):
        login_page = LoginPage(page)
        login_page.enter_username('invalid_username')
        login_page.enter_password('invalid_password')
        login_page.click_login_button()
    assert login_page.is_error_message_displayed()
		

Данный код представляет собой тестовый сценарий для проверки авторизации с неверными учетными данными.

Давайте рассмотрим код построчно.

Мы создаем класс TestAuth.

Определяем метод test_login_with_invalid_credentials, который принимает параметр page.

Создаем экземпляр класса LoginPage, передавая в качестве параметра объект page.

Вызываем методы enter_username, enter_password и click_login_button экземпляра класса LoginPage для ввода неверных учетных данных и выполнения попытки авторизации.

Вызываем метод is_error_message_displayed экземпляра класса LoginPage для проверки отображения сообщения об ошибке.

В конце метода test_login_with_invalid_credentials происходит утверждение (assert), что сообщение об ошибке отображается на странице.

Как мы видим, данный код автоматизирует процесс проверки корректности работы страницы входа в систему при вводе неверных учетных данных.

Также нам необходимо написать фикстуру pytest в отдельном файле conftest.py.

Данная фикстура определяет, что каждый новый тестовый класс будет запускаться и отрабатывать в браузере Chrome.

			import pytest

from playwright.sync_api import sync_playwright
		
			@pytest.fixture(scope='class')
def browser():
    with sync_playwright() as playwright:
        browser = playwright.chromium.launch(channel="chrome", headless=False)
        context = browser.new_context(ignore_https_errors=True)
        page = context.new_page()
        yield page
        page.close()
        browser.close()
		

Для запуска тестов можно использовать любой фреймворк для тестирования, который поддерживает Python, например, pytest. Для запуска тестов с помощью pytest в консоли IDE можно использовать команду:

			pytest my_tests.py
		

Это запустит все тесты в файле my_tests.py.

Также стоит отметить, что Playwright имеет встроенный удобный инструмент для самодокументирования программного кода действий, выполняемых в браузере. Для этого достаточно ввести команду в консоли IDE:

			playwright codegen https://tproger.ru/
		

После выполнения команды «playwright codegen» запустится браузер Chromium, пользователь должен выполнить несколько действий на веб-странице. Затем команда сгенерирует код автоматического теста на основе этих действий, который можно использовать для проверки работоспособности веб-приложения в будущем.

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

Современный подход к автоматизации тестирования веб-приложений с помощью Python Playwright 1

В дополнение хотелось бы поделиться рекомендациями, которые можно использовать при автоматизации тестирования веб-приложений с помощью Python Playwright:

  1. Используйте Page Object Model (POM). POM — шаблон проектирования, который позволяет разделить элементы интерфейса пользователя и логику тестирования. Это позволяет легче поддерживать и расширять тесты.
  2. Используйте явные ожидания. Они гарантируют, что элементы загрузятся и будут доступны для дальнейшего использования.
  3. Используйте параметризацию. Она позволяет повторно использовать тесты для разных наборов данных.
  4. Используйте отчеты о тестировании. Это помогает отслеживать результаты тестирования и выявлять проблемы.
  5. Используйте контроль версий. Он помогает отслеживать изменения в коде и вносить изменения в тесты.
  6. Используйте логирование. Оно помогает отслеживать процесс выполнения тестов и выявлять проблемы.
  7. Используйте CI/CD. Интеграция тестов в конвеер позволяет автоматически запускать тесты при каждом изменении кода и обеспечивать быструю обратную связь.
  8. Используйте генерацию данных. Она позволяет создавать тестовые данные на лету, что упрощает и ускоряет процесс тестирования и обеспечивает более полное покрытие тестами.
  9. Используйте параметры запуска. Они позволяют настраивать тесты для разных окружений и конфигураций.

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

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

Автор: Денис Исангулов, руководитель отдела тестирования NGR Softlab

Следите за новыми постами
Следите за новыми постами по любимым темам
10К открытий18К показов