Из Википедии, свободной энциклопедии
Перейти к навигации Перейти к поиску

Cucumber - это программный инструмент, поддерживающий разработку на основе поведения (BDD). [7] [8] [9] [10] Центральным элементом подхода Cucumber BDD является синтаксический анализатор обычного языка, называемый Gherkin . Это позволяет указать ожидаемое поведение программного обеспечения на понятном для клиентов логическом языке. Таким образом, Cucumber позволяет выполнять документацию по функциям, написанную деловым текстом. [11] [7] [8] Часто используется для тестирования другого программного обеспечения. [12] Он запускает автоматические приемочные тесты, написанные в стиле разработки, основанной на поведении (BDD). [13]

Cucumber изначально был написан на языке программирования Ruby . [7] [14] [8] и изначально использовался исключительно для тестирования Ruby в качестве дополнения к среде RSpec BDD. Cucumber теперь поддерживает множество различных языков программирования с помощью различных реализаций, включая Java [15] [8] и JavaScript . [16] [17] Порт Cucumber с открытым исходным кодом в .Net называется SpecFlow. [18] [19] [20] Например, Cuke4php и Cuke4Lua - это программные мосты, которые позволяют тестировать PHP.и Lua соответственно. Другие реализации могут просто использовать синтаксический анализатор Gherkin при реализации остальной части инфраструктуры тестирования на целевом языке.

Язык корнишонов [ править ]

Gherkin - это язык, который использует Cucumber для определения тестовых случаев. Он разработан так, чтобы быть нетехническим и удобочитаемым, и в совокупности описывает варианты использования, относящиеся к программной системе. [7] [8] [21] [22] Целью синтаксиса Gherkin является продвижение практик разработки, основанных на поведении, всей команде разработчиков, включая бизнес-аналитиков и менеджеров. Он стремится обеспечить соблюдение твердых, однозначных требований, начиная с начальных этапов определения требований руководством бизнеса и на других этапах жизненного цикла разработки.

Синтаксис естественного языка Gherkin не только предоставляет сценарий для автоматического тестирования, но и обеспечивает простую документацию по тестируемому коду. [22] Gherkin в настоящее время поддерживает ключевые слова на десятках языков. [22] [23] [7] [8]

Языковые операции [22]

# Список доступных языков
огурец --i18n help# Перечислите ключевые слова на языке
огурец --i18n $ LANG

Синтаксис [ править ]

Синтаксис основан на линейно-ориентированном дизайне , аналогичном Python . Структура файла определяется с помощью пробелов и других управляющих символов. [22] # используется как символ комментария к строке и может быть помещен в любом месте файла. [22] Инструкции - это любая непустая строка без комментария. Они состоят из распознанного ключевого слова Gherkin, за которым следует строка. [24]

Все файлы Gherkin имеют .featureрасширение. Они содержат одно определение функции для тестируемой системы и представляют собой исполняемый тестовый сценарий. [24]

Особенности, сценарии и шаги [ править ]

Тесты на огурцы делятся на отдельные особенности. Эти функции подразделяются на сценарии, которые представляют собой последовательности шагов.

Особенности [ править ]

Функция - это вариант использования, который описывает конкретную функцию тестируемого программного обеспечения. Функция состоит из трех частей [24]

  • Feature:ключевое слово
  • Название функции (в той же строке, что и ключевое слово)
  • Необязательное описание в следующих строках

Пример определения функции

Особенность: снятие денег в банкомате Пользователь со счетом в банке хочет снять деньги в банкомате. При условии, что у него есть действующий счет и дебетовая или кредитная карта, ему должно быть разрешено совершать транзакцию. Банкомат обработает запрошенную сумму денег, вернет его карту и вычтет сумму снятия со счета пользователя. Сценарий: Сценарий 1  При наличии предварительных условий Когда действия Затем результаты   Сценарий: Сценарий 2  ...

Сценарии [ править ]

Каждая функция состоит из набора сценариев. Единый сценарий представляет собой поток событий через описываемую функцию и сопоставляет 1: 1 с исполняемым тестовым примером для системы. [24] В соответствии с примером функции снятия средств через банкомат, сценарий может описывать, как пользователь запрашивает деньги и что происходит с его счетом.

