Разделы портала

Онлайн-тренинги

.
Прелести Pytest: Pytest Selenium
20.03.2020 01:00

Автор: Джош Грант (Josh Grant)
Оригинал статьи
Перевод: Ольга Алифанова

Начиная серию статей, рассказывающих о чудесных возможностях Pytest, я решил начать с широко известного плагина для работы с тестами на основе браузеров. Этот плагин имеет говорящее имя pytest-selenium.

Я полагаю, что в основном у него два классных преимущества:

  1. Он предлагает чистый, прямолинейный интерфейс командной строки для запуска тестов на основе браузеров.
  2. Он предлагает фикстуры для экземпляра браузера минимально необходимым, простым путем.

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

Исходя из моего опыта, недооцененный аспект тест-автоматизации – это интерфейс для того, как запускаются тесты. Я не один раз вносил изменения в конфигурационный файл, которым пользовался для дебага, и после этого запуск тестов в Jenkins разрывало на куски. Я также (в основном безуспешно) боролся с правильной настройкой аргументов командной строки для запуска теста. Pytest и pytest-selenium неплохо работают вместе, помогая избежать этих проблемных ситуаций.

При помощи pytest-selenium вы можете легко запускать тесты побраузерно. Допустим, у меня есть тесты, которые я хочу запустить через локальную версию Firefox. При помощи pytest-selenium это можно сделать так:

pytest --driver Firefox

а если я решу переключиться на Chrome, то поменяю эту строчку на

pytest --driver Chrome

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

Теперь давайте рассмотрим, как эти значения драйвера используются в коде тестов. Как уже упоминалось, pytest-selenium предлагает фикстуры для создания объекта драйвера. Давайте посмотрим, как выглядит минимальный тест с базовой фикстурой Selenium:

def test_example(selenium):

selenium.get('http://www.example.com')

Вот и все! Прямо из коробки фикстура Selenium передается в тесты для создания объекта на основе Selenium! Легко и просто.

Все становится интереснее, если использовать паттерн page object. Если page object берет объект Selenium как конструктор, то генерация page object через фикстуры тоже будет краткой:

@pytest.fixture

def HomePage(selenium):

return HomePageObject(selenium)

Все! Никакого мутного кода инстансирования драйвера в page object, только чистые фикстуры, которые можно использовать повторно.

У Pytest есть и другие интересные фичи, но это – киллер-фича для меня. Pytest-selenium – отличный выбор для работы с тестами на основе Selenium через Pytest.

Обсудить в форуме