Gherkin / Given When Then

1. Co je Gherkin?

Gherkin je jednoduchý, čitelný jazyk používaný pro popis chování systému. Nejčastěji se používá v přístupu BDD (Behavior Driven Development), kde spolupracuje business analytik, vývojář i QA nad stejnou specifikací.

Hlavní výhody Gherkinu:

  • Čitelný pro business i technické role
  • Slouží jako dokumentace i automatizovaný test
  • Sjednocuje komunikaci mezi týmy
  • Podporuje BDD přístup

Často používané frameworky:

  • Cucumber
  • SpecFlow
  • Behave
  • JBehave
  • Robot Framework

2. Základní syntaxe

Feature

Popisuje hlavní funkcionalitu nebo business capability.

Feature: Wallet payment processing

Doporučení:

  • Název má být stručný a business-oriented
  • Feature by měla řešit jednu oblast systému
  • Je vhodné doplnit business kontext
Feature: Wallet payment processing

  In order to pay using wallet balance
  As a registered customer
  I want to complete wallet transactions securely

Scenario

Konkrétní use case nebo situace.

Scenario: Successful wallet payment
  • Každý scénář by měl testovat jednu věc
  • Scénáře mají být nezávislé
  • Mají být srozumitelné i bez znalosti implementace

Given / When / Then

Klíčové slovo Význam
Given Výchozí stav systému nebo předpoklad
When Akce uživatele nebo systému
Then Očekávaný výsledek
And Rozšíření předchozího kroku
But Výjimka nebo negativní podmínka

3. Typický scénář

Scenario: User completes payment successfully
  Given the user has sufficient wallet balance
  And the wallet service is available
  When the user submits a payment request
  Then the payment is processed successfully
  And the wallet balance is reduced
  And a transaction record is created

Tento scénář obsahuje:

  • Výchozí stav systému
  • Business akci
  • Očekávaný výsledek
  • Vedlejší efekty systému

4. Dobrá praxe

Dobrý Gherkin scénář:

  • Popisuje chování systému, ne implementaci
  • Je čitelný pro business i technické role
  • Je jednoznačný a testovatelný
  • Neobsahuje zbytečné UI detaily
  • Má jasný expected outcome

Dobrá ukázka

Scenario: User sees pending status when provider confirmation is delayed
  Given the user has submitted a wallet payment
  And the payment provider has not confirmed the payment yet
  When the user opens the transaction detail
  Then the payment status is displayed as Pending
  And the user is informed that confirmation may take several minutes

Proč je scénář dobrý:

  • Popisuje business behavior
  • Neřeší technickou implementaci
  • Obsahuje jasný expected result
  • Je srozumitelný bez znalosti UI

Slabá ukázka

Scenario: Click buttons
  Given I click the menu
  When I click the payment button
  Then I click status

Proč je scénář špatný:

  • Není jasné, co se testuje
  • Obsahuje pouze klikání v UI
  • Neověřuje business výsledek
  • Je křehký při změně UI

5. Anti-patterny

Příliš technický scénář

Scenario: API returns 200
  Given endpoint /api/v1/payment exists
  When POST request is sent with JSON payload
  Then response code is 200

Problémy:

  • Řeší implementaci místo business chování
  • Není čitelný pro business

Příliš dlouhý scénář

Pokud scénář obsahuje 15–20 kroků, většinou testuje příliš mnoho věcí najednou.

Doporučení:

  • Rozdělit na menší scénáře
  • Každý scénář by měl mít jeden hlavní cíl

6. Scenario Outline

Slouží pro parametrizované scénáře se stejnou logikou a různými daty.

Scenario Outline: User login validation
  Given the user enters username "<username>"
  And the user enters password "<password>"
  When the user submits login
  Then the login result should be "<result>"

Examples:
  | username | password | result  |
  | admin    | admin123 | success |
  | admin    | wrong    | failed  |
  | user     | pass123  | success |

Výhody:

  • Méně duplicitního textu
  • Lepší maintenance
  • Větší pokrytí datových kombinací

7. Background

Background obsahuje kroky společné pro více scénářů.

Feature: Wallet payments

Background:
  Given the user is logged in
  And the wallet service is available

Scenario: Successful payment
  When the user submits payment
  Then the payment is successful

Scenario: Failed payment
  When the user submits payment with insufficient balance
  Then the payment is rejected

Doporučení:

  • Background má obsahovat jen opravdu společné kroky
  • Příliš dlouhý Background zhoršuje čitelnost

8. Tagy

Tagy slouží k organizaci a filtrování scénářů.

@smoke
@regression
@payments

Scenario: Successful wallet payment
  Given ...
  When ...
  Then ...

Časté tagy:

  • @smoke — základní kritické testy
  • @regression — regresní testy
  • @integration — integrační testy
  • @slow — pomalé scénáře
  • @wip — work in progress

9. Doporučení pro psaní scénářů

  • Používej business jazyk
  • Vyhýbej se UI detailům
  • Scénáře piš krátké a přehledné
  • Každý scénář by měl mít jeden účel
  • Then kroky musí být ověřitelné
  • Používej konzistentní terminologii
  • Nepiš zbytečné kroky typu „kliknu na tlačítko“

10. Rozdíl mezi BDD a klasickými testy

BDD / Gherkin Klasický test case
Business-oriented Technicky orientovaný
Čitelný pro všechny role Často jen pro QA
Popisuje chování Popisuje kroky
Vhodný pro automatizaci Často manuální

11. Pokročilé doporučení

Testuj business hodnotu

„Jaké chování systému je důležité pro uživatele nebo business?“

Vyhýbej se křehkým scénářům

Scénáře založené na konkrétních UI detailech se často rozbijí při redesignu aplikace.

Používej doménový jazyk

Raději:

Then the transaction status is displayed as Completed

Než:

Then transaction status = 2

12. Shrnutí

Gherkin je silný nástroj pro propojení business požadavků, QA a automatizace testů.

Dobře napsaný scénář:

  • Popisuje business behavior
  • Je čitelný a jednoznačný
  • Neřeší implementační detaily
  • Může sloužit jako dokumentace i automatizovaný test
„Popisuj co systém dělá, ne jak je implementovaný.“