Как стать автором
Поиск
Написать публикацию
Обновить
464.91
OTUS
Развиваем технологии, обучая их создателей

Почему мне так нравится использовать Python для автоматизации тестирования?

Время на прочтение8 мин
Количество просмотров20K
Автор оригинала: Himanshu Sheth

Когда дело доходит до автоматизации тестирования, первый и самый сложный вопрос, который встает перед вами это какой язык выбрать, чтобы он имел хорошую поддержку автоматизации тестирования. Python, Java, C#, Ruby и т.д. – лишь некоторые из популярных языков, которые можно использовать с фреймворком для автоматизации Selenium. Несмотря на это, во всем мире QA-команды активно используют именно Python, особенно в связке с Selenium WebDriver.

У разработчиков и тестировщиков появляется несколько вариантов, когда дело доходит до использования языков программирования с фреймворком Selenium. Как у инженера по автоматизации, у меня была возможность пользоваться разными языками, начиная с С и заканчивая Java, Python, C++ в зависимости от проекта. Несмотря на то, что мне удобно использовать Java и C# с Selenium, Python все равно остается лучшим языком для написания скриптов для автоматизации тестирования с этим фреймворком.

В этой статье я расскажу о 12 основных причинах, по которым автоматизированное тестирование на Python в связке с Selenium WebDriver – это отличный вариант в моем случае. 

Итак, начнем.

Немногословный и хорошо читаемый

Большинство из вас согласится, что Python – один из лучших языков программирования, когда речь идет о простоте написания кода и удобстве чтения. По сравнению с другими языками программирования, которые можно использовать для автоматизации тестирования с Selenium, Python не такой многословный и относительно прост в использовании.

Поскольку Python – скриптовый язык, тестировщику не нужно беспокоиться о компиляции для преобразования кода в исполняемый файл. Дзен Python, который является отличным руководством по автоматизации тестирования на Python, напоминает нам о том, что реализация, которую легко объяснить – это всегда хорошая идея! По сути, это значит, что тесты, реализованные как часть набора тестов должны быть удобочитаемыми, наглядными и принцип их работы должно быть легко объяснить.

API, реализующие автоматизацию тестирования на Python, используются для подключения к браузеру через фреймворк автоматизации Selenium. Если использовать Selenium WebDriver по назначению, то тесты пишутся предельно легко. Ниже я приложил скриншот с основополагающими принципами проектирования на Python (если вы напишете import this в командной строке, то получите Дзен Python):

Исчерпывающий список фреймворков для автоматизации тестирования на Python

PyUnit (или Unittest) – это дефолтный фреймворк для тестирования на Python. Помимо PyUnit, в Python есть ряд фреймворков тестирования для Selenium. Вот несколько широко используемых - PyTest, Behavior, Robot, Lettuce, Node 2 и Testify. Такие фреймворки, как PyTest, Nose 2 и Testify, можно использовать для автоматизированного тестирования юнитов, интеграционного тестирования и тестирования систем.

Фреймворк Robot – это наиболее предпочтительный фреймворк автоматизации тестирования Python для автоматизации роботизированных процессов (RPA), тестирования с Selenium и ATDD (разработки на основе приемочных тестов). Lettuce и Behavior - это фреймворки для тестирования на Python, которые лучше всего подходят для BDD (Behavior Driven Development). Весь широкий спектр фреймворков можно установить с минимальными усилиями (например, с помощью команды pip install) и их очень удобно использовать в связке с Selenium WebDriver.

Очень немногие языки программирования предлагают такое разнообразие для автоматизации тестирования, и это еще одно преимущество Python, которое делает его лучшим языком для автоматизации тестирования.

PyTest – лучший фреймворк для автоматизации тестирования на Python

Ранее мы говорили о популярных фреймворках для автоматизированного тестирования на Python, но этот список возглавляет PyTest, как лучший фреймворк. PyTest также может использоваться для модульного, интеграционного и сквозного тестирования, как и другие фреймворки Python.

