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

Что делает When?

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

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

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

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

Ответ на вопрос о ключевом слове When

В контексте тестирования программного обеспечения и автоматизации тестов, ключевое слово When играет фундаментальную роль. Оно является одним из трех основных ключевых слов (наряду с Given и Then) в BDD (Behavior-Driven Development) фреймворках, таких как Cucumber, SpecFlow, Behave и других. When используется для описания действия или события, которое является центральным триггером проверяемого сценария.

Роль When в структуре BDD-, Gherkin.

BDD-сценарии, написанные на языке Gherkin, структурируются для максимальной читаемости и ясности как для технических, так и для нетехнических участников проекта (менеджеры, бизнес-аналитики). Структура следует логическому потоку:

  1. Given — описывает начальное состояние системы, контекст или предпосылки. Это "условия дано".
  2. When — описывает ключевое действие, которое выполняет пользователь или система. Это "событие".
  3. Then — описывает ожидаемый результат, который должен быть наблюдаем после действия. Это "проверка".

Иногда добавляются:

  • And / But — для объединения нескольких шагов одного типа.
  • Background — для общих предпосылок для всех сценариев в файле.
  • Scenario Outline / Examples — для параметризованных сценариев.

Конкретное назначение и примеры When

Ключевое слово When отвечает на вопрос: "Что происходит?" или "Что делает пользователь?". Это точка, где начинается тестируемое поведение.

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

Feature: Добавление товара в корзину покупок

  Scenario: Пользователь добавляет товар в пустую корзину
    Given я нахожусь на странице товара "Смартфон XYZ"
    And моя корзина покупок пуста
    When я нажимаю кнопку "Добавить в корзину" # <- КЛЮЧЕВОЕ ДЕЙСТВИЕ
    Then в корзине должен отображаться товар "Смартфон XYZ"
    And общая сумма корзины должна быть равна цене товара

Пример реализации шага When в коде (на Java с Cucumber):

import io.cucumber.java.en.When;

public class BasketSteps {

    @When("я нажимаю кнопку {string}")
    public void iPressTheButton(String buttonName) {
        // Здесь находится код автоматизации, который эмулирует действие пользователя:
        // 1. Найти элемент кнопки на странице (через Selenium WebDriver, например).
        // 2. Кликнуть по этому элементу.
        PageObject page = new PageObject();
        page.clickButton(buttonName);
    }
}

Почему When так важен для QA-инженера?

  1. Четкое разделение ответственности: When логически отделяет подготовку (Given) от проверки (Then). Это делает сценарии модульными и легко поддерживаемыми. Изменение способа выполнения действия (например, через API вместо UI) часто затрагивает только реализацию шага When, не трогая проверки.
  2. Фокус на пользовательском поведении: Оно заставляет формулировать сценарии с точки зрения конечного пользователя или внешней системы, что является основной философией BDD.
  3. Основа для автоматизации: В коде автоматизации шаг When обычно содержит самые существенные команды драйвера (WebDriver, REST-клиент) или вызовы API приложения, которые изменяют состояние системы.
  4. Точка валидации негативных сценариев: When часто используется для описания ошибочных действий, которые затем проверяются в Then на корректную реакцию системы (например, вывод сообщения об ошибке).
    Scenario: Попытка входа с неверным паролем
      Given я на странице входа в систему
      When я ввожу логин "user" и неверный пароль "wrong"
      And нажимаю кнопку "Войти"
      Then я должен увидеть сообщение "Неверный пароль"
      And остаться на странице входа
    

Взаимосвязь с другими частями теста

  • Given -> When: Предпосылки должны гарантировать, что система находится в состоянии, при котором действие When может быть выполнено. Например, нельзя "добавить товар в корзину" (When), если не открыта страница товара (Given).
  • When -> Then: Действие When должно быть именно тем, что приводит к ожидаемому результату, описанному в Then. Если Then проверяет наличие товара в корзине, то When должно быть "добавить товар", а не, например, "просмотреть характеристики".

Заключение

Таким образом, ключевое слово When в BDD-подходе — это оператор действия, центральный элемент любого сценария. Для QA.

  • При проектировании тестов: нужно четко и однозначно формулировать, что происходит.
  • При автоматизации: в реализацию шага When помещается основной код, имитирующий взаимодействие с системой.
  • При анализе результатов: неудачное прохождение сценария часто требует анализа: было ли действие (When) выполнено корректно, или проблема в предпосылках (Given) или проверках (Then).

Использование When в соответствии с его назначением делает тестовую документацию мощным инструментом коммуникации и обеспечивает надежную основу для автоматизации.