3 фреймворка для тестирования на Python: обзор конфигураций

О плюсах и минусах фреймворков на Python для тестирования программного обеспечения рассказывает эксперт компании SimbirSoft.

Илья Филинин

Должность

Head of SDET Department, SimbirSoft


Ссылки


Наталья Березовская

Автор в сфере IT, digital, экономики и финансов. Ведет некоммерческий проект для начинающих писателей «ЛитЦех».


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

  1. Python + PyTest + PageObject.
  2. Python + Robot Framework.
  3. Python + Behave.

Мы опробовали все три подхода на реальных проектах, и я хочу поделиться впечатлениями от каждого. Сразу оговорюсь, что Robot Framework и Behave используют BDD-тестирование, а PyTest — классический подход.

BDD (Behaviour Driven Development) — разработка через поведенческое тестирование. BDD допускает к написанию кода непрограммистов, нетехнических специалистов, которые создают тесты на естественном языке.

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

Python + PyTest + PageObject

В этой конфигурации существует разграничение классов:

  • в одних описываются локаторы элементов;
  • в других — действия над элементами в методах;
  • в третьих — бизнес-модели приложения.

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

Вот базовый шаблон для написания теста, зависящего от параметра командной строки:

# content of test_sample.py
def test_answer(cmdopt):
    if cmdopt == "type1":
        print("first")
    elif cmdopt == "type2":
        print("second")
    assert 0  # to see what was printed
Подробнее этот шаблон можно рассмотреть здесь.

Преимущества

Главное достоинство конфигурации — легкость ее использования, расширяемость и возможность быстрого изменения структуры автоматизированных тестов. Можно оперативно настроить систему отчетов, например, подключить ReportPortal или аналогичный инструмент для их формирования.

Также у PyTest есть фикстуры — это, по сути, декораторы в Python. С их помощью можно делать setup и teardown на разных уровнях (“function”, “class”, “module”, “session”), параметризацию, установку меток.

Недостатки

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

Python + Robot Framework

Robot Framework — это фреймворк для автоматизации приемочного тестирования, использующий концепцию keyword-driven. Это подход, при котором разрабатываются ключевые слова. Их могут использовать для создания автотестов специалисты, глубоко не владеющие программированием. На основании ключевых слов можно строить тесты с разными входными данными или модифицировать их в читаемый и исполняемый текст.

Зачастую Robot Framework используют для реализации низкоуровневых взаимодействий с тестируемым продуктом на Python и в качестве раннера. В целом на 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 for us!
Больше примеров кода в источнике

Преимущества

Те же, что и у Robot Framework — возможность писать автоматизированные тесты силами специалистов без знания языка программирования. И минус этого фреймворка характерен для Behave: без умения погружаться в код и понимания Python писать тесты будет невозможно или очень сложно, трудоемко и в результате неэффективно. Однако некое подобие фикстур из PyTest позволяет удобно модифицировать поведение функции, не изменяя ее код.

Кроме того, Behave легко встраивается в серверы непрерывной интеграции и формирует красивые и понятные отчеты.

Недостатки

Минусы Robot Framework правомерны и для Behave, но есть и другие особенности. Например, отсутствует возможность распараллелить автотесты, благодаря которой многократно уменьшается время их прохождения. Несмотря на то, что далеко не всё нужно распараллеливать, сама возможность это делать критически важна для серьезной автоматизации.

Разработчики фреймворка обещают добавить ее, но пока при попытке распараллелить автоматизированные тесты данные в сущности context «липнут» друг на друга.

Как выбрать фреймворк
для тестирования

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

Связку Python + Robot Framework или Python + Behave используют обычно в двух схожих случаях:

  1. В команде очень много QA-специалистов и мало SDET или автоматизаторов тестирования. Складывается ситуация, когда не хватает автотестов и нужно нарастить их количество. С помощью этой связки автоматизаторы или SDET следят за кодом и программируют, а QA пишут тест-кейсы в самом коде и следят за покрытием.
  2. Менеджмент не очень хорошо осведомлен в технической составляющей и хочет следить за качеством разрабатываемого продукта через код автотестов, который был бы написан на естественном языке.

Комбинацию Python + PyTest + PageObject выбирают в большинстве случаев. То есть когда в команде все умеют программировать и читать код, а менеджмент не очень интересуется тем, что происходит так глубоко в приложении, основываясь на ключевых результатах и показателях тестирования.

Итак, предпочтение тому или иному тестовому фреймворку нужно отдавать, исходя из ваших потребностей. Чтобы сделать правильный выбор, учитывайте свои ответы на следующие вопросы:

  • Какой язык я буду применять для автоматизации?
  • Этот фреймворк используется широко и популярен среди разработчиков?
  • Активно ли он поддерживается?
  • Язык спецификаций совместим с Gherkin?
  • Для какого вида тестирования я буду его использовать?
  • Какие есть ограничения, вызываемые использованием этого фреймворка, по сравнению с другими?

Заключение

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

Если вы хотите работать в IT, то программа «Профессия тестировщик ПО с 0 до PRO» станет вашим билетом в эту сферу. Вы научитесь писать тесты вручную, познакомитесь с инструментами для автоматизации тестирования, разберетесь с организацией его процесса и сможете начать работать еще до окончания курса. Образовательная программа Skillbox — отличное начало дороги от junior-тестировщика к тест-лиду.

Курс

Профессия тестировщик ПО 
с нуля до PRO


Вы научитесь тестировать сайты, мобильные приложения и другое ПО. Узнаете, как устроена работа IT-компаний, и сможете понять, как вы хотите развиваться в профессии. Гарантированно получите работу. Уже джуниоры очень востребованы рынком, а наш курс позволит достичь middle-уровня.

Хочешь получать крутые статьи по программированию?
Подпишись на рассылку Skillbox