Написание feature файлов

Feature файлы в контексте тестирования с Protractor являются ключевым элементом для описания функциональности приложения на языке Gherkin. Они представляют собой текстовые файлы с расширением .feature, где тестируемое поведение формулируется в виде сценариев (scenarios). Основное назначение feature файлов — разделение описания поведения приложения от реализации тестов, что делает тесты более читабельными и поддерживаемыми.

Каждый feature файл начинается с ключевого слова Feature, за которым следует краткое описание функциональности. Например:

Feature: Авторизация пользователя
  Проверка корректного входа в систему с валидными и невалидными данными.

После описания функциональности следуют сценарии. Сценарий (Scenario) описывает отдельный путь использования функционала и состоит из последовательности шагов.

Основные элементы сценария

Шаги в feature файле начинаются с ключевых слов Given, When, Then, And, But. Их назначение:

  • Given — описывает исходное состояние системы или подготовку к тесту.
  • When — фиксирует действие пользователя или событие.
  • Then — проверка результата или состояния системы.
  • And / But — объединяют несколько последовательных действий или проверок одного типа.

Пример сценария:

Scenario: Успешный вход в систему
  Given пользователь находится на странице логина
  When пользователь вводит корректные учетные данные
  And нажимает кнопку "Войти"
  Then пользователь видит главную страницу

Параметризация сценариев

Feature файлы поддерживают параметры, позволяющие переиспользовать один сценарий для разных входных данных. Для этого используются Scenario Outline и блок Examples. Пример:

Scenario Outline: Авторизация с различными учетными данными
  Given пользователь находится на странице логина
  When пользователь вводит логин "<username>" и пароль "<password>"
  And нажимает кнопку "Войти"
  Then отображается сообщение "<message>"

Examples:
  | username | password | message                  |
  | admin    | 12345    | Добро пожаловать, admin  |
  | test     | wrong    | Неверный логин или пароль |

Такой подход сокращает дублирование и повышает читаемость тестов.

Организация feature файлов

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

  • Один файл — одна функциональность.
  • Сценарии внутри файла группируются логически, избегая чрезмерного дробления.
  • Дублирование шагов следует минимизировать через повторное использование step definitions.

Пример структуры проекта:

/features
  login.feature
  registration.feature
  shopping_cart.feature
/features/step_definitions
  loginSteps.js
  registrationSteps.js
  cartSteps.js

Связь feature файлов и step definitions

Каждый шаг сценария в feature файле должен соответствовать функции в step definition. Protractor с Cucumber позволяет связывать шаги с функциями через регулярные выражения. Пример:

const { Given, When, Then } = require('cucumber');
const { browser, element, by } = require('protractor');

Given('пользователь находится на странице логина', async () => {
  await browser.get('https://example.com/login');
});

When('пользователь вводит логин {string} и пароль {string}', async (username, password) => {
  await element(by.id('username')).sendKeys(username);
  await element(by.id('password')).sendKeys(password);
});

Then('отображается сообщение {string}', async (message) => {
  const alertText = await element(by.css('.alert')).getText();
  if (alertText !== message) throw new Error(`Ожидалось "${message}", но получено "${alertText}"`);
});

Ключевой момент: соблюдение точного соответствия текста шага в feature файле и регулярного выражения в step definition критично для корректного выполнения тестов.

Практические рекомендации по написанию feature файлов

  • Формулировать шаги кратко и понятно, избегая излишней технической детализации.
  • Разделять подготовку, действие и проверку через Given/When/Then для удобства чтения.
  • Использовать Scenario Outline для повторяющихся тестов с разными данными.
  • Поддерживать последовательность шагов в логическом порядке, отражающем реальное поведение пользователя.
  • Проверять, чтобы каждый шаг имел соответствующую реализацию в step definition.
  • Комментарии можно добавлять через символ #, но их следует использовать экономно, чтобы не загромождать файл.

Валидация и тестирование feature файлов

Protractor с Cucumber автоматически проверяет синтаксис feature файлов при запуске тестов. Ошибки чаще всего возникают из-за:

  • Неправильного отступа или форматирования.
  • Несоответствия текста шага и step definition.
  • Отсутствия или неправильного указания параметров в Scenario Outline.

Использование линтеров для Gherkin может предотвратить большинство подобных ошибок.

Feature файлы становятся центром коммуникации между разработчиками, тестировщиками и менеджерами, так как описывают функциональность на естественном языке, но при этом остаются исполнимыми через Protractor и Cucumber.