Обзор фреймворков для тестирования на Python
В современной автоматизации тестирования на Python используют разные конфигурации тестовых фреймворков. Рассмотрим основные и наиболее популярные из них:
Следует сказать, что в случае с Behave и Robot Framework используется BDD-тестирование, а в случае с PyTest — классический подход. Говоря о BDD (BehaviourDriven Development), мы говорим о разработке через поведенческое тестирование, то есть BDD допускает к написанию кода непрограммистов, создающих тесты на естественном языке. А вот в случае с классическим подходом автоматизированные тесты пишут программисты с помощью одного из фреймворков.
Конфигурация Python + PyTest + PageObject
Данная конфигурация характеризуется разграничением классов: • в одних классах описывают локаторы элементов; • в других описывают действия над элементами в методах; • в третьих, соответственно — бизнес-модели приложения.
При этом в отдельных классах реализуют сами автоматизированные тесты, собираемые с помощью PyTest.
Посмотрим на базовый шаблон для написания теста, который зависит от параметра командной строки:
# content of test_sample.py deftest_answer(cmdopt): ifcmdopt == "type1": print("first") elifcmdopt == "type2": print("second") assert0# to see what was printed
Если хотите рассмотреть этот шаблон подробнее, вот вам ссылка на официальную документацию.
Плюсы
Главный плюс этой конфигурации — легкость в применении, расширяемость, плюс возможность быстро изменить структуру автоматизированных тестов. Вы можете быстро настроить систему отчётов, допустим, подключить ReportPortal либо аналогичный инструмент для формирования отчётов.
Кроме того, у PyTest существуют фикстуры, которые, по сути, являются декораторами в Python. Посредством их вы сможете делать setup и teardown на различных уровнях (“function”, “class”, “module”, “session”), а также параметризацию и установку меток.
Минусы
Существенных недостатков у данной конфигурации почти нет, т. к. это проверенный подход, прекрасно себя зарекомендовавший на проектах разной сложности. В принципе, можно сказать, что один из минусов — это необходимость знания Python на довольно высоком уровне. Но разве можно в современных реалиях эффективно заниматься автоматизацией тестирования без знания языка программирования?
Конфигурация Python + Robot Framework
Robot Framework относят к фреймворкам для автоматизации приемочного тестирования, который использует концепцию keyword-driven. Данный подход подразумевает разработку ключевых слов. Эти ключевые слова могут применять для создания автотестов специалисты, которые не имеют глубоких познаний в программировании. Таким образом, на основании ключевых слов создаются тесты с различными входными данными.
Нередко Robot Framework применяют при реализации низкоуровневых взаимодействий с тестируемым продуктом и в качестве раннера. Также на Robot Framework можно и программировать, однако если уровень понимания фреймворка недостаточен, вы совершите много ошибок.
Если хотите больше примеров кода, вам сюда.
Плюсы
Главное преимущество конфигурации Python + Robot Framework состоит в возможности писать автотесты силами специалистов, не владеющих языком программирования. Часть функциональности реализована «из коробки», для её применения совсем необязательно иметь навыки работы с кодом. Но, говоря по правде, этот плюс легко становится минусом (об этом ниже).
Непосредственно во фреймворк встроена система логирования, редактор тестов и много вспомогательных плагинов, облегчающих интеграцию в проекты. При этом архитектура выстроена таким образом, что можно расширять функциональность, а также писать собственные библиотеки на Python.
Минусы
Следует выделить три основных недостатка: 1. Не погрузившись в код и не выполнив его детальный анализ, вы можете и не понять, что же упало внутри Python, который вызван из Robot Framework. А значит, если сотрудник программистом не является, он может столкнуться со сложностями с дебагом кода автотестов. Не обойтись без помощи программиста и в том случае, когда меняется продукт либо инфраструктура. 2. Из-за создания дополнительного уровня абстракции автотесты при таком подходе функционирует медленнее. 3. Разработка кода и поддержка функциональности «под капотом» проекта зачастую занимает намного больше времени, чем экономится во время написании тестов на естественном языке.
Конфигурация Python + Behave
Суть подхода — описание автоматизированных тестов на высоком уровне, то есть на естественном языке. Как правило, код пишется в стандартном Python-файле, который потом исполняется. Во многом Behave похож на Robot Framework, однако поддерживает Gherkin.
Feature: showing off behave Scenario: run a simple test Given we have behave installed When we implement a test Then behave will test it forus!
Другие примеры кода здесь.
Плюсы
Преимущества такие же, что и в случае с Robot Framework — возможность писать автотесты силами сотрудников, не знающих язык программирования. Соответственно, характерны и минусы, ведь без умения погружаться в код на Python писать тесты будет очень сложно. В результате — долго и неэффективно. Зато есть подобие фикстур из PyTest, позволяющих модифицировать поведение функции, не меняя её код, что очень удобно. Вдобавок к этому, Behave без проблем встраивается в серверы непрерывной интеграции, а также формирует понятные и красивые отчёты.
Минусы
Об основных минусах мы уже сказали, но есть и некоторые особенности. Одна из них заключается в отсутствии возможности распараллелить автоматизированные тесты, что критично, если мы говорим о серьёзной автоматизации. В принципе, разработчики Behave планируют её добавить.
Выбираем фреймворк для тестирования
Невозможно однозначно сказать, какой фреймворк лучше, ведь каждый подходит для решения определённых задач с учётом человеческих ресурсов и фактических потребностей проекта.
Как правило, связку Python + Robot Framework либо Python + Behave используют, если: 1. В команде много QA-специалистов и мало SDET либо автоматизаторов. В результате автотестов не хватает, и их надо нарастить. Используя вышеназванную связку, автоматизаторы либо SDET программируют и следят за кодом, а QA пишут тест-кейсы и следят за покрытием. 2. Менеджмент плохо осведомлен о технической составляющей и желает отслеживать качество разрабатываемого продукта с помощью кода автотестов, написанных на естественном языке.
Что касается комбинации Python + PyTest + PageObject, то её, как правило, выбирают в большинстве остальных случаев, то есть чаще всего. Это та ситуация, когда специалисты умеют программировать и читать код, а менеджмент не особо интересуется тем, что происходит глубоко в приложении — ему достаточно ключевых результатов и показателей тестирования.