Основы BDD: Фреймворки |
13.06.2018 12:57 | ||||||||||||||||||||||||||||||||||||
Оригинал статьи: http://automationpanda.com/2017/02/04/bdd-101-frameworks/ Перевод: Анна Радионова В любом из основных языков программирования существуют BDD фреймворки автоматизации. В некоторых даже не один. Основываясь на структурных принципах, описанных в предыдущей статье, в этой я представляю обзор основных фреймворков, существующих сегодня. Поскольку я вряд ли смогу рассмотреть подробно каждый BDD фреймворк в рамках этой серии, состоящей из 101 статьи, моей целью является помочь вам, читатели, выбрать фреймворк, наиболее подходящий именно вам. Для каждого фреймворка имеется сопроводительная online документация с информацией о его специфике и способах использования, но я бы предпочел не дублировать документацию. Используйте эту статью, главным образом, как справочный материал. (Полный список статей можно найти на странице Automation Panda BDD.) Основные фреймворки Большинство BDD фреймворков - это различные версии Cucumber, производные от фреймворка JBehave, написанные в стиле его создателя Дена Норта (Dan North), или non-Gherkin спек-раннеры. Некоторые организуют поведенческие сценарии в отдельные файлы, в то время как другие размещают их непосредственно в исходном коде. C# и Microsoft .NET SpecFlow является, пожалуй, самым популярным BDD фреймворком для языков Microsoft .NET. Его слоган звучит как “Cucumber для .NET” – поэтому он полностью совместим с Gherkin. Основной пакет фреймворка бесплатный и опенсорсный, но лицензии на расширения SpecFlow+ являются платными. Бесплатная версия требует установки юнит-тест раннера такого как, например, MsTest, NUnit или xUnit.net для запуска сценариев. Это делает использование SpecFlow удобным, но в то же время оставляет ощущение некоторой топорности фреймворка. В лицензионной версии предоставляется легкий раннер под названием SpecFlow+ Runner (который совместим с BDD) и инструмент для интеграции с Microsoft Excel под названием SpecFlow+ Excel. Имеются SpecFlow расширения для Microsoft Visual Studio, облегчающие разработку. Существует множество других BDD фреймворков для C# и .NET. Как альтернативу можно рассматривать xBehave.net, который хорошо работает в паре с xUnit.net. Основное отличие xBehave.net заключается в том, что пошаговые сценарии пишутся непосредственно в коде, а не в отдельных текстовых (так называемых feature) файлах. LightBDD позиционируется как более легковесный, по сравнению с остальными, фреймворк и, как правило, применяет некоторые приемы при работе с partial (частичными) классами для большей читабельности кода. NSpec похож на RSpec и Mocha и активно использует лямбда-выражения. Concordion также предлагает несколько интересных решений написания spec-ов. NBehave производный от JBehave фреймворк, но с 2014 года в нем не производилось никаких обновлений, поэтому можно считать этот проект мертвым. Java и JVM языки Основными конкурентами в Java являются фреймворки Cucumber-JVM и JBehave. Cucumber-JVM - официальная версия Cucumber для языка Java и других JVM языков (Groovy, Scala, Clojure и т.д.). Он полностью совместим с Gherkin и генерирует красивые отчеты. Драйвер Cucumber-JVM также может быть кастомизирован. JBehave является одним из первых и наиболее распространенных BDD фреймворков на рынке. Его разработал Dan North, который считается “отцом BDD.” Однако, в JBehave отсутствуют ключевые особенности Gherkin, такие как backgrounds, doc strings и tags. Также он являлся первым решением на чистой Java и существовал еще до появления Cucumber-JVM. Оба фреймворка широко используются, для них имеются плагины в большинстве IDE и устанавливаются с помощью Maven пакетов. В популярной, но довольно старой статье сравниваются эти два фреймворка и автор склоняется в пользу JBehave, но, я считаю, что Cucumber-JVM лучше учитывая уровень фич и поддержки обоих. Статья в моем блоге Cucumber-JVM for Java содержит подробные инструкции по использованию Cucumber-JVM фреймворка. В языке Java существует множество других BDD фреймворков. JGiven использует fluent API для написания сценариев, а красивые HTML отчеты выводят сценарии вместе с результатами. Его синтаксис вполне лаконичен. Spock и JDave представляют собой spec фреймворки, но JDave не развивается в течение нескольких последних лет. Scalatest для языка Scala также основан на spec компонентах. У Concordion также есть решение для Java. JavaScript Почти все JavaScript BDD фреймворки работают на Node.js. Mocha - это многоцелевой тестовый фреймворк, который преобразовывает фразы на английском языке в код спецификаций. Jasmine похож на Mocha фреймворк, но по нему гораздо меньше обучающего материала. Cucumber предоставляет решение Cucumber.js для полной совместимости с Gherkin. Yadda чем-то напоминает Gherkin, но с более гибким синтаксисом. Vows предоставляет другой тип к поведенческого подхода с использованием более формализованных делений фразовых конструкций для обеспечения уникальности при их переиспользовании. Сравнительные статьи по ним можно найти здесь, здесь, здесь и здесь. В блоге Cucumber ведутся споры на тему того, что Cucumber.js лучший, благодаря тому, что его фокус направлен на достижение лучшей коммуникации посредством описания шагов человеко-читаемым текстом, в то время как в других JavaScript BDD фреймворках больше кода, чем лингвистических средств. PHP Два основных BDD фреймворка для PHP - это Behat и Codeception. Behat является официальной версией Cucumber для PHP, и, собственно, считается более “чистым” BDD фреймворком. Codeception носит большую программерскую направленность и может использоваться для написания других видов тестов. Существует большое количество статей со сравнительным анализом обоих – здесь, здесь и здесь (хотя последняя, кажется, очень устарела). Оба фреймворка довольно хороши, но Codeception кажется более гибким. Python У Python имеется множество тестовых фреймворков и многие являются именно BDD фреймворками. behave и lettuce, наверное, два наиболее значимых “игрока”. Сравнение характеристик аналогично сравнению Cucumber-JVM и JBehave, соответственно: behave полностью совместим Gherkin, в то время как у lettuce нет некоторых лингвистических элементов. Оба имеют плагины для основных IDE. radish - еще один фреймворк, который расширяет язык Gherkin с целью возможности использования сценарных циклов, сценарных предусловий и переменных. Все три записывают сценарии в отдельные feature файлы. Все они внедряют определение шагов в виде функций вместо классов, что не только упрощает описание шагов и делает их использование более независимым, но и помогает избежать ненужных объектных конструкций. Существуют и другие Python фреймворки. pyspecs - spec-ориентированный фреймворк. pytest-bdd добавляет некоторые Gherkin фичи в популярную библиотеку pytest. Freshen являлся BDD плагином для Nose, но они оба, проекты Freshen и Nose, прекращены. Ruby Cucumber, являющийся золотым стандартом BDD фреймворков, впервые был выпущен на языке Ruby. Cucumber поддерживает официальный стандарт языка Gherkin и все версии Cucumber написаны на основе оригинальной на Ruby. Spinach позиционируется как улучшенный Cucumber с доработанным функционалом инкапсуляции шагов. RSpec spec-ориентированный фреймворк, не использующий Gherkin. Какой фреймворк лучше? На этот вопрос нет правильного ответа – лучший BDD фреймворк - это тот, который лучше всего удовлетворяет ваши потребности. Однако, нужно учитывать несколько моментов при выборе:
Фреймворки, которые отделяют текст сценариев от кода хороши для shift-left тестирования. Фреймворки, которые определяют текст сценариев непосредственно в исходный код, лучше подходят для тестирования “белого ящика”, но они могут быть непонятны менее опытным разработчикам. Лидерами моего списка фаворитов являются Cucumber-JVM, SpecFlow и behave. На моей текущей работе я использую SpecFlow и отдаю ему предпочтение среди других .NET фреймворков. Я бы хотел лучше изучить radish и попробовать JGiven для написания unit-тестов. Для лучшей взаимозаменяемости я также рекомендую выбирать фреймворк совместимый с Gherkin. Справочная таблица В таблице ниже приведена классификация BDD фреймворков с указанием их языка программирования. В ней также приводятся фреймворки языков, не описанных в статье. Рекомендуемые к использованию фреймворки отмечены звездочкой (*). Неразвивающиеся проекты отмечены крестиком X (x).
|