Uitleg van de Gherkin Syntax

Binnen een Behaviour Driven Development (BDD) story vormen de scenario’s een belangrijk onderdeel. Elk scenario beschrijft een(1) enkel gedrag van een functie. Ze dienen als requirement en testcase. In dit artikel wordt kort ingegaan hoe de scenario’s in de Gherkin feature files beschreven moeten worden.

Introductie van Gherkin

Gerkin SyntaxDe in een BDD story gebruikte Given-When-Then opzet is door Cucumber uitgewerkt naar de Gherkin taal. Gherkin kan gebruikt worden als basis voor het automatiseren van de testen. Cucumber is een van de bekendste BDD testautomatiserings frameworks. De meeste andere BDD frameworks gebruiken ook Gherkin, maar zijn niet altijd 100% compatibel met de Gherkin standaard van Cucumber.

De scenario’s worden met behulp van Gherkin uitgewerkt in .feature files. Deze files worden later door een BDD testautomatiserings tool uitgevoerd.

Voorbeeld .feature file

Feature: Webshop bezoeker ziet gerelateerde producten bij bekijken product
As a product manager
I want dat een bezoeker van de webshop gerelateerde producten te zien krijgt bij een product
So that de omzet per order met minimaal 5% verhoogd wordt

Scenario: Voorradige gerelateerde producten
Given het product “roerstaafjes” heeft 2 gerelateerde voorradige producten
When de webshop bezoeker het product “roerstaafjes” bekijkt
Then worden de 2 gerelateerde producten getoond

Binnen Gherkin moet iedere niet lege regel beginnen met een Gherkin keyword, gevolgd door een willekeurige tekst.

De belangrijkste keywords zijn:

  • Feature
  • Scenario
  • Given, When, Then, And, But (Steps / stappen)
  • Background
  • Scenario Outline
  • Examples

Feature

Het Feature deel heeft een titel en een omschrijving en wordt alleen gebruikt voor documentatie doeleinden. In de praktijk wordt hier vaak de beschrijving van de BDD story opgenomen. Een feature bevat een (1) of meerdere scenario’s die elk een unieke titel hebben.

Scenario

Een scenario heeft een titel en een omschrijving en net als bij het feature deel wordt dit alleen gebruikt voor documentatie doeleinden. Vaak wordt alleen een titel gebruikt. De omschrijving is onbeperkt qua lengte. De tekst tussen de titel en het eerste Gherkin keyword wordt gezien als omschrijving.

Elk scenario is in essentie een requirement en testcase. Het Given-When-Then-formaat geeft een bondig beeld van het te testen gedrag. Iedere Given-When-Then regel wordt een stap genoemd.

Binnen stappen moet de volgorde Given-When-Then worden aangehouden. Tijdens de testuitvoering worden deze stappen achter elkaar uitgevoerd.

Given-When-Then

Een Given stap wordt gebruikt om de uitgangssituatie of startsituatie te beschrijven. Tijdens de testuitvoering zorgt de Given stap er voor dat het systeem in de juiste startsituatie wordt gebracht. Denk hierbij bijvoorbeeld aan het toevoegen van data aan de testdatabase. De When stap beschrijft de acties die moeten worden uitgevoerd en de Then stap beschrijft de controles die, na het uitvoeren van de acties, moet worden gedaan.

De beschrijving die na de stap keyword komt geeft aan wat er moet gebeuren en wordt gekoppeld aan een “step definition” (een methode/functie die de code bevat om de acties uit de stap uit te voeren). Dit is bijvoorbeeld Java code die wordt vastgelegd in de testautomatiserings tool die wordt gebruikt.

And of But

Elke regel in een scenario wordt aangeduid als stap. Aan iedere Given-When-Then kunnen meerdere stappen worden toegevoegd door gebruik te maken van de keywords And en But .

Scenario: Voorradige gerelateerde producten
Given het product “roerstaafjes” heeft 2 gerelateerde voorradige producten
And een (1) van de gerelateerde producten zit al in winkelwagen
When de webshop bezoeker het product “roerstaafjes” bekijkt
Then wordt alleen het gerelateerde product getoond dat nog niet in winkelwagen zit

