Развитие, управляемое поведением - Корнишон
Корнишон - это язык, на котором пишут Features, Scenarios, and Steps. Цель Gherkin - помочь нам написать конкретные требования.
Чтобы понять, что мы подразумеваем под конкретными требованиями, рассмотрим следующий пример -
Клиенты не должны вводить недействительные данные кредитной карты.
Если клиент вводит номер кредитной карты, состоящий не из 16 цифр, при попытке отправить форму он должен снова отобразиться с сообщением об ошибке, в котором указано правильное количество цифр.
Последний не имеет двусмысленности, позволяет избежать ошибок и гораздо более поддается проверке.
Gherkin создан для создания более конкретных требований. В Gherkin приведенный выше пример выглядит так -
Feature
Отзыв при вводе недействительных данных кредитной карты Feature Definition
При пользовательском тестировании мы видели много людей, которые допускают ошибки Документация
Background True for all Scenarios Below
Given Я выбрал товар для покупки,
And Я собираюсь ввести номер своей кредитной карты
Scenario - слишком короткий номер кредитной картыScenario Definition
When Я ввожу номер карты, длина которого меньше 16 цифр
And все остальные детали верны
And Я отправляю формуSteps
Then форма должна быть повторно отображена
And Я должен увидеть сообщение с указанием правильного количества цифр
Формат и синтаксис Gherkin
Файлы Gherkin представляют собой обычные текстовые файлы с расширением .feature. Каждая непустая строка должна начинаться с ключевого слова Gherkin, за которым следует любой текст, который вам нравится. Ключевые слова -
Feature
Scenario
Дано, когда, тогда и, но (шаги)
Background
Схема сценария
Examples
"" "(Строки документа)
| (Таблицы данных)
@ (Теги)
# (Комментарии)
*
Характерная черта
В Featureключевое слово используется для описания функции программного обеспечения и для группировки связанных сценариев. Функция состоит из трех основных элементов:
Ключевое слово - Feature.
Имя функции, указанное в той же строке, что и ключевое слово Feature.
Необязательное (но настоятельно рекомендуемое) описание, которое может охватывать несколько строк, то есть весь текст между строкой, содержащей ключевое слово Feature, и строкой, которая начинается с сценария, фона или схемы сценария.
В дополнение к имени и описанию функции содержат список сценариев или схемы сценариев, а также необязательный фон.
Принято называть .featureфайл, взяв имя функции, преобразовав его в нижний регистр и заменив пробелы подчеркиванием. Например,
feedback_when_entering_invalid_credit_card_details.feature
Чтобы идентифицировать функции в вашей системе, вы можете использовать так называемый «шаблон внедрения функций».
Описания
Некоторые части документов Gherkin не обязательно должны начинаться с ключевого слова.
В строках, следующих за функцией, сценарием, схемой сценария или примерами, вы можете написать что угодно, если ни одна строка не начинается с ключевого слова. Это способ включения описаний.
Сценарий
Чтобы выразить поведение вашей системы, вы присоединяете один или несколько сценариев к каждой функции. Обычно для каждой функции отображается от 5 до 20 сценариев, чтобы полностью указать все действия, связанные с этой функцией.
Сценарии следуют следующему шаблону -
Опишите исходный контекст
Опишите событие
Опишите ожидаемый результат
Мы начинаем с контекста, описываем действие и проверяем результат. Это делается по шагам. Gherkin предлагает три ключевых слова для описания каждого из контекстов, действий и результатов в виде шагов.
Given - Установить контекст
When - Выполнить действие
Then - Проверить результат
Эти ключевые слова обеспечивают читаемость сценария.
Example
Scenario - Снимите деньги со счета.
Given У меня на счету 100 долларов.
When Прошу 20 долларов.
Then Следует выделить 20 долларов.
Если есть несколько Given или же When шаги друг под другом, вы можете использовать And или же But. Они позволяют подробно указывать сценарии.
Example
Scenario - Попытка вывода средств с использованием украденной карты.
Given У меня на счету 100 долларов.
But моя карта недействительна.
When Прошу 50 долларов.
Then моя карта не подлежит возврату.
And Мне нужно сказать, чтобы я обратился в банк.
Создавая сценарии, помните, что «каждый сценарий должен иметь смысл и быть способным выполняться независимо от любого другого сценария». Это означает -
У вас не может быть условия успеха одного сценария, зависящего от того факта, что перед ним был выполнен другой сценарий.
Каждый сценарий создает свой конкретный контекст, выполняет одно действие и проверяет результат.
Такие сценарии обеспечивают следующие преимущества -
Тесты станут проще и понятнее.
Вы можете запустить только часть своих сценариев, и вам не нужно беспокоиться о выходе из строя вашего набора тестов.
В зависимости от вашей системы вы можете запускать тесты параллельно, сокращая время, необходимое для выполнения всех ваших тестов.
Схема сценария
Если вам нужно написать сценарии с несколькими входами или выходами, вы можете создать несколько сценариев, которые отличаются только своими значениями. Решение - использовать схему сценария. Чтобы написать план сценария,
Переменные в шагах схемы сценария помечены <и>.
Различные значения переменных приведены в качестве примеров в таблице.
Example
Предположим, вы пишете функцию для сложения двух чисел на калькуляторе.
Feature - Добавить.
Scenario Outline: Add two numbers.
Given the input "<input>"
When the calculator is run
Then the output should be <output>"
Examples
| input | output |
| 2+2 | 4 |
| 98+1 | 99 |
| 255+390 | 645 |
За разделом схемы сценария всегда следует один или несколько разделов примеров, которые являются контейнером для таблицы. Таблица должна иметь строку заголовка, соответствующую переменным в шагах схемы сценария. Каждая из строк ниже создает новый сценарий, заполняя значения переменных.