Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Ответ на вопрос о ключевом слове When
В контексте тестирования программного обеспечения и автоматизации тестов, ключевое слово When играет фундаментальную роль. Оно является одним из трех основных ключевых слов (наряду с Given и Then) в BDD (Behavior-Driven Development) фреймворках, таких как Cucumber, SpecFlow, Behave и других. When используется для описания действия или события, которое является центральным триггером проверяемого сценария.
Роль When в структуре BDD-, Gherkin.
BDD-сценарии, написанные на языке Gherkin, структурируются для максимальной читаемости и ясности как для технических, так и для нетехнических участников проекта (менеджеры, бизнес-аналитики). Структура следует логическому потоку:
Given— описывает начальное состояние системы, контекст или предпосылки. Это "условия дано".When— описывает ключевое действие, которое выполняет пользователь или система. Это "событие".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-инженера?
- Четкое разделение ответственности:
Whenлогически отделяет подготовку (Given) от проверки (Then). Это делает сценарии модульными и легко поддерживаемыми. Изменение способа выполнения действия (например, через API вместо UI) часто затрагивает только реализацию шагаWhen, не трогая проверки. - Фокус на пользовательском поведении: Оно заставляет формулировать сценарии с точки зрения конечного пользователя или внешней системы, что является основной философией BDD.
- Основа для автоматизации: В коде автоматизации шаг
Whenобычно содержит самые существенные команды драйвера (WebDriver, REST-клиент) или вызовы API приложения, которые изменяют состояние системы. - Точка валидации негативных сценариев:
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 в соответствии с его назначением делает тестовую документацию мощным инструментом коммуникации и обеспечивает надежную основу для автоматизации.