Несмотря на то, что PyUnit (unittest) – фреймворк по умолчанию, разработчики и тестировщики активно использую PyTest, поскольку он функциональнее PyUnit. Тесты могут состоять из простых функций, или же они могут принимать входные параметры для поддержки параметризированного тестирования.

Фикстуры PyTest позволяют с легкостью выполнять тесты на различных сочетаниях браузеров и платформ. Параметризированные фикстуры PyTest можно выполнять с различными входными значениями. 

Перенос существующих реализаций, использующих PyTest и Selenium WebDriver, на параметризованные фикстуры требует минимальных усилий. Фикстуры лучше всего подходят для выполнения операций настройки и очистки. Плагины, которыми можно расширить PyTest, могут помочь в покрытии кода, параллельном тестировании и многом другом. 

Очень простое параллельное тестирование

Параллельное тестирование в Selenium широко используется для ускорения выполнения автоматизированных тестов на различных сочетаниях браузеров и платформ (т.е. операционных систем). Все языки программирования поддерживают параллельное тестирование (или параллельное выполнение) с помощью фреймворка Selenium, но его чертовски просто использовать в Python.

При использовании фреймворка PyTest плагин pytest-xdist помогает выполнять тесты параллельно. Этот вариант предпочтителен в тех случаях, когда тесты не являются потокобезопасными и нуждаются в изоляции состояния. Установить плагин можно выполнив pip install <имя плагина> в терминале. Плагин pytest-parallel следует использовать для параллельного выполнения тестов Selenium. Он является потокобезопасным и не управляет состоянием в среде Python.

Следовательно, pytest-xdist реализует параллелизм, тогда как pytest-parallel – конкурентность и параллелизм. В них есть способ выделить максимальное количество воркеров (или процессов) для запуска максимального количества одновременных тестов на одного воркера.

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

Тот же принцип параллельного тестирования применим и к другим фреймворкам тестирования на Python, таким как Node 2, Behavior, Lettuce и другим. С другой стороны, включение параллельного тестирования с помощью Selenium Java или Selenium C# или других комбинаций требует изменений в коде и подразумевает больше шагов, чем в Python.

Простота установки пакетов

PIP – это стандартная система менеджмента пакетов в Python. Установка нового пакета с помощью pip не требует загрузки пакета. Команда pip install ищет необходимый пакет в PyPI, подтягивает зависимости и устанавливает необходимые пакеты, чтобы обеспечить выполнение запроса на установку без каких-либо проблем.

Несмотря на то, что такие языки, как C# и Java, предлагают относительно схожие функции (например, консоль диспетчера пакетов в C#), установка пакетов в Python через pip – совершенно другой опыт!

Мультипарадигмальный язык программирования

Python – это мультипарадигмальный язык программирования. Следовательно, в нем есть полная поддержка ООП и структурного программирования. Большинство функций Python поддерживают функциональное программирование и аспектно-ориентированное программирование.

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

В отличие от других языков программирования, Python позволяет тестировщику решать, что следует использовать для автоматизации тестирования на Selenium – классы или функции.

Широкий выбор IDE

Для автоматизированного тестирования на Python я предпочитаю использовать PyCharm (Community Edition), поскольку его можно легко использовать вне зависимости от фреймворков, которые обеспечивают автоматизацию с Selenium. Я бы рекомендовал переходить на PyCharm (Professional Edition) только в том случае, если вы используете BDD -фреймворки в Python.

Можно использовать GVim, Notepad++ и Visual Studio Code для быстрого редактирования, особенно если сценарии автоматизации тестирования не настолько сложны. Visual Studio Code я выбираю в тех случаях, когда дело доходит до редактирования кода, поскольку он предоставляет некоторые плагины, которые в значительной степени облегчают задачи редактирования.

Динамическая типизация

Python использует динамическую типизацию и позднее связывание (или динамическое разрешение имен), которое связывает методы и имена переменных в ходе выполнения. Эта механика очень удобна для автоматизации тестирования на Python.

