Недавно мне удалось пообщаться с одним тестировщиком, который пишет тесты на языке Gherkin. Для меня это что-то старое и не очень практичное. Я уже и забыл, как и что там работает и пишется. В общем, решил я вспомнить.
Behavior-Driven Development (BDD) - это процесс разработки программного обеспечения, который направлен на улучшение сотрудничества между разработчиками, тестировщиками и непрограммирующими участниками проекта, такими как бизнес-аналитики или клиенты. BDD фокусируется на использовании простого языка, который позволяет всем участникам четко понимать поведение системы без знаний технических деталей.
Для описания поведения используется язык Gherkin, который позволяет формулировать требования к функционалу в форме "поведенческих сценариев". Эти сценарии затем используются как основа для разработки и тестирования.
Преимущества BDD:
• Улучшает коммуникацию и понимание между членами команды
• Позволяет бизнес-аналитикам и тестировщикам активно участвовать в процессе разработки
• Способствует созданию более точных и понятных требований
• Облегчает автоматизацию тестирования
Недостатки BDD:
• Требует времени для изучения и внедрения
• Может быть сложным для команд, не знакомых с концепциями TDD или ATDD
• Необходимость в поддержке соответствующих инструментов и фреймворков
Пример сценария на языке Gherkin.
Feature: Поиск в интернет-магазине
Scenario: Пользователь находит продукты по категориям
Given Пользователь находится на главной странице
When Он выбирает категорию "Электроника"
Then Отображается список продуктов категории "Электроника"
And Каждый продукт имеет название, цену и кнопку "В корзину"
But Продукты других категорий не отображаются
Ключевые слова Gherkin и их значение:
• Feature - описывает функционал, который будет тестироваться
• Scenario - конкретный сценарий использования функционала
• Given - описывает начальное состояние системы перед началом теста
• When - описывает действие, которое приводит к изменению состояния системы
• Then - описывает ожидаемый результат после выполнения действия
• And - используется для добавления дополнительных условий или результатов
• But - используется для описания исключений или нежелательных результатов
Для реализации BDD на Python часто используются фреймворки, такие как Behave или Pytest-BDD, которые позволяют связывать описанные на языке Gherkin сценарии с кодом на Python, выполняющим тестирование.
Пример на Python с использованием фреймворка Behave.
from behave import given, when, then
@given('Пользователь находится на главной странице')
def step_impl(context):
context.browser.visit(context.url)
@when('Он выбирает категорию "Электроника"')
def step_impl(context):
context.browser.click_link_by_text('Электроника')
@then('Отображается список продуктов категории "Электроника"')
def step_impl(context):
products = context.browser.find_by_css('.product-category-electronics')
assert len(products) > 0
@then('Каждый продукт имеет название, цену и кнопку "В корзину"')
def step_impl(context):
products = context.browser.find_by_css('.product-category-electronics')
for product in products:
assert product.find_by_css('.product-name')
assert product.find_by_css('.product-price')
assert product.find_by_css('.add-to-cart-button')
@then('Продукты других категорий не отображаются')
def step_impl(context):
other_products = context.browser.find_by_css('.product:not(.product-category-electronics)')
assert len(other_products) == 0