Obsah

Cucumber

Cucumber je open-source nástroj pro behavior-driven development (BDD), který umožňuje psát testy v přirozeném jazyce (např. češtině nebo angličtině), srozumitelném nejen vývojářům, ale i testerům, produktovým manažerům nebo zákazníkům. Cucumber slouží k popisu chování systému prostřednictvím uživatelských scénářů a automaticky tyto scénáře spouští jako funkční (akcepční) testy.

Cucumber původně vznikl pro jazyk Ruby, dnes však existují oficiální i komunitní implementace pro řadu jazyků, včetně Java, JavaScript, Python, C# a dalších.

Princip BDD a Gherkin

Cucumber vychází z metodiky BDD (Behavior-Driven Development), která rozšiřuje TDD (Test-Driven Development) o spolupráci mezi technickými a netechnickými členy týmu. Chování aplikace je popsáno pomocí doménového jazyka (Domain-Specific Language, DSL), který v Cucumberu nese název Gherkin.

Gherkin – jazyk pro popis scénářů

Gherkin je formální, jednoduchý a čitelný jazyk, který používá klíčová slova jako:

Gherkin podporuje lokalizaci – kromě anglických klíčových slov lze použít i česká (např. Požadavek, Scénář, Za předpokladu, Když, Pak), ale anglická varianta je nejrozšířenější kvůli nástrojové podpoře.

Příklad .feature souboru

Soubor: `prihlaseni.feature`

# language: cs
Požadavek: Přihlášení uživatele do systému
 
  Aby mohl uživatel přistupovat ke svým datům,
  musí se nejprve přihlásit pomocí platných přihlašovacích údajů.
 
  Scénář: Úspěšné přihlášení s platnými údaji
    Základní předpoklad, že uživatel "jan" existuje s heslem "tajne_heslo"
    Když uživatel zadá přihlašovací jméno "jan" a heslo "tajne_heslo"
    Pak by měl být přihlášen a přesměrován na úvodní stránku
 
  Scénář: Neúspěšné přihlášení – špatné heslo
    Základní předpoklad, že uživatel "jan" existuje s heslem "tajne_heslo"
    Když uživatel zadá přihlašovací jméno "jan" a heslo "špatné"
    Pak by se měla zobrazit chybová zpráva "Neplatné přihlašovací údaje"
💡 Poznámka: I když je podpora češtiny technicky možná, v praxi se důrazně doporučuje používat anglický Gherkin, protože:
- většina IDE a nástrojů lépe podporuje angličtinu,
- testovací kroky (step definitions) jsou často psány v angličtině,
- zajišťuje lepší kompatibilitu v mezinárodních týmech.

Jak Cucumber funguje?

1. Popis chování – tým vytvoří `.feature` soubor v Gherkinu. 2. Implementace kroků – vývojář napíše tzv. step definitions, což jsou funkce (v Java, JS, atd.), které mapují jednotlivé řádky Gherkinu na skutečný kód (např. ovládání webového prohlížeče přes Selenium). 3. Spuštění testu – Cucumber spustí scénáře a pro každý krok zavolá odpovídající step definition. 4. Výstup – Cucumber vygeneruje report (textový, HTML, atd.), který ukazuje, které scénáře prošly a které selhaly.

Příklad step definition v Java (s JUnit)

@Given("základní předpoklad, že uživatel {string} existuje s heslem {string}")
public void uzivatelExistuje(String jmeno, String heslo) {
    databaze.vytvorUzivatele(jmeno, heslo);
}
 
@When("uživatel zadá přihlašovací jméno {string} a heslo {string}")
public void uzivatelZadaUdaje(String jmeno, String heslo) {
    stranka.prihlaseni.zadejUdaje(jmeno, heslo);
    stranka.prihlaseni.odesli();
}
 
@Then("by se měla zobrazit chybová zpráva {string}")
public void zkontrolujChybu(String zprava) {
    assertTrue(stranka.obsahujeText(zprava));
}

Podpora jazyků a frameworků

Jazyk Knihovna / Plugin Poznámka
————-—————————————-———-
Java `io.cucumber:cucumber-java` Nejrozšířenější verze, často s JUnit/TestNG
JavaScript `@cucumber/cucumber` (dříve Cucumber.js) Pro Node.js, podpora pro Playwright, Cypress
Python `behave` (alternativa), `pytest-bdd` Oficiální Cucumber pro Python není aktivně vyvíjen
C# `SpecFlow` Oficiální Cucumber pro .NET
Ruby `cucumber` gem Původní implementace

Výhody použití Cucumberu

Nevýhody a rizika

Doporučené postupy (Best Practices)

Nástroje a ekosystém

Související pojmy

Externí odkazy

Viz také