Какой у вас опыт работы с языком Gherkin и BDD?

«Какой у вас опыт работы с языком Gherkin и BDD?» — вопрос из категории Автоматизация тестирования, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, есть опыт использования Gherkin для написания сценариев в рамках Behavior-Driven Development (BDD). Работал с фреймворками Cucumber (Java/JavaScript), SpecFlow (.NET) и Behave (Python).

Суть подхода: Gherkin позволяет описывать поведение системы на понятном бизнесу языке (структура Given-When-Then), что служит "живой" документацией и основой для автоматизации.

Пример фича-файла (login.feature):

Feature: User Authentication
  As a registered user
  I want to log in to the system
  So that I can access my personal account

  Scenario: Successful login with valid credentials
    Given the user is on the login page
    When the user enters "testuser@example.com" into the email field
    And the user enters "SecurePass123" into the password field
    And the user clicks the "Sign In" button
    Then the user should be redirected to the dashboard
    And the welcome message "Hello, Test User" should be displayed

  Scenario Outline: Login with invalid credentials
    Given the user is on the login page
    When the user enters "<email>" and "<password>"
    And the user clicks the "Sign In" button
    Then an error message "Invalid login credentials" should appear

    Examples:
      | email               | password     |
      | wrong@example.com    | ValidPass123 |
      | testuser@example.com | wrongpass    |
      | <empty>              | ValidPass123 |

Реализация шагов (Step Definitions на JavaScript):

import { Given, When, Then } from '@cucumber/cucumber';
import { expect } from 'chai';

Given('the user is on the login page', async function () {
    await this.page.goto('https://app.example.com/login');
});

When('the user enters {string} into the email field', async function (email) {
    await this.page.fill('#email', email);
});
// ... остальные шаги

Преимущества:

  • Единый язык: Улучшает коммуникацию между разработчиками, тестировщиками и бизнес-аналитиками.
  • Документация: .feature файлы всегда актуальны, так как привязаны к коду.
  • Структура: Четкий формат сценариев упрощает понимание и покрытие.

Сложности:

  • Поддержка: Требует дисциплины для синхронизации сценариев, шагов и кода.
  • Избыточность: Не всегда оправдан для простых unit-тестов или низкоуровневых проверок.