← Назад к вопросам
Написать 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 тестированию, позволяя легко читать и поддерживать автотесты.