Сценарий: Эрик хочет снять деньги со своего банковского счета в банкомате  Учитывая Эрик имеет действительную кредитную или дебетовую карту и баланс его счета составляет $ 100  Когда он вставляет свою карту и снимает 45 долларов  Тогда банкомат должен вернуть 45 долларов. А остаток на его счету - 55 долларов.

В некоторых случаях может потребоваться протестировать несколько сценариев одновременно, чтобы выполнить разделение на эквивалентность и анализ граничных значений . A Scenario Outlineпредоставляет методику указания нескольких примеров для проверки на соответствие шаблонному сценарию с использованием заполнителей. [24] Например,

Краткое описание сценария: пользователь снимает деньги в банкомате,  если у <Name> есть действующая кредитная или дебетовая карта, а баланс его счета составляет <OriginalBalance>  Когда они вставляют свою карту и снимают <WithdrawalAmount>  Затем банкомат должен вернуть <WithdrawalAmount> И баланс их счета <NewBalance>. Примеры:  | Имя  | OriginalBalance | WithdrawalAmount | NewBalance | | Эрик  | 100  | 45  | 55  | | Гаурав | 100  | 40  | 60  | | Эд  | 1000  | 200  | 800  |

Во время выполнения сценарий запускается для каждой строки в таблице. Значения столбцов подставляются для каждого из названных заполнителей в сценарии.

Шаги [ править ]

Суть сценария определяется последовательностью шагов, описывающих предварительные условия и поток событий, которые произойдут. Первое слово шага - это ключевое слово, обычно одно из [24]

  • Given - Описывает предварительные условия и начальное состояние перед началом теста и позволяет выполнить любую предварительную настройку, которая может произойти.
  • When - Описывает действия, предпринятые пользователем во время теста
  • Then - Описывает результат, полученный в результате действий, предпринятых в предложении When.

Иногда комбинация Given-When-Then использует другие ключевые слова для определения союзов.

  • And - Логика и
  • But- Логически то же самое And, но используется в отрицательной форме [25]
Сценарий: пользователь пытается снять больше денег, чем есть на его счету.  Учитывая, что у Джона есть действующая кредитная или дебетовая карта, а баланс его счета составляет 20 долларов США.  Когда он вставляет свою карту и снимает 40 долларов  Затем банкомат выдает ошибку и возвращает его карту, но на его балансе остается 20 долларов.  

Теги [ редактировать ]

Структура черты огурца заставляет организацию. Однако в случаях, когда эта организация по умолчанию неудобна или недостаточна, Gherkin предоставляет теги. Теги являются @-prefixedстроками и могут быть размещены перед [24]

  • Feature
  • Scenario
  • Scenario Outline
  • Examples

Элемент может иметь несколько тегов и наследуется от родительских элементов. [22] [24]

Огурец [ править ]

Определения шагов [ править ]

Шаги в .featureфайлах Gherkin можно рассматривать как вызов метода. [26] [22] Перед тем, как Cucumber сможет выполнить шаг, ему нужно указать, через определение шага, как этот шаг должен быть выполнен.