Python также предлагает такие опции, как Pyre и Mypy, которые используются для статической проверки типов. С их помощью Python позволяет сочетать возможности динамической и статической типизации.

Мощная и беспроблемная отчетность

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

Интегрировать отчеты с автоматизацией тестирования на Selenium с помощью PyTest можно с помощью пакета pytest-html. Отчеты о тестах, сгенерированные с pytest-html, предоставляют визуальный контент для легкого сравнения результатов. Сгенерировать отчеты для тестов Selenium можно без особых усилий в PyTest.

С помощью API, предлагаемых cloud Selenium Grid, таких как Lambda Test, можно построить более внушительную стратегию ведения отчетности для автоматизированного тестирования.

Командная строка в помощь

Ранее мы упомянули ряд IDE, которые можно использовать для разработки и выполнения автоматизированного тестирования на Python. Большинство фреймворков для тестирования оснащены тест-раннерами, которые позволяют выполнять тесты из терминала (командной строки).

Если вы хорошо знакомы с Python, то комбинация IDE (например, Visual Studio Code) и тест-раннера поможет сделать эту работу за вас! Просто поставьте в IDE необходимые плагины для популярных фреймворков тестирования (например, PyTest, Behavior и т.д.). Теперь вы полностью готовы к насыщенному событиями путешествию в мир автоматизированного тестирования на Python!

Подходит как для больших, так и для маленьких проектов

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

Простая номенклатура имен, которой следуют фреймворки (например, тестовые функции в PyTest должны начинаться с test_), облегчает работу по опознаванию тестовых функций.

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

Простая интеграция с инструментами CI/CD

Jenkins – один из самых популярных открытых инструментов для непрерывной интеграции (CI) и непрерывной доставки (CD). Travis CI, Circle CI, TeamCity, Bamboo, Azure Pipeline и т.д. – другие варианты, которые можно использовать вместо Jenkins, однако я все равно предпочитаю использовать Jenkins с «открытым исходным кодом».

Freestyle и пайплайн Jenkins – два варианта оркестрации работ в проекте. В отличие от других языков, Python не требует «сборки» как таковой, но сильная экосистема делает Python, Selenium и Jenkins убийственной комбинацией.

Экосистема Python содержит инструменты, которые можно легко интегрировать в Jenkins для генерации отчетов и тестирования, а также для отчетов по метрикам кода, такие как Pylint. Поскольку генерация отчетов PyTest может запускаться из самой командной строки, нет необходимости добавлять последовательность действий после сборки при использовании пайплайна Jenkins с PyTest. 

Использовать Jenkins в связке с PyTest очень просто, так как переход от локальной среды выполнения к Jenkins подразумевает минимальное количество шагов (например, создание проекта, добавление параметров командной строки для выполнения и т. д.), что существенно упрощает переход! Jenkins предлагает прямой вариант создания проекта Maven, но помните про кривую обучения, если вы хотите использовать отчетность, что непосредственно к Jenkins не относится. 

Вот и все!

Несмотря на то, что выбор лучшего языка программирования для автоматизации тестирования с Selenium весьма субъективен, Python на сегодняшний день является лучшим скриптовым языком для автоматизации тестирования. Легко начать автоматизировать тесты с Python, поскольку широкий спектр его фреймворков можно использовать для модульного, кросс-браузерного тестирования и других его видов. Я уверен, что вам понравится автоматизированное тестирование на Python, как только вы начнете им пользоваться.

Расскажите в комментариях о том, в связке с каким языком вы предпочитаете использовать Selenium, и как вы оцениваете его по сравнению с Python, бесспорным королем автоматизированного тестирования.

Счастливого тестирования!


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

Теги:
Хабы:
Всего голосов 10: ↑6 и ↓4+2
Комментарии5

Публикации

Информация

Сайт
otus.ru
Дата регистрации
Дата основания
Численность
101–200 человек
Местоположение
Россия
Представитель
OTUS