Разделы портала

Онлайн-тренинги

.
Сравнение фреймворков Python BDD
23.09.2019 00:00

Автор: Энди Найт (Andy Knight)
Оригинал статьи
Перевод: Ольга Алифанова

Практически каждый крупный язык программирования имеет тест-фреймворки BDD, и Python – не исключение. На самом деле у Python их даже несколько? Как их сравнивать, какой из них лучше? Давайте разберемся.


Сравнение в лоб

behave

behave – это один из самых популярных фреймворков Python BDD. Хоть официально он и не является частью проекта Cucumber, но работает очень похоже на его фреймворки.

Материалы:

Логотип:


За:

  • Полная поддержка языка Gherkin
  • Функции и фикстуры окружений облегчают установку и очистку.
  • Интегрируется с Django и Flask
  • Популярен среди практиков BDD
  • Отличная онлайн-документация и обучающие материалы.
  • Поддерживает PyCharm Professional Edition.

Против:

  • Нет поддержки параллельного запуска.
  • Независимый фреймворк.
  • Использование единых шагов в фича-файлах может быть затруднительным.

pytest-bdd

pytest-bdd – это плагин для pytest, позволяющий пользователям писать тесты как фича-файлы Gherkin, а не тест-функции. Благодаря интеграции с pytest он может работать с любыми плагинами pytest – например, pytest-html для красивых отчетов и pytest-xdist для параллельного тестирования. Он также использует фикстуры pytest для внедрения зависимостей.

Материалы:

Логотип:


За:

  • Полностью совместим с pytest и его основными плагинами.
  • Выигрывает от сообщества pytest, его роста и качества.
  • Фикстуры – отличный способ управлять контекстом между шагами.
  • Тесты можно фильтровать и запускать совместно с другими тестами pytest.
  • Определения шагов и перехватчики можно легко распределять через conftest.py.
  • Можно лучше управляться с табличными данными для тестирования, управляемого через данные.
  • Отличная онлайн-документация и обучающие материалы.
  • Поддерживает PyCharm Professional Edition.

Против:

  • Модули определения шагов должны иметь явно заданные декларации для фича-файлов (через функции “@scenario” или “scenarios”).
  • Шаги шаблона сценария нужно парсить другим образом.

radish

radish – это BDD-фреймворк с изюминкой: он добавляет в язык Gherkin новый синтаксис. Такие особенности языка, как петли сценариев, предусловия сценариев и константы, делают radish-вариант Gherkin более удобным для тест-кейсов.

Материалы:

Логотип:


За:

  • Расширения языка Gherkin позволяют тестировщикам лучше писать тесты.
  • Сайт, документация и логотип прекрасны.
  • Фича-файлы и определения шагов получаются очень чистыми.

Против:

  • Это независимый фреймворк с ограниченным количеством расширений.
  • Пуристам BDD могут не понравиться дополнения к синтаксису Gherkin.

lettuce

lettuce – еще один "овощной" Python BDD-фреймворк, который на рынке уже много лет. К сожалению, сайт и код давно не обновлялись.

Материалы:

Логотип:


За:

  • Код проще
  • Испытанный и надежный вариант.

Против:

  • Не хватает богатства фич других фреймворков.
  • Похоже, что не имеет особо активной поддержки.

freshen

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

Мои рекомендации

Ни один из этих фреймворков не идеален, но у некоторых есть явные преимущества. Мой выбор – это pytest-bdd, потому что он извлекает выгоду из сильных сторон pytest. С моей точки зрения, pytest – это один из лучших тест-фреймворков для любого языка из-за его выразительности, фикстур, ассертов и плагинов. Опрос разработчиков Python-2018 показал, что pytest с большим отрывом выигрывает как наиболее популярный тест-фреймворк для Python. Несмотря на то, что pytest-bdd не так вылизан, как behave, я думаю, что любящие руки сообщества быстро это поправят.

Другие рекомендации:

  • Используйте behave, если хотите надежной, стабильной работы и доступа к самому большому сообществу.
  • Используйте pytest-bdd, если хотите интеграции с другими плагинами, если у вас уже есть pytest – тесты, или вы хотите запускать тесты параллельно.
  • Используйте radish, если хотите большего программного контроля тестирования на уровне Gherkin.
  • Не пользуйтесь lettuce и freshen.