Легкое веб-тестирование с Python, Pytest и Selenium WebDriver, часть 7: выводим Python-автоматизацию на новый уровень |
09.09.2020 00:00 |
Автор: Энди Найт (Andy Knight) Хоть наш тест-проект невелик и примитивен, он демонстрирует хорошие практики UI-тестирования при помощи Python. Его можно расширить и улучшить несколькими способами. Завершающая часть курса расскажет о том, как вывести его на новый уровень:
Создание Pytest HTML-отчетов о тестировании.Когда pytest запущен в командной строке, он иногда выводит непонятную стену текста. Визуальные отчеты куда лучше представляют информацию о результатах тестирования, особенно для тех, кто не связан с разработкой. Добавление плагина pytest-html к вашим тестам позволит вам создавать симпатичные HTML-отчеты всего одной простой опцией командной строки. Отчеты будут выглядеть так: Параллельный запуск тестов с Pytest. Web UI-тесты известны своей неторопливостью. По сравнению с обычными тестами наш тест поиска DuckDuckGo немного необычен, так как он очень краток. Для компаний нормально иметь сотни тысяч Web UI-тестов, на прогон каждого из которых требуется около минуты. Подумайте о масштабе – 100 тестов займут около 1 часа 40 минут. Тысяча тестов займет более 16 часов! Это слишком много для непрерывной интеграции и непрерывной поставки. Единственный способ добиться по-настоящему непрерывного тестирования с Web UI-тестами – это параллельный запуск. К счастью, для этого нужен всего лишь плагин для pytest. pytest-xdist позволяет вам масштабироваться вверх, повышая количество тест-цепочек, и в стороны, распределяя выполнение тестов на разные машины. Будьте осторожны и избегайте коллизий как в коде, так и в тестируемой системе. Вот как запускается проект с 4 тест-цепочками:
Масштабирование тест-автоматизации при помощи Selenium Grid и Remote WebDrivers.Наш тест-проект запускает WebDriver на локальной тест-машине. Локальные копии WebDriver хорошо работают для небольших проектов, но плохи для крупных. Обычные тест-машины могут запускать лишь несколько копий WebDriver параллельно – после этого они начнут тормозить, и запуск тестов на различных комбинациях браузеров, операционных систем и версий будет затруднен. Поприветствуем Grid: Selenium Grid может масштабировать Web UI-тестирование горизонтально, используя удаленные WebDriver. У Grid есть хаб и набор узлов. Вместо локального запуска копии WebDriver тесты будут запрашивать хаб о копии со специфическими параметрами – например, типом браузера и ОС. Хаб найдет доступный узел для критериев запроса. Узел запустит копию WebDriver и переправит ответы на тест-машину. Grid легко справится со множеством параллельных тестов (как и pytest-xdist). Selenium Grid – это часть Selenium Standalone Server. Он сделан на Java и выпускается как JAR-файл. Для работы с ним не нужно знать Java, но для запуска вам понадобится JDK. Следуйте инструкциям в Selenium Grid wiki для настройки хаба и узлов. Его довольно легко установить, если у вас есть доступ к нескольким машинам. Если вы не хотите настраивать собственный Grid, вы можете воспользоваться облачными тест-платформами вроде TestProject. Создание Python-тестов на основе поведения с использованием Pytest-BDD. Разработка на основе поведения – популярная методология разработки, которая определяет и внедряет функции приложения как "поведения". Команды определяют поведения, используя язык спецификаций (например, Gherkin), или сценарии Если-Когда-Тогда до создания кода. Запись поведений обычным языком с полезными примерами делает фичи куда понятнее. Затем сценарии Gherkin можно автоматизировать, используя специальные тест-фреймворки. Каждый шаг имеет функцию или метод на языке вроде Python, чтобы запуститься. BDD помогает командам разрабатывать ПО лучше благодаря улучшенному сотрудничеству и автоматизации. У Python несколько тест-фреймворков BDD, и все из них похожи на to Cucumber. Лично я рекомендую pytest-bdd, так как он интегрируется с pytest. Мы можем записать наш тест поиска DuckDuckGo на Gherkin вот так:
Прочитайте руководство Python Testing 101: pytest-bdd, чтобы узнать больше. Я также рекомендую изучить паттерн Screenplay для BDD-улучшений паттерна Page Object. |