Definicja #
Gherkin to język domeny specyficznej (DSL) do opisywania zachowania systemu w sposób zrozumiały dla wszystkich uczestników projektu — programistów, testerów, analityków biznesowych i product ownerów. Scenariusze Gherkin są bezpośrednio uruchamiane przez narzędzia BDD takie jak Cucumber, SpecFlow czy Behave.
Kluczowe słowa kluczowe Gherkin:
- Feature — opis funkcjonalności; nagłówek pliku .feature
- Scenario — pojedynczy przypadek testowy opisujący konkretne zachowanie
- Given (Zakładając) — kontekst wyjściowy; stan systemu przed akcją
- When (Gdy) — akcja użytkownika lub zdarzenie wyzwalające
- Then (Wtedy) — oczekiwany wynik; asercja
- And / But — kontynuacja poprzedniego kroku (Given/When/Then)
- Background — wspólny kontekst dla wszystkich scenariuszy w Feature
- Scenario Outline + Examples — parametryzacja scenariusza tabelą danych
- @Tag — tagowanie scenariuszy do selektywnego uruchamiania
Przykład scenariusza:
Feature: Koszyk zakupowy
Background:
Given użytkownik jest zalogowany
Scenario: Dodanie produktu do koszyka
Given produkt "Laptop" jest dostępny w magazynie
When użytkownik dodaje "Laptop" do koszyka
Then koszyk zawiera 1 produkt
And suma koszyka wynosi 2999 PLN
Scenario Outline: Różne ilości produktów
When użytkownik dodaje <ilość> sztuk produktu
Then koszyk zawiera <ilość> produktów
Examples:
| ilość |
| 1 |
| 3 |
| 10 |Gherkin jest językiem naturalnym z ograniczoną strukturą — może być pisany po polsku (Given/When/Then tłumaczone na Zakładając/Gdy/Wtedy) lub angielsku w zależności od konfiguracji projektu.
Zastosowania #
- Testy akceptacyjne pisane przez Product Ownerów i BA — scenariusze Gherkin jako żywa specyfikacja zrozumiała dla osób nie-technicznych
- Automatyzacja testów E2E — pliki .feature powiązane ze step definitions sterującymi Selenium, Playwright lub REST API
- Living documentation — feature files jako aktualna dokumentacja systemu weryfikowana przez CI/CD
- Komunikacja wymagań — Gherkin jako format dla User Stories z konkretnymi przykładami zachowania (Specification by Example)
- Testy regresji — zestaw scenariuszy Gherkin uruchamianych przy każdym wdrożeniu
Ścieżka nauki #
Gherkin jest prostym językiem — nauka składni zajmuje godziny; wyzwaniem jest pisanie dobrych, utrzymywalnych scenariuszy.
Zacznij od:
- Podstawy składni: Feature, Scenario, Given/When/Then, And, But
- Background i współdzielony kontekst — kiedy używać Background vs duplikowania kroków
- Scenario Outline z tabelą Examples — parametryzacja testów
- Tagowanie scenariuszy:
@smoke,@regression,@wip— uruchamianie wybranych tagów
Następnie w kontekście narzędzia:
- Cucumber-JVM (Java) — step definitions z
@Given,@When,@Then; JUnit Runner - Cucumber.js (JavaScript/TypeScript) — step definitions jako funkcje; integracja z Playwright
- SpecFlow (.NET/C#) — odpowiednik Cucumber dla środowiska Microsoft
- Behave (Python) — implementacja Gherkin dla ekosystemu Python
- Zasady dobrego Gherkin: pisz scenariusze z perspektywy zachowania (nie implementacji), unikaj szczegółów technicznych w krokach, jeden scenariusz = jedno zachowanie
FAQ #
- Czym jest Gherkin i jak go używać?
- Gherkin to język składni Given-When-Then do opisywania zachowania systemu w plikach .feature. Pliki te są parsowane przez narzędzia BDD (Cucumber, SpecFlow) i każde zdanie jest mapowane na step definition — funkcję testową w Javie, C#, JS lub innym języku. Gherkin pozwala pisać testy zrozumiałe dla całego zespołu, łącznie z osobami nie-technicznymi.
- Czym różni się Gherkin od Cucumber?
- Gherkin to język (format tekstowy scenariuszy Given-When-Then). Cucumber to narzędzie BDD, które parsuje pliki Gherkin i uruchamia step definitions powiązane z krokami scenariuszy. Gherkin bez Cucumber'a jest tylko tekstem; Cucumber bez Gherkin nie ma sensu — są ze sobą ściśle powiązane.
- Czy Gherkin można pisać po polsku?
- Tak — Gherkin obsługuje wiele języków, w tym polski. Słowa kluczowe po polsku: 'Funkcja' (Feature), 'Scenariusz' (Scenario), 'Zakładając' lub 'Mając' (Given), 'Jeżeli' lub 'Gdy' (When), 'Wtedy' (Then). Konfiguruje się to przez język pliku: # language: pl. W praktyce większość projektów używa angielskich słów kluczowych dla spójności.
- Czym jest SpecFlow w .NET?
- SpecFlow to implementacja BDD/Gherkin dla platformy .NET/C#. Używa tej samej składni plików .feature co Cucumber, ale step definitions pisze się w C# z atrybutami [Given], [When], [Then] i integruje z NUnit, xUnit lub MSTest. Jest najpopularniejszym narzędziem BDD w ekosystemie .NET.