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

Написать Cucumber сценарий

2.2 Middle🔥 141 комментариев
#Теория тестирования

Условие

Напишите Cucumber сценарий (feature file) для тестирования функциональности входа в систему с использованием Gherkin синтаксиса.

Требования

  • Сценарий должен покрывать успешный вход
  • Сценарий должен покрывать неуспешный вход
  • Использовать Scenario Outline для разных комбинаций данных

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

🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)

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

Решение: Cucumber сценарий для тестирования входа в систему

Cucumber использует Gherkin синтаксис для написания тестов на человеческом языке. Это позволяет тестировать функциональность в формате, понятном как разработчикам, так и business stakeholders.

Основной Cucumber feature file

# language: ru
Функция: Вход в систему
  Как пользователь
  Я хочу входить в систему
  Чтобы получить доступ к моей учётной записи

  Предыстория:
    Дано я открыл страницу входа
    И я нахожусь на домашней странице

  Сценарий: Успешный вход с корректными учётными данными
    Дано я ввожу email user@example.com
    И я ввожу пароль Password123
    Когда я нажимаю кнопку Вход
    То я должен увидеть сообщение об успешном входе
    И я должен быть перенаправлен на страницу профиля
    И я должен видеть мою фамилию Иванов в заголовке

  Сценарий: Неуспешный вход с неправильным паролем
    Дано я ввожу email user@example.com
    И я ввожу пароль WrongPassword
    Когда я нажимаю кнопку Вход
    То я должен увидеть ошибку Неверный пароль
    И я должен остаться на странице входа

  Сценарий: Неуспешный вход с несуществующим пользователем
    Дано я ввожу email nonexistent@example.com
    И я ввожу пароль AnyPassword123
    Когда я нажимаю кнопку Вход
    То я должен увидеть ошибку Пользователь не найден
    И я должен остаться на странице входа

  Сценарий: Неуспешный вход с пустым полем email
    Дано я оставляю поле email пустым
    И я ввожу пароль Password123
    Когда я нажимаю кнопку Вход
    То я должен увидеть ошибку валидации Email обязателен
    И кнопка Вход должна быть неактивной

Scenario Outline для параметризации

# language: ru
Функция: Валидация формы входа
  Как пользователь
  Я хочу, чтобы форма входа валидировала мои данные
  Чтобы предотвратить ошибки ввода

  Структура сценария: Вход с различными комбинациями данных
    Дано я ввожу email <email>
    И я ввожу пароль <password>
    Когда я нажимаю кнопку Вход
    То результат должен быть <result>
    И я должен видеть сообщение <message>

    Примеры:
      | email                | password       | result      | message                        |
      | user@example.com     | Password123    | success     | Вход выполнен успешно          |
      | user@example.com     | WrongPassword  | failure     | Неверный пароль               |
      | nonexistent@test.com | Password123    | failure     | Пользователь не найден        |
      | invalid.email        | Password123    | failure     | Некорректный формат email      |
      | пусто                | Password123    | failure     | Email обязателен              |
      | user@example.com     | пусто          | failure     | Пароль обязателен             |
      | user+tag@example.com | Password123    | success     | Вход выполнен успешно          |
      | USER@EXAMPLE.COM     | Password123    | success     | Вход выполнен успешно          |

Расширенный Scenario Outline

# language: ru
Функция: Различные сценарии входа

  Структура сценария: Проверка входа для разных типов пользователей
    Дано у пользователя <username> есть учётная запись
    И пользователь имеет роль <role>
    Когда пользователь входит с email <email> и паролем <password>
    То статус входа должен быть <status>
    И пользователь должен видеть <dashboard>

    Примеры:
      | username     | role        | email              | password       | status  | dashboard       |
      | Иван Петров  | admin       | ivan@company.com   | AdminPass123   | success | Admin Dashboard |
      | Мария Сидор  | user        | maria@company.com  | UserPass123    | success | User Dashboard  |
      | Петр Иванов  | moderator   | petr@company.com   | ModPass123     | success | Moderator Panel |
      | Анна Смирнов | user        | anna@company.com   | WrongPassword  | failure | Login Page      |

Структура проекта

project/
features/
├── login.feature
├── step_definitions/
│   └── login_steps.py
└── support/
    └── hooks.py

Реализация шагов на Python

from behave import given, when, then
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

@given('я открыл страницу входа')
def step_open_login_page(context):
    context.driver = webdriver.Chrome()
    context.driver.get('https://example.com/login')

@given('я ввожу email {email}')
def step_enter_email(context, email):
    email_field = context.driver.find_element(By.ID, 'email')
    email_field.clear()
    email_field.send_keys(email)

@given('я ввожу пароль {password}')
def step_enter_password(context, password):
    password_field = context.driver.find_element(By.ID, 'password')
    password_field.clear()
    password_field.send_keys(password)

@when('я нажимаю кнопку {button_name}')
def step_click_button(context, button_name):
    button = context.driver.find_element(By.XPATH, f'//button')
    button.click()

@then('я должен увидеть сообщение об успешном входе')
def step_check_success(context):
    wait = WebDriverWait(context.driver, 10)
    element = wait.until(EC.presence_of_element_located((By.CLASS_NAME, 'success')))
    assert element.is_displayed()

@then('я должен быть перенаправлен на страницу профиля')
def step_check_redirect(context):
    wait = WebDriverWait(context.driver, 10)
    wait.until(EC.url_contains('/profile'))
    assert '/profile' in context.driver.current_url

Best Practices для Cucumber

1. Структура сценариев:

  • Given (Дано) — подготовка предусловий
  • When (Когда) — действие пользователя
  • Then (То) — проверка результата

2. Использование Scenario Outline:

  • Параметризация для разных комбинаций данных
  • Уменьшение дублирования кода
  • Лучшая читаемость отчётов

3. Именование:

  • Использовать понятный бизнес-язык
  • Избегать технических деталей
  • Согласовывать терминологию с product team

4. Организация:

  • Логически группировать сценарии
  • Использовать Background для общих шагов
  • Один feature file — одна функциональность

Запуск тестов

behave features/
behave features/login.feature
behave --tags @smoke

Это решение демонстрирует профессиональный подход к BDD тестированию, позволяя легко читать и поддерживать автотесты.

Написать Cucumber сценарий | PrepBro