Огурец (программное обеспечение) - Cucumber (software)

Огурец
Разработчики)Аслак Хеллесой,[1] Джозеф Уилк,[2] Мэтт Винн,[3] Григорий Гнатюк,[4] Майк Сассак[5]
Стабильный выпуск
3.1.2[6] / 13 июля 2018; 2 года назад (2018-07-13)
Репозиторий Отредактируйте это в Викиданных
Написано вРубин
Операционная системаКроссплатформенность
ТипРазвитие, основанное на поведении рамки / Инструмент тестирования
ЛицензияЛицензия MIT
Интернет сайтогурец.io

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

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

Язык корнишонов

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

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

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

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

Синтаксис

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

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

Возможности, сценарии и шаги

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

Функции

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

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

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

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

Сценарии

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

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

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

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

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

Шаги

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

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

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

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

Теги

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

  • Особенность
  • Сценарий
  • Схема сценария
  • Примеры

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

Огурец

Определения шагов

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

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

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

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

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

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

Крючки

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

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

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

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

До, после и вокруг хуки опционально принимают список сценариев фильтрации тегов, к которым они применяются. Список тегов в той же строке рассматривается как ИЛИ ЖЕ, а отдельные аргументы рассматриваются как И; теги могут быть опционально инвертированы, если им предшествует ~.[22]

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

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

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

Интеграции и внедрения

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

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

@Данный("(. *) имеет действующую кредитную или дебетовую карту")общественный пустота has_card(Нить имя) {    // Java-код}

Плагины форматирования

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

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

Автоматизация браузера

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

Командная строка огурца

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

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

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

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

Вышеупомянутая команда помогает выполнять только те сценарии, в которых указан @название тэга.[30] Аргументы могут быть представлены как логические ИЛИ ЖЕ или же И работа тегов. Помимо тегов, сценарии можно фильтровать по именам сценариев.[30]

$ огурец - имя выйти

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

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

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

Рекомендации

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

внешняя ссылка