2. Тестовые сценарии будут выглядеть консистентно, независимо от того, что в них тестируется
Это, на мой скромный взгляд, один из наиболее существенных плюсов BDD-инструментов, который и сподвиг лично меня использовать Cucumber на одном из проектов.
Ваши тестовые сценарии - это всегда BDD-сценарии, описанные одинаково. С точки зрения читаемости тестов совершенно не имеет значения, что происходит под капотом: тестируется поведение в браузере, API, вызываются миграции, генерируется Brainfuck код - это все будет выглядить как последовательность Given X, When Y, Then Z.
3. BDD-фреймворки навязывают определенную структуру проекта, тестов и разделения логики действий с логикой теста.
Разделение тестов на Feature, Scenario и Test Values, да и в целом структура Cucumber проектов, дает хороший пинок в сторону того, что бы правильно разделять логику тестов.
Имплементация действий пользователя лежит в Steps, логика тестов лежит в Features, все вспомогательные ручки лежат в Hooks и Support.
Это помогает избежать типичного бардака с перегруженными логикой тестами, монструозными методами, файлами на 30000 строк и прочим.
Отдельный приятный плюс - вполне себе удобная запускалка + репорты из коробки, которые предлагает Cucumber. Вполне достаточно для старта, что бы не приходилось подключать сторонние инструменты.
4. BDD-сценарии можно использовать как тестовую документацию
Это ещё один довольно распространенный аргумент в спорах за BDD. Исключительно моё мнение - нет, нельзя. Да, ваши BDD сценарии могут быть так же читаемы, как тест-кейсы.
При этом это фактически полностью убивает возможность их нормально структурировать, группировать, поддерживать версионность, а так же просто безумно ограничивает по форматированию.
Кроме того, это банально менее удобно, чем хранить тестовую документацию в предназначенных для этого системах.
Возможно такая документация лучше, чем никакой, но утверждать что BDD-сценарии способны заменить полноценную документацию - довольно опрометчиво.
Минусы:
Тут, на самом деле, всё достаточно прозаично и очевидно.
1. Использование BDD-инструментов увеличивает затраты времени на написание автотестов.
Чем больше и сложнее (с логической точки зрения) проект, тем больше сценариев и шагов для них придется писать, тем большее количество кода придется в них оборачивать.
Надо понимать, что это ещё одно место в вашем проекте, которое неободимо поддерживать, причесывать и рефакторить. Более того, чем больше сценариев - тем сложнее сохранять DRY в Test Steps и делать их пригодными для переиспользования.
По моему опыту, иногда больше времени тратится на организацию именно BDD шагов и сценариев, чем на написание кода.
Я бы сказал, что если вы уже знакомы с инструментом, то его использование даст +20% к времени на написание тестов. Если вы параллельно с ним знакомитесь - то можно смело умножать время на 2, т.к. придется разбираться, дебажить, рефакторить, разбираться дальше и пр.
2. Это дополнительная зависимость в вашем коде, которая может служить органичением и\или точкой отказа тестов.
Если вы в проекте какой-то инструмент, то все его ограничения, особенности и баги - становятся вашими ограничениями и проблемами. Это отдельная точка дебаггинга (код выполняется корректно, но при выполнении BDD сценария дает false positive\false negative). Это дополнительная внешняя зависимость, с которой придется считаться и для которой придется городить костыли: если вас, например, не устраивает логика работы встроенного Background - готовьтесь плясать с бубном, делать миллион кастомных Hooks и отлаживать как это будет работать.
Иногда самым безболезненным и быстрым решением становится форкнуть и "допилить" под себя, но думаю мне не стоит объяснять в какой геморрой это выливается в долгосрочной перспективе.
Это и дополнительная зависимость окружения, которая может уронить ваши тесты: у меня на проекте у Cucumber и Unirest был конфликт зависимостей между друг другом, причем возникающий довольно рандомно. Пришлось потратить изрядно времени, что бы найти workaround для запуска.