[Перевод] Сравнение BDD фреймворков Python: плюсы и минусы
Уже в этом месяце в ОТУС стартует курс "Python QA Engineer". Всем привет. В преддверии старта данного курса делимся с вами переводом интересного материала.
И по факту, у него их несколько! Почти все основные языки программирования имеют фреймворки для BDD тестирования, и Python не исключение. Попробуем разобраться. Итак, как их сравнить и какой из них лучший?
behave
Несмотря на то, что он официально не является частью проекта Cucumber, его функционал достаточно схож с фреймворками Cucumber. behave один из самых популярных BDD фреймворков питона.
Источники:
Логотип
Плюсы:
- Полностью поддерживает язык Gherkin;
- Функционал среды и фикстуры (fixture) делают легкими установку и удаление;
- Есть интеграция с Django и Flask;
- Популярен у BDD питонистов;
- Хорошая документация и руководства;
- Есть поддержка PyCharm Professional Edition.
Минусы:
- Нет поддержки параллельного исполнения, для этого нужен отдельный фреймворк behave-parallel;
- behave – это standalone фреймворк;
- Обмен поступками (steps) между feature-файлами может принести много хлопот.
pytest-bdd
Поскольку он интегрирован в pytest, он может работать с любыми другими pytest плагинами, такими как pytest-html для создания красивых отчетов и pytest-xdist для параллельного тестирования. pytest-bdd – это плагин для pytest, который позволяет пользователями писать тесты в виде feature-файлов Gherkin вместо тестовых функций. Он также использует фикстуры pytest для инъекции зависимостей.
Источники:
Логотип
Плюсы:
- Полностью совместим с pytest и его основными плагинами;
- Можно пользоваться всеми преимуществами комьюнити pytest;
- Фикстуры – отличный способ управлять контекстом между поступками;
- Тесты могут быть отфильтрованы и выполнены вместе с другими тестами pytest;
- Определениями поступков и хуков можно легко делиться с помощью conftest.py;
- Табличные данные могут лучше обрабатываться для data-driven тестов;
- Отличная онлайн документация и туториалы;
- Есть поддержка PyCharm Professional Edition.
Минусы:
- Модули определения поступков должны иметь явные объявления для feature-файлов (через “@scenario” или функцию “scenarios”);
- План сценариев поведения должен обрабатываться по-другому.
radish
Особенности языка, такие как циклы сценариев, предварительные условия сценариев и константы делают Gherkin в radish более программным для тестовых кейсов. radish – это BDD фреймворк с изюминкой: он добавляет новый синтаксис в язык Gherkin.
Источники:
Логотип
Плюсы:
- Расширения языка Gherkin дают возможность тестировщикам писать тесты лучше;
- Сайт, документация и логотип – все на месте;
- Feature-файлы и определения поступков получаются очень понятными.
Минусы:
- Является standalone фреймворком с ограниченным количеством расширений;
- Пуристам BDD могут прийтись не по душе добавления в синтаксис Gherkin.
lettuce
Однако его сайт и код давно не обновлялись. lettuce – еще один «овощной» BDD Python-фреймворк, который известен вот уже несколько лет.
Источники:
Логотип:
Плюсы:
- Простой код;
- Проверенный и хороший.
Минусы:
- Не такой богатый функционал, как в других фреймворках;
- Похоже, у него нет активной постоянной поддержки.
freshen
Он был плагином для nose. freshen один из самых первых фреймворков для BDD-тестирования на Python. Однако и freshen и nose больше не поддерживаются, и на странице их документации ясно сказано использовать другие фреймворки.
Рекомендации
В целом, я бы порекомендовал использовать pytest-bdd, поскольку он имеет все преимущества сильных сторон pytest. Ни один из приведенных фреймворков не идеален, однако у многих из них есть существенные преимущества. 2018 Python Developers Survey показал, что pytest является самым популярным фреймворком для тестирования и на Python. Я считаю, что pytest – это один из лучших фреймворков для тестирования на любом языке из-за его лаконичности, фикстур, assert’ов и плагинов. Несмотря на то, что pytest-bdd не выглядит настолько «отполированным», как behave, я считаю, что некоторые TLC из комьюнити с открытым исходным кодом в силах это исправить.
И еще немного рекомендаций:
- Используйте behave, если вам нужен надежный, чистый опыт разработки и большое комьюнити.
- Используйте pytest-bdd, если вам нужна интеграция с другими плагинами, которые уже содержат кучу pytest тестов, или если вам нужно параллельное выполнение тестов.
- Используйте radish, если вы хотите больше программного контроля над тестированием на уровне Gherkin.
- Не используйте lettuce и freshen.
Пожалуйста, поделитесь в комментариях! А какой ваш любимый фреймворк для BDD?