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

Что делает Then?

1.8 Middle🔥 181 комментариев
#Процессы и методологии разработки#Теория тестирования

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

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

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

Что такое Then в контексте разработки и тестирования?

Вопрос "Что делает Then?" требует контекста, поскольку Then может иметь несколько значений в зависимости от области. Однако в практике QA Engineer, особенно при работе с BDD (Behavior-Driven Development) и фреймворками вроде Cucumber, SpecFlow, JBehave, Then — это ключевая часть структуры Gherkin языка, используемой для описания тестовых сценариев.

Then как шаг в сценарии BDD (Gherkin)

В синтаксисе Gherkin, сценарий описывается последовательностью шагов, начинающихся с ключевых слов:

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

Таким образом, Then делает следующее: он фиксирует ожидания или критерии успешности для тестового сценария. Это утверждение, которое проверяет, что система работает корректно согласно заданному поведению.

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

Feature: Авторизация пользователя
  Чтобы защитить свои данные
  Пользователь должен успешно авторизоваться

  Scenario: Успешный вход с корректными учетными данными
    Given пользователь находится на странице логина
    When пользователь вводит корректный email "test@example.com" и пароль "secret123"
    And нажимает кнопку "Войти"
    Then пользователь должен быть перенаправлен на главную страницу
    And должно отобразиться сообщение "Добро пожаловать, test@example.com"

В этом примере:

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

Что конкретно "делает" шаг Then на уровне реализации теста?

На уровне автоматизированного теста (например, в Cucumber с Java или Python), каждый шаг Gherkin связан с методом-реализацией (step definition). Метод для шага Then содержит код, который выполняет проверки (assertions).

Ключевая задача шага Then — выполнить валидацию. Это может включать:

  • Проверку значений на странице (текст, атрибуты элементов).
  • Проверку состояния системы (запросы к API, данные в базе).
  • Проверку URL или других свойств браузера.
  • Сравнение фактических данных с ожидаемыми.

Пример реализации шага Then в коде (Python с pytest и Selenium)

import pytest
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait

# Это реализация шага Then из примера выше
@then('пользователь должен быть перенаправлен на главную страницу')
def check_redirect_to_main_page(context):
    # Используем явное ожидание для проверки URL или уникального элемента на главной странице
    wait = WebDriverWait(context.driver, 10)

    # Проверка 1: URL соответствует главной странице
    expected_url = "https://example.com/home"
    actual_url = context.driver.current_url
    assert actual_url == expected_url, f"Ожидался URL {expected_url}, но получен {actual_url}"

    # Проверка 2: На странице присутствует уникальный элемент (например, заголовок)
    main_page_header = wait.until(
        EC.presence_of_element_located((By.XPATH, "//h1[contains(text(), 'Добро пожаловать')]"))
    )
    assert main_page_header.is_displayed(), "Заголовок главной страницы не отобразился"

Роль Then в процессе разработки и тестирования

  1. Связь между требованиями и тестами: Then превращает словесное требование ("пользователь должен увидеть сообщение") в конкретную, автоматизированную проверку.
  2. Критерий приемки (Acceptance Criteria): Часто шаги Then напрямую отражают критерии приемки функциональности, согласованные с заказчиком или бизнес-аналитиком.
  3. Фокусировка на результате: Структура Given-When-Then заставляет думать о поведении системы в терминах "что должно произойти", что снижает риск написания тестов, которые лишь повторяют действия без четких ожиданий.
  4. Документация: Сценарии с Then служат живой, исполняемой документацией, которую могут читать и технические, и не-технические участники проекта.

Важные аспекты написания хороших шагов Then

  • Один результат на один Then: Идеально, чтобы один шаг проверял одно конкретное ожидание. Для нескольких проверок используйте связку And.
  • Конкретность и наблюдаемость: Ожидание должно быть проверяемым. "Система должна работать быстрее" — плохо. "Ответ API должен быть получен менее чем за 200 мс" — хорошо.
  • Независимость от реализации: Шаг Then должен описывать результат для пользователя (видимый на UI, ощущаемый), а не внутренние изменения состояния (например, "запись должна появиться в таблице БД" — это скорее шаг для технического теста).

Другие возможные контексты для Then

  • В языках программирования (SQL, функциональные языки): THEN может быть частью условных операторов (CASE ... THEN ... в SQL, if ... then ... в некоторых синтаксисах).
  • В теоретической логике/математике: Используется в конструкциях "if-then".

В заключение, для QA Engineer в контексте BDD и автоматизированного тестирования, Then — это не просто слово, а фундаментальный концепт. Он определяет цель теста, превращая действие (When) в измеряемый и проверяемый результат. Правильно написанные шаги Then делают тесты устойчивыми, понятными и непосредственно связанными с бизнес-ценностью разрабатываемой функциональности.