Background

Een background in een feature file maakt het mogelijk om een aantal stappen te definiëren die in elk scenario op dezelfde wijze moeten worden gebruikt. Het gebruik is beperkt tot Given en And. Het is dus bedoelt om een startsituatie die voor elk scenario hetzelfde is, maar een (1) keer te hoeven definiëren. Daarmee wordt de leesbaarheid en onderhoudbaarheid van de scenario’s verbetert.

Een background kan maar een (1) keer voor komen in een feature file en moet altijd voor het eerste scenario worden geplaatst.

Een background kan net als een feature en scenario’s een titel en omschrijving hebben. Het is echter niet verplicht om deze op te nemen bij een background.

Scenario Outline

Soms hebben verschillende scenario’s exact hetzelfde stappenpatroon en gebruiken ze alleen verschillende invoerwaarden of te verwachte resultaten.

In onderstaand voorbeeld worden de verzendkosten berekend afhankelijk van het totaal bedrag. De stappen in de scenario’s zijn hetzelfde met uitzondering van de bedragen.

Feature: Berekenen verzendkosten
As a product manager
I want dat een klant van de webshop geen verzendkosten betaald bij een bestelling boven de € 50,=
So that het aantal orders boven de € 50,= met minimaal 5% per jaar stijgt

Scenario: Klant bestelt voor minder dan € 50,=
Given het totaal bedrag van de producten in winkelwagentje is kleiner dan € 50,=
When de klant de bestelling plaatst en af wil rekenen
Then de verzendkosten zijn € 3,95

Scenario: Klant bestelt voor exact € 50,=
Given het totaal bedrag van de producten in winkelwagentje is exact € 50,=
When de klant de bestelling plaatst en af wil rekenen
Then de verzendkosten zijn € 3,95

Scenario: Klant bestelt voor meer dan € 50,=
Given het totaal bedrag van de producten in winkelwagentje is groter dan € 50,=
When de klant de bestelling plaatst en af wil rekenen
Then de verzendkosten zijn € 0,00

Een scenario outline kan gebruikt worden om de stappen een (1) keer te beschrijven en vervolgens met verschillende waardes (zowel voor input als voor de resultaten) te laten uitvoeren.

Feature: Berekenen verzendkosten
As a product manager
I want dat een klant van de webshop geen verzendkosten betaald bij een bestelling boven de € 50,=
So that het aantal orders boven de € 50,= met minimaal 5% per jaar stijgt

Scenario Outline: Klant bestelt voor X euro
Given het totaal bedrag van de producten in winkelwagentje is <Bedrag>
When de klant de bestelling plaatst en af wil rekenen
Then de verzendkosten zijn <Verzendkosten>

Examples:
| Bedrag | Verzendkosten |
| € 49,95 | € 3,95 |
| € 50,00 | € 3,95 |
| € 50,01 | € 0,00 |

Alle woorden tussen <> worden bij uitvoering vervangen door de bijbehorende waardes zoals opgenomen bij de Examples.

In een feature file kun je meerdere Scenario Outlines gebruiken met bijbehorende Examples.

Ook interessant?

Test first - X-driven development

Test first – Introductie tot X-driven development

TDD, BDD en ATDD zijn termen die regelmatig terugkomen in een Agile omgeving. Ze zijn de afgelopen jaren steeds populairder ...
Story opzet voor BDD

Story opzet voor Behaviour Driven Development (BDD)

Behaviour Driven Development (BDD) gaat er van uit dat een idee voor een functie eenvoudig en effectief kan worden omgezet ...
Behavior Driven Development

Behaviour Driven Development (BDD)

Regelmatig lees of hoor je dat IT-projecten falen, een langere doorlooptijd nodig hebben dan oorspronkelijk gepland en veel meer kosten ...
Tools voor Behaviour Driven Development (BDD)

Algemene introductie Tools voor BDD

Het primaire doel van BDD is om mensen te laten communiceren en de kloof te dichten tussen ‘technische’ en ‘business’ ...
Blijf op de hoogte van onze nieuwste ontwikkelingen, schrijf je hier in voor de nieuwsbrief!