Определения написаны на Ruby и обычно хранятся в features/step_definitions/*_steps.rb. [22] Определения начинаются с тех же ключевых слов, что и их вызов (включая полную языковую поддержку Gherkin). [22] Каждое определение принимает два аргумента [22]

  • Либо регулярное выражение, либо строка с $ переменными
  • Блок, содержащий рубиновый код для выполнения

Пример использования регулярных выражений

У  /(.*) есть действующая кредитная или дебетовая карта /  do  | имя |  # Конец кода Ruby

Пример использования строк и переменных $. Обратите внимание, что во время выполнения строка преобразуется в регулярное выражение, а любая переменная $ преобразуется в соответствие (.*). [22]

Учитывая, что  «у $ name есть действующая кредитная или дебетовая карта»  сделать  | имя |  # Конец кода Ruby

Крючки [ править ]

Хуки - это способ Cucumber, позволяющий выполнить настройку до запуска тестов, а затем выполнить разборку. Они определены как исполняемые блоки Ruby, аналогичные методам JUnit, отмеченным @Before, @Afterаннотациями. Обычно они размещаются под support/и применяются глобально. [22] Существуют три основных типа крючков [22]

  • Before - Запускается перед сценарием
  • After - Бежит по сценарию
  • Around - Берет на себя управление и обходит сценарий

Дополнительные крючки включают [22]

  • BeforeStep
  • AfterStep
  • AfterConfiguration - Запускается после конфигурации Cucumber и передается экземпляр конфигурации

Before, After, and Aroundхуки опционально принимают список сценариев фильтрации тегов, к которым они применяются. Список тегов в одной строке обрабатывается как OR, а отдельные аргументы обрабатываются как AND; теги могут быть опционально инвертированы, поставив перед ними ~. [22]

Пример хука tagged before

Перед ( '@ATM' )  делать  | сценарий |  # Конец кода Ruby

Хуки часто используются для поддержания состояния базы данных, обычно путем очистки перед запуском сценария. Кроме того , можно начать и откатить транзакцию с использованием Beforeи Afterкрючков, и множество расширений Огурцов обеспечивают @txnтег для такой цели. [24]

Интеграции и реализации [ править ]

Реализации Cucumber не на Ruby существуют для популярных языков, включая Java , JavaScript и Python . [24] Также существует поддержка фреймворков для интеграционного тестирования. Полный список реализаций можно найти на Cucumber. В Cucumber встроены инструменты тестирования, которые хорошо работают со многими конфигурациями непрерывной интеграции . Существуют плагины огурца для популярных инструментов CI, таких как Jenkins и TeamCity, а также для IDE, таких как Eclipse и RubyMine .

Ниже приведен пример определения шага, написанного для Java с использованием Cucumber-JVM. [27]

@Given ( "(. *) Имеет действующую кредитную или дебетовую карту" ) public  void  has_card ( String  name )  {  // Java code }

Плагины форматирования [ править ]

Cucumber использует плагины форматирования для вывода. По умолчанию предоставляется несколько распространенных форматов, включая [24]

  • JSON
  • HTML
  • JUnit

Доступные форматы не стандартизированы для разных реализаций Cucumber, поэтому предложения могут отличаться. [24] Cucumber также поддерживает расширенные форматы вывода, такие как изображения и видео.

Автоматизация браузера [ править ]

Cucumber не поддерживает встроенную автоматизацию браузера. Однако он хорошо работает с существующими программами, такими как Selenium и WATiR-WebDriver . [28] Он поддерживает выполнение тестов с транзакциями с помощью других программ, таких как ActiveRecord . [29]

Командная строка огурца [ править ]

Cucumber поставляется со встроенным интерфейсом командной строки, который охватывает исчерпывающий список инструкций. Как и большинство инструментов командной строки, cucumber предоставляет --helpпараметр, который предоставляет сводку аргументов, которые принимает команда. [30]

$ cucumber --help  -r, --require LIBRARY | DIR Требовать файлы перед выполнением функций.  --i18n LANG Список ключевых слов для определенного языка.  Запустите "--i18n help", чтобы увидеть все языки.  -f, --format FORMAT Как отформатировать объекты (по умолчанию: довольно).  -o, --out [FILE | DIR] Записывать вывод в файл / каталог вместо  ...

Командную строку Cucumber можно использовать для быстрого запуска определенных тестов. Он также поддерживает выполнение подмножества сценариев путем фильтрации тегов.

$ огурец --tags @ имя-тега

Вышеупомянутая команда помогает выполнять только те сценарии, в которых указаны указанные @tag-name. [30] Аргументы могут быть представлены как логические операции ORили ANDоперации тегов. Помимо тегов, сценарии можно фильтровать по названиям сценариев. [30]

$ cucumber --name выйти

Вышеупомянутая команда запустит только те сценарии, которые содержат слово «выход».

Также полезно знать, что пошло не так, если тест не прошел. Cucumber позволяет легко обнаруживать ошибки в коде с помощью --backtraceопции. [30]

Cucumber также можно настроить на игнорирование некоторых незавершенных сценариев, пометив их тегом «Работа в процессе» @wip. Когда Cucumber передается --wipаргумент, Cucumber игнорирует сценарии с @wipтегом.

Ссылки [ править ]

  1. ^ "Aslak Hellesøy" . Aslakhellesoy.com . Проверено 24 января 2012 .
  2. ^ «Джозеф Уилк | об искусственном интеллекте, сети, удобстве использования, тестировании и программном процессе» . Blog.josephwilk.net . Проверено 24 января 2012 .
  3. ^ "Развитие, движимое чаем" . Blog.mattwynne.net . Проверено 24 января 2012 .
  4. ^ "Профиль гнатюка" . GitHub . Проверено 24 января 2012 .
  5. ^ "Профиль msassak" . GitHub . Проверено 24 января 2012 .
  6. ^ «Релизы - огурец / огурец-рубин» . Проверено 9 августа 2018 г. - через GitHub .
  7. ^ a b c d e "Прагматическая книжная полка | Книга огурцов" . Pragprog.com. Архивировано из оригинала на 2012-01-21 . Проверено 24 января 2012 .
  8. ^ Б с д е ф Rose, Seb; Винн, Мэтт; Хеллесой, Аслак (15 февраля 2015 г.). Прагматическая книжная полка | Книга "Огурец для Явы" . Pragprog.com . Проверено 28 апреля 2019 .
  9. ^ "Что такое огурец?" . огурец . Проверено 8 июня 2019 .
  10. ^ Аслак Хеллесой. «Самый непонятый инструмент для совместной работы в мире» . огурец .
  11. ^ Фокс, Армандо; Паттерсон, Дэвид (2016). Инженерное программное обеспечение как услуга . Клубничный каньон. С. 218–255. ISBN 978-0-9848812-4-6.
  12. ^ «Автоматическое тестирование с использованием селена и огурца» . www.ibm.com . 2013-08-06 . Проверено 9 февраля 2017 .
  13. ^ Soeken, Матиас; Вилле, Роберт; Дрекслер, Рольф (29 мая 2012 г.). Furia, Carlo A .; Нанц, Себастьян (ред.). Объекты, модели, компоненты, выкройки . Конспект лекций по информатике. Springer Berlin Heidelberg. С. 269–287. DOI : 10.1007 / 978-3-642-30561-0_19 . ISBN 9783642305603.
  14. ^ "Прагматическая книжная полка | Книга RSpec" . Pragprog.com. 2010-12-02. Архивировано из оригинала на 2012-01-21 . Проверено 24 января 2012 .
  15. ^ "Огурец-jvm" . огурец . Проверено 8 марта 2018 .
  16. ^ "Огурец-js" . огурец . Проверено 8 марта 2018 .
  17. ^ Найделе Манджунатх; Оливье де Мелдер (01.02.2019). «Нет кода? Нет проблем - написание тестов на простом английском» . Times Open . Проверено 29 апреля 2019 .
  18. ^ «Привязка бизнес-требований к .NET-коду» . SpecFlow . Проверено 29 апреля 2019 .
  19. ^ "SpecFlow" . GitHub . Проверено 29 апреля 2019 .
  20. ^ Ричард Лоуренс; Пол Рейнер (2018). Поведенческое развитие с огурцом . Эддисон Уэсли.
  21. ^ "огурец / корнишон" . GitHub . Проверено 9 февраля 2017 .
  22. ^ a b c d e f g h i j k l m n o p "Синтаксис корнишона" . огурец . Проверено 9 июля 2019 .
  23. ^ «Языки, поддерживаемые корнишоном» . Корнишон. огурец / огурец: Cucumber monorepo - строительные блоки для огурца на разных языках . Источник 2021-03-21 - через GitHub .
  24. ^ a b c d e f g h i j k l "Ссылка" . огурец . Архивировано из оригинала на 2015-10-25 . Проверено 17 января 2016 .
  25. ^ «Корнишоний язык» . бехат . Проверено 17 января 2016 .
  26. ^ «Документация по огурцу» . GitHub . 2019-01-23.
  27. ^ "Огурец-JVM" . GitHub . Проверено 10 февраля +2016 .
  28. ^ «GitHub - watir / watir-webdriver: код Watir-webdriver перемещен» . 2018-06-09.
  29. ^ «GitHub - рельсы / рельсы: Ruby on Rails» . 2019-01-24.
  30. ^ а б в г Винн, Мэтт; Хеллесой, Аслак. «Огуречная книга» . SafariBooksOnline . Проверено 22 января +2016 .

Внешние ссылки [ править ]

  • Инженерное программное обеспечение как услуга: гибкий подход с использованием облачных вычислений, Армандо Фокс и Дэвид Паттерсон
  • Огурец проект
  • Проектная документация по огурцу
  • В кузнице - Огурец , Реувен М. Лернер в Linux Journal
  • Agile 2009 - Aslak Hellesoy - тестовая среда Cucumber , подкаст Боба Пейна с Аслаком Хеллесой
  • Огурец: Последнее в тестировании Ruby , Майк Гандерлой
  • Specflow, огурец в .NET