Gherkin is een schrijfwijze om testcases uit te schrijven voornamelijk voor [[Behaviour-Driven Development]]. Het is een manier om gestructureerd en leesbaar de werkwijze van een systeem uit te schrijven wat begrijpelijk is voor zowel stakeholders als developers. In dit document wil ik dieper ingaan om de syntax en het uitschrijven van testcases. Het inzetten van test automatisering bespreek ik [[#Test Automatisering|hier]] kort. # Keywords Gherkin bestaat uit een aantal keywords die structuur geven aan de schrijfwijze van een scenario in gesproken, leesbare, taal. Gherkin ondersteund [70 andere talen](https://cucumber.io/docs/gherkin/languages) | Keyword | Nederlands | | ------------------ | ----------------------- | | `Feature` | `Functionaliteit` | | `Background` | `Achtergrond` | | `Rule` | `Regel` | | `Scenario` | `Voorbeeld`, `Scenario` | | `Scenario Outline` | `Abstract Scenario` | | `Examples` | `Voorbeelden` | | `Given` | `*`, `Gegeven`, `Stel` | | `When` | `*`, `Als`, `Wanneer` | | `Then` | `*`, `Dan` | | `And` | `*`, `En` | | `But` | `*`, `Maar` | | | | Er zijn nog een aantal aanvullende opties: - `"""` > Doc Strings - `|` > Data Tables - `@` > Tags - `#` > Comments ## Feature / Functionaliteit Het **Feature** is een hoogover beschrijvende titel en word alleen gebruikt voor documentatie doeleinden. Onder de titel kan je een beschrijving noteren. Bij de toepassing van [[#Test Automatisering]] doet dit functioneel niks. ```gherkin Feature: Guess the word The word guess game is a turn-based game for two players. The Maker makes a word for the Breaker to guess. The game is over when the Breaker guesses the Maker's word. Scenario: Maker starts a game ``` ## Background / Achtergrond ## Scenario Een feature bevat een 1 of meer scenario’s die elk een unieke titel hebben. Een scenario is een concreet voorbeeld van een [[#Feature / Functionaliteit]] of [[#Rule / Regel]] ### Scenario Outline Datadriven.. ## Scenario Stappen - Beschrijf de uitgangssituatie met een `Gegeven` - Beschrijf een actie met `Als` of `Wanneer` - Beschrijf de verwachte uitkomst met `Dan` Je kan stappen verder uitwerken met `en` en `maar` ### Gegeven - [ ] uitwerken ### Als - [ ] uitwerken ### Wanneer Iets dat 'uit' het systeem komt zoals een popup, een bericht, een rapport en niet gedrag dat ergens diep in het systeem gebeurd zoals het schrijven van een record in een database. Dit ligt natuurlijk wel aan het systeem en functionaliteit wat je test. ## Rule / Regel Dit komt voort uit [[Behaviour-Driven Development|BDD]], hier kan je businessrules in noteren. Een regel moet onderbouwd worden met 1 of meerdere scenario's ```gherkin # language: en Feature: Highlander Rule: There can be only One Example: Only One -- More than one alive Given there are 3 ninjas And there are more than one ninja alive When 2 ninjas meet, they will fight Then one ninja dies (but not me) And there is one ninja less alive ``` # Testgevallen schrijven met Gherkin - [ ] Verder uitwerken: - de feature/scenario moetduidelijk maken **wat** het systeem moet doen zonder zich bezig te houden met **hoe** het technisch wordt geïmplementeerd. - Stakeholders kunnen de uitgewerkte scenario’s nalezen en beoordelen zonder technische kennis. - Scenario’s kunnen fungeren als **acceptatiecriteria** die ontwikkelaars kunnen gebruiken om functionaliteit correct te implementeren. Dit kan gedaan worden wanneer er gewerkt word volgens het [[BDD]] principe. In theorie zie ik dat we achteraf scenario's schrijven. - De scenario's kunnen makkelijk vertaald worden naar test automatisering. Hier kan je al rekening mee houden als je de scenario's uitwerkt. - You can have as many steps as you like, but we recommend 3-5 steps per example. Having too many steps will cause the example to lose its expressive power as a specification and documentation. - **IMAGINE IT’S 1922** ```gherkin # language: en Feature: Background: Scenario: Given When Then Examples: | 1 | 2 | | a | b | ``` ```gherkin # language: nl Functionaliteit: Achtergrond: Scenario: Gegeven Als Dan Voorbeelden: | 1 | 2 | | a | b | ``` ## Datadriven # Sidenotes - Als lijkt door systemen beter ondersteund dan Wanneer. # Test Automatisering De meest bekende tool die gebruik maakt van Gherkin is [[Cucumber]] maar ook [[Robot Framework - Test cases schrijven in Gherkin|Robot Framework]] ondersteund de gherkin syntax tot op zekere hoogte. Een **feature file** bevat een beschrijving van de functionaliteit en één of meerdere **scenario’s**. Een scenario beschrijft een testsituatie met **Given-When-Then-stappen** in Gherkin. In [[Cucumber]] worden **step definitions** gebruikt om de stappen in een scenario aan code te koppelen. # Andere dingen - Squash Test management tool ondersteund Gherkin schrijfwijze - Obsidian ondersteund Gherkin schrijfwijze. Dat is fijn om testen voor te bereiden. # Bronnen [Gherkin \| Cucumber](https://cucumber.io/docs/gherkin/) [Cucumber](https://cucumber.io/docs/bdd/) [What is Gherkin? \| BrowserStack](https://www.browserstack.com/guide/what-is-gherkin)