====== Gherkin ====== **Gherkin** je doménově specifický jazyk (DSL – Domain-Specific Language) určený k popisu **chování softwarového systému** v rámci metodiky **Behavior-Driven Development** (**BDD**). Gherkin je čitelný jak pro lidi, tak pro stroje – umožňuje psát testovací scénáře v **přirozeném jazyce**, které lze následně automaticky spustit jako funkční testy (např. pomocí nástroje [[Cucumber]]). Cílem Gherkinu je vytvořit **„živou dokumentaci“**, která je vždy aktuální, protože je součástí testovací sady. ===== Struktura dokumentu Gherkin ===== Gherkinové soubory mají příponu **.feature** a obsahují popis jedné funkcionality systému. Každý soubor se skládá z: * **Popisku funkce** (Feature), * **Jednoho nebo více scénářů** (Scenario), * **Kroků** (Steps), které popisují předpoklady, akce a očekávané výsledky. ===== Klíčová slova (anglická – doporučená) ===== | Klíčové slovo | Účel | Česká alternativa (lokální) | | **Feature** | Nadpis a popis celé funkce | **Požadavek**, **Funkce** | | **Scenario** | Konkrétní testovací případ | **Scénář** | | **Given** | Počáteční stav (předpoklady) | **Za předpokladu**, **Mám** | | **When** | Uživatelská akce nebo událost | **Když** | | **Then** | Očekávaný výsledek | **Pak** | | **And / But** | Připojení dalšího kroku stejného typu | **A**, **Ale** | > 💡 **Doporučení**: I když Gherkin podporuje lokalizaci (včetně češtiny), **v praxi se důrazně doporučuje používat anglická klíčová slova**, protože: > - většina nástrojů (Cucumber, IDE pluginy) lépe podporuje angličtinu, > - zajišťuje lepší kompatibilitu v mezinárodních týmech, > - step definitions (implementace kroků) jsou téměř vždy v angličtině. ===== Příklad Gherkin souboru (anglicky) ===== Feature: User login As a registered user I want to log in to the system So that I can access my personal dashboard Scenario: Successful login with valid credentials Given the user "alice" exists with password "secret123" When I enter "alice" and "secret123" into the login form And I click the "Login" button Then I should be redirected to the dashboard And I should see a welcome message "Welcome, alice!" Scenario: Login fails with invalid password Given the user "alice" exists with password "secret123" When I enter "alice" and "wrongpass" into the login form And I click the "Login" button Then I should see an error message "Invalid username or password" ===== Parametry a tabulky ===== Gherkin umožňuje znovupoužití kroků pomocí **parametrů** a **datových tabulek**. ==== Parametry ve složených závorkách ==== Kroky mohou obsahovat proměnné – např. `"alice"` nebo `"secret123"` – které jsou předány do implementace kroku jako argumenty. ==== Datové tabulky (Data Tables) ==== Pro testování více vstupů ve stejném scénáři lze použít tabulky: Scenario: Login with various invalid inputs Given I am on the login page When I try to log in with the following credentials: | username | password | | alice | wrong123 | | bob | incorrect | | | secret123 | Then I should see the error message "Invalid username or password" for each attempt ==== Scénářové osnovy (Scenario Outline) + Příklady (Examples) ==== Pro spuštění stejného scénáře s různými vstupy se používá **Scenario Outline**: Scenario Outline: Login with different valid users Given the user "" exists with password "" When I log in as "" with password "" Then I should be on the dashboard Examples: | username | password | | alice | secret123 | | bob | mypass456 | | eve | qwerty789 | Tento scénář se spustí **třikrát** – jednou pro každý řádek v sekci **Examples**. ===== Pravidla psaní dobrých Gherkin scénářů ===== * **Zaměř se na „co“, ne „jak“** – popisuj cíl uživatele, ne technické detaily (např. „Když přidám zboží do košíku“, ne „Když kliknu na tlačítko s ID #add-cart“). * **Každý scénář by měl mít jeden jasný cíl** – testuj jednu věc. * **Vyhněte se podmínkám** (`if`, `unless`) – raději vytvořte samostatné scénáře pro každý případ. * **Používej přirozený jazyk** – scénář by měl být srozumitelný i pro nevývojáře. * **Nepřetěžuj Gherkin technickými detaily** – ty patří do implementace kroků, nikoli do `.feature` souboru. ===== Lokalizace Gherkinu ===== Gherkin podporuje více než 70 jazyků. Pro použití češtiny stačí na začátek souboru přidat: # language: cs Požadavek: Přihlášení uživatele Scénář: Úspěšné přihlášení Za předpokladu, že uživatel "jan" existuje Když zadám "jan" a "heslo" Pak bych měl být přihlášen Seznam podporovaných jazyků a klíčových slov je k dispozici na: https://cucumber.io/docs/gherkin/languages/ ===== Integrace s nástroji ===== Gherkin je primárně používán s: * **Cucumber** (pro Ruby, Java, JavaScript, C#), * **SpecFlow** (.NET), * **Behave** nebo **pytest-bdd** (Python), * **Godog** (Go). Tyto nástroje mapují jednotlivé řádky Gherkinu na **step definitions** – funkce v programovacím jazyce, které skutečně provádějí test (např. ovládají prohlížeč přes Selenium). ===== Související pojmy ===== * [[Cucumber]] * [[BDD]] * [[Testování softwaru]] * [[Akcepční testování]] * [[Živá dokumentace]] ===== Externí odkazy ===== * Oficiální dokumentace Gherkin: https://cucumber.io/docs/gherkin/ * Seznam jazyků a klíčových slov: https://cucumber.io/docs/gherkin/languages/ * Gherkin reference (formální syntax): https://cucumber.io/docs/gherkin/reference/ ===== Viz také ===== * [[Testovací scénář]] * [[Behavior-Driven Development]] * [[Step definition]] * [[Scenario Outline]]