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