Какую роль играет ключевое слово ‘Given’ в BDD-сценариях (Gherkin)?

«Какую роль играет ключевое слово ‘Given’ в BDD-сценариях (Gherkin)?» — вопрос из категории Автоматизация тестирования, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В синтаксисе Gherkin, используемом для BDD (Behavior-Driven Development), ключевое слово Given описывает начальное состояние системы или контекст перед выполнением тестового сценария. Оно отвечает на вопрос «При каких условиях?».

Назначение и правила:

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

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

Feature: User logout
  Scenario: Successful logout from the main page
    Given the user "alice" is logged into the application
    When the user clicks the "Logout" button
    Then the user is redirected to the login page
    And a success message "You have been logged out" is displayed

Реализация шага Given в коде (на примере Python с pytest-bdd):

from pytest_bdd import given, scenarios
from models import User

scenarios("logout.feature")

@given("the user "<username>" is logged into the application", target_fixture="current_user")
def authenticated_user(username):
    """Фикстура, создающая и авторизующая пользователя."""
    user = User.find_by_name(username)
    user.login()  # Выполнение логики входа (например, установка сессии)
    return user  # Возвращаемый объект будет доступен в следующих шагах

Цель Given — обеспечить воспроизводимое и четко определенное стартовое состояние для каждого теста.