Что делает Then?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Что такое 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 в процессе разработки и тестирования
- Связь между требованиями и тестами:
Thenпревращает словесное требование ("пользователь должен увидеть сообщение") в конкретную, автоматизированную проверку. - Критерий приемки (Acceptance Criteria): Часто шаги
Thenнапрямую отражают критерии приемки функциональности, согласованные с заказчиком или бизнес-аналитиком. - Фокусировка на результате: Структура Given-When-Then заставляет думать о поведении системы в терминах "что должно произойти", что снижает риск написания тестов, которые лишь повторяют действия без четких ожиданий.
- Документация: Сценарии с
Thenслужат живой, исполняемой документацией, которую могут читать и технические, и не-технические участники проекта.
Важные аспекты написания хороших шагов Then
- Один результат на один
Then: Идеально, чтобы один шаг проверял одно конкретное ожидание. Для нескольких проверок используйте связкуAnd. - Конкретность и наблюдаемость: Ожидание должно быть проверяемым. "Система должна работать быстрее" — плохо. "Ответ API должен быть получен менее чем за 200 мс" — хорошо.
- Независимость от реализации: Шаг
Thenдолжен описывать результат для пользователя (видимый на UI, ощущаемый), а не внутренние изменения состояния (например, "запись должна появиться в таблице БД" — это скорее шаг для технического теста).
Другие возможные контексты для Then
- В языках программирования (SQL, функциональные языки):
THENможет быть частью условных операторов (CASE ... THEN ...в SQL,if ... then ...в некоторых синтаксисах). - В теоретической логике/математике: Используется в конструкциях "if-then".
В заключение, для QA Engineer в контексте BDD и автоматизированного тестирования, Then — это не просто слово, а фундаментальный концепт. Он определяет цель теста, превращая действие (When) в измеряемый и проверяемый результат. Правильно написанные шаги Then делают тесты устойчивыми, понятными и непосредственно связанными с бизнес-ценностью разрабатываемой функциональности.