Прелести Pytest: Pytest Selenium |
20.03.2020 01:00 |
Автор: Джош Грант (Josh Grant) Начиная серию статей, рассказывающих о чудесных возможностях Pytest, я решил начать с широко известного плагина для работы с тестами на основе браузеров. Этот плагин имеет говорящее имя pytest-selenium. Я полагаю, что в основном у него два классных преимущества:
Давайте рассмотрим эти два пункта по порядку. Исходя из моего опыта, недооцененный аспект тест-автоматизации – это интерфейс для того, как запускаются тесты. Я не один раз вносил изменения в конфигурационный файл, которым пользовался для дебага, и после этого запуск тестов в 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. |