Inhaltsverzeichnis
Was ist Gherkin?
Gherkin ist die Sprache hinter BDD-Frameworks wie Cucumber oder SpecFlow. Sie ermöglicht es, Testszenarien in natürlicher Sprache zu formulieren, sodass Entwickler, Tester und Fachabteilungen sie gleichermaßen verstehen. Die Grundstruktur folgt dem Given-When-Then-Muster:
- Given (Gegeben): Ausgangszustand beschreiben
- When (Wenn): Aktion ausführen
- Then (Dann): Erwartetes Ergebnis prüfen
Gherkin-Szenarien werden in Feature Files (.feature) gespeichert und können direkt von BDD-Frameworks wie Cucumber ausgeführt werden.
Die Bausteine von Gherkin
Gherkin-Syntax ist simpel, aber effektiv. Hier sind die wichtigsten Schlüsselwörter:
Feature: Login-Funktionalität
Als registrierter Benutzer
möchte ich mich einloggen können
damit ich auf mein Dashboard zugreifen kann
Scenario: Erfolgreicher Login
Given der Benutzer ist auf der Login-Seite
When er den Benutzernamen "testuser" eingibt
And er das Passwort "sicher123" eingibt
And er auf "Anmelden" klickt
Then wird er zum Dashboard weitergeleitet
And sieht die Begrüßung "Willkommen, testuser"
Scenario: Fehlgeschlagener Login
Given der Benutzer ist auf der Login-Seite
When er den Benutzernamen "testuser" eingibt
And er ein falsches Passwort eingibt
And er auf "Anmelden" klickt
Then sieht er die Fehlermeldung "Ungültige Anmeldedaten"
Weitere Schlüsselwörter: Background (Voraussetzungen für alle Szenarien), Scenario Outline (parametrisierte Tests mit Examples-Tabelle), And/But (zusätzliche Schritte).
Gherkin in der Praxis
In der Theorie klingt Gherkin wunderbar, aber wie setzt man es konkret um? Hier zwei Beispiele mit den wichtigsten Frameworks.
Verwendung von Feature-Files in Java
Mit Cucumber für Java werden Feature Files über Step Definitions mit Code verbunden:
Feature: Warenkorb
Scenario: Produkt hinzufügen
Given der Online-Shop ist geöffnet
When der Benutzer "Laptop" in den Warenkorb legt
Then enthält der Warenkorb 1 Produkt
Die zugehörige Step Definition in Java:
// Step Definition (TypeScript/Cucumber.js Äquivalent)
import { Given, When, Then } from "@cucumber/cucumber";
Given("der Online-Shop ist geöffnet", async function () {
await this.page.goto("https://shop.example.com");
});
When("der Benutzer {string} in den Warenkorb legt", async function (product: string) {
await this.page.click(`[data-product="${product}"] .add-to-cart`);
});
Then("enthält der Warenkorb {int} Produkt", async function (count: number) {
const cartCount = await this.page.textContent(".cart-count");
expect(Number(cartCount)).toBe(count);
});
Gherkin mit Playwright
Für UI-Tests kann Playwright ebenfalls mit Gherkin genutzt werden, über das cucumber-js Paket:
# Installation
npm install @cucumber/cucumber playwright @types/node typescript
// playwright.steps.ts
import { Given, When, Then } from "@cucumber/cucumber";
import { chromium, Page } from "playwright";
let page: Page;
Given("der Benutzer ist auf der Login-Seite", async function () {
const browser = await chromium.launch();
page = await browser.newPage();
await page.goto("https://app.example.com/login");
});
When("er den Benutzernamen {string} eingibt", async function (username: string) {
await page.fill("#username", username);
});
Then("wird er zum Dashboard weitergeleitet", async function () {
await page.waitForURL("**/dashboard");
});
Best Practices für Gherkin-Tests
Damit Gherkin-Tests tatsächlich die Entwicklung erleichtern und nicht verkomplizieren, sind einige Best Practices zu beachten:
- Klar und präzise formulieren
Ein Given-When-Then-Szenario sollte so verständlich sein, dass es auch ein Fachfremder nachvollziehen kann. Vermeide technische Details in den Szenarien. - Atomic Scenarios schreiben
Jedes Szenario sollte genau einen Ablauf testen. Wenn ein Test zu viele Steps enthält, könnte er in mehrere kleinere Tests aufgeteilt werden. - Step Definitions wiederverwenden
Gute Gherkin-Tests nutzen generische Schritte, die in mehreren Szenarien wiederverwendet werden können. - Nicht alle Tests müssen in Gherkin sein
Gherkin ist ideal für Akzeptanztests, aber nicht immer für Unit- oder Integrationstests notwendig. - Tests in CI/CD einbinden
Gherkin-Szenarien sollten automatisiert und in CI/CD-Pipelines eingebunden werden, um Regressionen frühzeitig zu erkennen.
Fazit zu Gherkin
Gherkin bietet eine klare, strukturierte Möglichkeit, Anforderungen und Tests in einer einheitlichen Sprache zu formulieren. Dadurch verbessert es die Zusammenarbeit zwischen Entwicklern, Testern und Fachabteilungen erheblich. Die Nähe zu User Stories erleichtert die Ableitung von Testfällen, wodurch Software bereits in der Entwicklungsphase effektiver getestet werden kann. Durch die enge Verbindung mit BDD-Frameworks wie Cucumber oder Playwright lassen sich Tests direkt aus verständlichen Szenarien ableiten, was zu einer besseren Nachvollziehbarkeit führt. Wer Gherkin konsequent nutzt, kann eine robuste Teststrategie schaffen, die langfristig zu höherer Softwarequalität und einer effizienteren Zusammenarbeit im Team führt.
FAQ: Häufig gestellte Fragen zu Gherkin
Was ist der Unterschied zwischen BDD und TDD?
BDD beschreibt erwartetes Verhalten aus Nutzersicht mit Given-When-Then. TDD prüft technische Korrektheit mit Unit-Tests. Beide ergänzen sich: BDD für Akzeptanztests, TDD für die Komponentenebene. Mehr dazu in unserem BDD-Grundlagen-Artikel.
Welche Testautomatisierungs-Tools unterstützen Gherkin?
Cucumber (Java), Playwright mit cucumber-js, Cypress mit cypress-cucumber-preprocessor und Robot Framework.
Wie schreibe ich gute Gherkin-Szenarien?
Jedes Szenario testet genau ein Verhalten. Given beschreibt den Ausgangszustand, When die Aktion, Then das Ergebnis. Halte Szenarien auf 5 bis 7 Steps.
Kann ich Gherkin ohne Cucumber verwenden?
Ja. Playwright, Cypress und andere Frameworks haben eigene Gherkin-Adapter. Entscheidend ist, dass das Team die Grundregeln der Testautomatisierung beherrscht.
Was sind die Grenzen von Gherkin?
Gherkin eignet sich für Akzeptanztests und E2E-Tests. Für Unit-Tests, Performance-Tests oder API-Tests sind andere Ansätze effizienter.