В чем разница между Scenario и Scenario Outline в Cucumber?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Разница между Scenario и Scenario Outline в Cucumber
В Cucumber — инструменте для Behavior-Driven Development (BDD) — Scenario и Scenario Outline являются ключевыми конструкциями для описания тестовых сценариев, но они служат разным целям и имеют принципиальные отличия в использовании и возможностях.
Основные определения
Scenario (Сценарий) — это описание конкретного тестового случая, состоящее из последовательности шагов (Given, When, Then). Он выполняет один конкретный пример поведения системы.
Scenario: Успешный логин зарегистрированного пользователя
Given пользователь находится на странице логина
When пользователь вводит валидный email "test@example.com" и пароль "Password123"
And нажимает кнопку "Войти"
Then пользователь перенаправляется на личный кабинет
And отображается приветствие "Добро пожаловать, test@example.com"
Scenario Outline (Контур сценария) — это шаблон для сценария, предназначенный для запуска множества однотипных тестов с различными наборами данных. Он используется для параметризации тестов и предотвращения дублирования кода. Ключевые элементы:
- Examples (Примеры): Таблица с тестовыми данными.
- Плейсхолдеры: Заполнители в шагах, обозначаемые угловыми скобками (
< >).
Scenario Outline: Проверка логина с различными учетными данными
Given пользователь находится на странице логина
When пользователь вводит email "<email>" и пароль "<password>"
And нажимает кнопку "Войти"
Then отображается сообщение "<message>"
Examples:
| email | password | message |
| test@example.com | Password123 | Добро пожаловать |
| wrong@example.com | Password123 | Неверный email или пароль |
| test@example.com | WrongPass | Неверный email или пароль |
| invalid-email | pass | Некорректный формат email |
Ключевые различия в сравнительной таблице
| Критерий | Scenario | Scenario Outline |
|---|---|---|
| Назначение | Описание единичного, конкретного потока. | Описание параметризованного, множественного потока. Шаблон для генерации сценариев. |
| Данные | Данные захардкожены непосредственно в шагах. | Данные вынесены в таблицу Examples и подставляются через плейсхолдеры. |
| Повторное использование | Низкое. Для проверки похожего поведения с другими данными придется копировать сценарий. | Высокое. Один контур позволяет протестировать множество комбинаций данных. |
| Удобство сопровождения | Удобен для уникальных тестов. При изменении данных нужно править каждый сценарий. | Более удобен. Изменение логики вносится в одном месте (шаблон), а данные правятся в таблице. |
| Структура | Линейная последовательность шагов. | Содержит плейсхолдеры в шагах и блок Examples (или несколько блоков Scenarios). |
| Результат выполнения | Запускается и отображается как один тест. | Запускается как N независимых тестов, где N — количество строк в таблице (кроме заголовка). Каждый набор данных выполняется в изоляции. |
Практические аспекты использования
Когда использовать Scenario:
- Для критических путей (happy path) и уникальных бизнес-правил.
- Когда нужно описать поток, а не вариации данных (например, процесс оформления заказа от корзины до подтверждения).
- Для сценариев, не требующих параметризации.
Когда использовать Scenario Outline:
- Для тестирования граничных значений и валидаций (например, форма регистрации с некорректными email, паролями).
- Для проверки одного правила с множеством входных комбинаций (поиск по разным запросам, авторизация с разными ролями).
- Когда существует явная таблица принятия решений (decision table), описанная в требованиях.
Важные нюансы работы с Scenario Outline
-
Изоляция выполнения: Каждая строка из
Examplesвыполняется как отдельный тест. Если один набор данных упадет, остальные все равно будут запущены. -
Несколько таблиц
Examples: Можно задать несколько блоков с данными, используя заголовокScenarios:.Scenario Outline: Контур с двумя наборами примеров When я ввожу <число> Then результат <текст> Scenarios: Позитивные проверки | число | текст | | 5 | "пять" | | 10 | "десять" | Scenarios: Негативные проверки | число | текст | | -1 | "отрицательное"| | 101 | "большое" | -
Связывание шагов: В Java/Step Definitions плейсхолдеры автоматически мапятся на аргументы метода с помощью аннотаций (например,
@When("^пользователь вводит email \"([^\"]*)\" и пароль \"([^\"]*)\"$")).
Вывод
Основное концептуальное отличие заключается в уровне абстракции. Scenario — это атомарный экземпляр теста. Scenario Outline — это фабрика или шаблон, который порождает множество таких экземпляров на основе таблицы данных. Использование Scenario Outline является краеугольным камнем для создания масштабируемых, легко поддерживаемых и неповторяющихся наборов тестов в Cucumber, особенно при работе с большим количеством вариативных входных данных.