Какие плюсы и минусы Cucumber
Что проверяют
Работали ли вы с Cucumber по-настоящему или знаете его по рекламным тезисам. Главное: понимаете ли вы, когда слой Gherkin окупается, а когда это лишняя прослойка. Следом часто спрашивают, как вы передаёте состояние между шагами.
Как отвечать
Коротко про устройство в Java: сценарии в .feature на Gherkin (Given/When/Then, Background, Scenario Outline с Examples, теги), шаги связываются с методами через Cucumber Expressions или регулярки. Запуск идёт через cucumber-junit-platform-engine на JUnit 5, раннер на JUnit 4 устарел.
Плюсы:
- общий язык: сценарий читают аналитик, тестировщик и разработчик, он же служит живой документацией требований;
- переиспользование шагов: из готового словаря новые сценарии собираются быстро;
- теги и отчёты:
@smokeи@regressдля выборочных прогонов, отчёты понятны людям вне команды; Scenario Outline: один сценарий на таблицу данных без копипаста.
Минусы:
- лишний слой: на каждый сценарий есть feature-файл и glue-код, рефакторинг и навигация в IDE сложнее, чем в обычном JUnit-тесте;
- разрастание словаря: сотни похожих шагов («нажимаю кнопку», «кликаю на кнопку»), которые никто не чистит;
- состояние между шагами: классы шагов не делят поля, нужен DI через
cucumber-picocontainerилиcucumber-spring; - окупается только с бизнесом: если feature-файлы читают одни тестировщики, вы платите за документацию, которой никто не пользуется.
Итог стоит проговорить: Cucumber хорош для приёмочных сценариев с участием аналитиков, а для API-проверок и технических тестов обычно хватает JUnit 5 с AssertJ и понятными именами тестов.
Где спотыкаются
Пишут императивные сценарии: «ввожу логин, ввожу пароль, нажимаю кнопку». Такой сценарий ломается от любой правки интерфейса и не описывает поведение. Лучше «пользователь входит с корректными данными».
Передают состояние между классами шагов через static поля. При параллельном запуске сценарии портят друг другу данные.
Называют медлительность минусом Cucumber. Сам он добавляет немного, медленными тесты делает то, что внутри: браузер, стенд, база.