← Назад к вопросам

В чем разница между Scenario и Scenario Outline в Cucumber?

2.0 Middle🔥 111 комментариев
#Теория тестирования

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI7 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Разница между 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          |

Ключевые различия в сравнительной таблице

КритерийScenarioScenario Outline
НазначениеОписание единичного, конкретного потока.Описание параметризованного, множественного потока. Шаблон для генерации сценариев.
ДанныеДанные захардкожены непосредственно в шагах.Данные вынесены в таблицу Examples и подставляются через плейсхолдеры.
Повторное использованиеНизкое. Для проверки похожего поведения с другими данными придется копировать сценарий.Высокое. Один контур позволяет протестировать множество комбинаций данных.
Удобство сопровожденияУдобен для уникальных тестов. При изменении данных нужно править каждый сценарий.Более удобен. Изменение логики вносится в одном месте (шаблон), а данные правятся в таблице.
СтруктураЛинейная последовательность шагов.Содержит плейсхолдеры в шагах и блок Examples (или несколько блоков Scenarios).
Результат выполненияЗапускается и отображается как один тест.Запускается как N независимых тестов, где N — количество строк в таблице (кроме заголовка). Каждый набор данных выполняется в изоляции.

Практические аспекты использования

Когда использовать Scenario:

  • Для критических путей (happy path) и уникальных бизнес-правил.
  • Когда нужно описать поток, а не вариации данных (например, процесс оформления заказа от корзины до подтверждения).
  • Для сценариев, не требующих параметризации.

Когда использовать Scenario Outline:

  • Для тестирования граничных значений и валидаций (например, форма регистрации с некорректными email, паролями).
  • Для проверки одного правила с множеством входных комбинаций (поиск по разным запросам, авторизация с разными ролями).
  • Когда существует явная таблица принятия решений (decision table), описанная в требованиях.

Важные нюансы работы с Scenario Outline

  1. Изоляция выполнения: Каждая строка из Examples выполняется как отдельный тест. Если один набор данных упадет, остальные все равно будут запущены.

  2. Несколько таблиц Examples: Можно задать несколько блоков с данными, используя заголовок Scenarios:.

    Scenario Outline: Контур с двумя наборами примеров
      When я ввожу <число>
      Then результат <текст>
    
      Scenarios: Позитивные проверки
        | число | текст      |
        | 5     | "пять"     |
        | 10    | "десять"   |
    
      Scenarios: Негативные проверки
        | число | текст          |
        | -1    | "отрицательное"|
        | 101   | "большое"      |
    
  3. Связывание шагов: В Java/Step Definitions плейсхолдеры автоматически мапятся на аргументы метода с помощью аннотаций (например, @When("^пользователь вводит email \"([^\"]*)\" и пароль \"([^\"]*)\"$")).

Вывод

Основное концептуальное отличие заключается в уровне абстракции. Scenario — это атомарный экземпляр теста. Scenario Outline — это фабрика или шаблон, который порождает множество таких экземпляров на основе таблицы данных. Использование Scenario Outline является краеугольным камнем для создания масштабируемых, легко поддерживаемых и неповторяющихся наборов тестов в Cucumber, особенно при работе с большим количеством вариативных входных данных.

В чем разница между Scenario и Scenario Outline в Cucumber? | PrepBro