Gherkin — это язык, используемый для описания требований к программному обеспечению в формате, понятном как для технических специалистов, так и для бизнес-пользователей. Он лежит в основе Behavior Driven Development (BDD) и позволяет создавать сценарии тестирования, которые становятся одновременно документацией и тестами. В контексте Protractor Gherkin используется вместе с библиотеками вроде Cucumber.js для автоматизации E2E-тестов веб-приложений на Angular и других фреймворках.
Feature описывает функциональность, которую необходимо
протестировать. Каждая feature-файл начинается с этой ключевой метки и
краткого описания. Пример:
Feature: Авторизация пользователя
Проверка возможности входа в систему с корректными учетными данными.
Особенности:
Scenario) могут относиться к одной
feature.Scenario представляет конкретный тестовый сценарий —
последовательность шагов, которую необходимо выполнить для проверки
функциональности.
Scenario: Успешный вход в систему
Given я нахожусь на странице входа
When я ввожу корректные логин и пароль
Then я вижу главную страницу пользователя
Особенности:
Scenario Outline используется для параметризованных
тестов, когда один сценарий нужно проверить с разными данными.
Scenario Outline: Вход в систему с различными учетными данными
Given я нахожусь на странице входа
When я ввожу <логин> и <пароль>
Then я вижу сообщение <результат>
Examples:
| логин | пароль | результат |
| user1 | pass123 | Добро пожаловать, user1 |
| invalidUser | wrong | Ошибка авторизации |
Особенности:
Examples позволяет многократно запускать один
сценарий с разными данными.<...>.Эти ключевые слова определяют поведение теста:
Дополнительно используются:
Given я нахожусь на главной странице
And я вижу форму поиска
When я ввожу "Protractor"
Then я вижу список результатов поиска
But результат "Пример" отсутствует
Step definitions связывают Gherkin-шаги с JavaScript-кодом. Они реализуются через Cucumber.js и Protractor API.
const { Given, When, Then } = require('@cucumber/cucumber');
const { browser, element, by } = require('protractor');
Given('я нахожусь на странице входа', async function () {
await browser.get('http://example.com/login');
});
When('я ввожу корректные логин и пароль', async function () {
await element(by.id('username')).sendKeys('user1');
await element(by.id('password')).sendKeys('pass123');
await element(by.id('loginButton')).click();
});
Then('я вижу главную страницу пользователя', async function () {
const title = await browser.getTitle();
if (title !== 'Главная') {
throw new Error('Страница не соответствует ожидаемой');
}
});
Особенности:
Теги (@) позволяют группировать сценарии для выборочного
запуска. Например:
@smoke
Scenario: Успешный вход
Given я нахожусь на странице входа
When я ввожу корректные логин и пароль
Then я вижу главную страницу пользователя
Запуск тестов с тегом в Protractor через Cucumber.js:
npx cucumber-js --tags "@smoke"
Особенности:
@smoke and not @wip.features/ — директория с feature-файлами.features/step_definitions/ — папка со step
definitions.protractor.conf.js — конфигурация Protractor,
интеграция с Cucumber.Пример minimal конфигурации:
exports.config = {
framework: 'custom',
frameworkPath: require.resolve('protractor-cucumber-framework'),
specs: ['features/*.feature'],
cucumberOpts: {
require: ['features/step_definitions/*.js'],
strict: true
},
capabilities: {
browserName: 'chrome'
}
};
Эта дисциплина позволяет создавать читабельные, поддерживаемые и автоматизированные тесты, полностью интегрированные с Protractor и современными веб-приложениями.