Einleitung
Das Cucumber-Test-Framework ist eine weit verbreitete Open-Source-Lösung für die Verhaltensgetriebene Entwicklung (BDD, Behavior-Driven Development). Es ermöglicht Entwicklern und Testern, Testfälle in einer natürlichen Sprache zu schreiben, die sowohl technisch versierte als auch nicht-technische Stakeholder verstehen können. In diesem Artikel wird die Verwendung von Cucumber in Java-Projekten detailliert erläutert, einschließlich Installation, Konfiguration, Erstellung von Tests und Best Practices.
Was ist Cucumber?
Cucumber ist ein BDD-Framework, das es ermöglicht, automatisierte Tests in einer menschenlesbaren Form zu schreiben. Es basiert auf der Gherkin-Syntax, die einfache, strukturierte Textdateien nutzt, um Testszenarien zu definieren. Diese Szenarien werden dann mit Hilfe von Java-Code implementiert.
Was ist Gherkin?
Gherkin ist eine domänenspezifische Sprache (DSL), die zur Beschreibung von Testszenarien in einer klaren, strukturierten Weise verwendet wird. Sie ist leicht verständlich und ermöglicht es sowohl technischen als auch nicht-technischen Personen, Anforderungen in einer nachvollziehbaren Art und Weise zu formulieren. Gherkin-Dateien haben die Endung .feature
und bestehen aus Schlüsselwörtern, die die verschiedenen Bestandteile eines Testszenarios definieren:
- Funktionalität (Feature): Eine übergeordnete Beschreibung der zu testenden Funktion.
- Szenario (Scenario): Eine spezifische Testfallbeschreibung mit vorgegebenen Bedingungen und erwarteten Ergebnissen.
- Gegeben (Given): Definiert die Ausgangssituation oder den Anfangszustand.
- Wenn (When): Beschreibt die durchzuführende Aktion.
- Dann (Then): Definiert die erwartete Ausgabe oder das Ergebnis.
- Und (And) / Aber (But): Ermöglichen zusätzliche Bedingungen oder Aktionen innerhalb eines Szenarios.
- Szenariovorlage (Scenario Outline): Wird verwendet, um parametrisierte Tests zu erstellen, die mit verschiedenen Datensätzen ausgeführt werden können.
- Beispiele (Examples): Definieren verschiedene Testwerte für ein Szenariovorlage.
Ein Beispiel für eine feature
-Datei:
Funktionalität: Login-Funktionalität
Szenario: Erfolgreiches Login
Gegeben Ein Benutzer befindet sich auf der Login-Seite
Wenn Der Benutzer gibt gültige Anmeldedaten ein
Dann Sollte der Benutzer auf das Dashboard weitergeleitet werden
Code-Sprache: HTTP (http)
Vorteile von Cucumber
- Bessere Zusammenarbeit: Entwickler, Tester und Business-Analysten können gemeinsam Testfälle schreiben.
- Lesbarkeit: Die Tests sind in einer natürlichen Sprache formuliert.
- Wiederverwendbarkeit: Schrittdefinitionen können in mehreren Tests verwendet werden.
- Automatisierung: Nahtlose Integration in verschiedene Test-Frameworks wie JUnit oder TestNG.
Installation und Einrichtung von Cucumber in einem Java-Projekt
Um Cucumber in einem Java-Projekt zu nutzen, wird Maven oder Gradle als Build-Management-Tool empfohlen.
1. Maven-Abhängigkeiten hinzufügen
Falls Maven genutzt wird, müssen folgende Abhängigkeiten in der pom.xml
-Datei eingefügt werden:
<dependencies>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-java</artifactId>
<version>7.0.0</version>
</dependency>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-junit</artifactId>
<version>7.0.0</version>
<scope>test</scope>
</dependency>
</dependencies>
Code-Sprache: HTML, XML (xml)
Falls Gradle verwendet wird, können folgende Zeilen in build.gradle
aufgenommen werden:
dependencies {
testImplementation 'io.cucumber:cucumber-java:7.0.0'
testImplementation 'io.cucumber:cucumber-junit:7.0.0'
}
Code-Sprache: JavaScript (javascript)
Erstellen von Cucumber-Tests
1. Gherkin-Szenarien definieren
Die Testfälle werden in .feature
-Dateien geschrieben. Eine einfache login.feature
-Datei könnte so aussehen:
Funktionalität: Login-Funktionalität
Szenario: Erfolgreiches Login
Gegeben Ein Benutzer befindet sich auf der Login-Seite
Wenn Der Benutzer gibt gültige Anmeldedaten ein
Dann Sollte der Benutzer auf das Dashboard weitergeleitet werden
Code-Sprache: HTTP (http)
2. Schrittdefinitionen in Java implementieren
Jeder Gherkin-Schritt muss mit einer Java-Methode verknüpft werden. Die Implementierung erfolgt in einer StepDefinitions
-Klasse:
import io.cucumber.java.de.*;
public class LoginSchritte {
@Gegeben("Ein Benutzer befindet sich auf der Login-Seite")
public void benutzerAufLoginSeite() {
System.out.println("Benutzer ist auf der Login-Seite");
}
@Wenn("Der Benutzer gibt gültige Anmeldedaten ein")
public void benutzerGibtAnmeldedatenEin() {
System.out.println("Benutzer gibt gültige Anmeldedaten ein");
}
@Dann("Sollte der Benutzer auf das Dashboard weitergeleitet werden")
public void benutzerSiehtDashboard() {
System.out.println("Benutzer ist auf dem Dashboard");
}
}
Code-Sprache: JavaScript (javascript)
3. TestRunner erstellen
Eine Runner-Klasse wird benötigt, um die Tests auszuführen:
import org.junit.runner.RunWith;
import io.cucumber.junit.Cucumber;
import io.cucumber.junit.CucumberOptions;
@RunWith(Cucumber.class)
@CucumberOptions(
features = "src/test/resources/features",
glue = "stepDefinitions",
plugin = {"pretty", "html:target/cucumber-reports"}
)
public class TestRunner {
}
Code-Sprache: JavaScript (javascript)
Fazit
Cucumber ist ein leistungsfähiges Framework zur Implementierung von BDD in Java-Projekten. Die Kombination aus menschenlesbaren Testszenarien und einer nahtlosen Integration in Java macht es zu einer hervorragenden Wahl für agile Softwareentwicklungsteams. Durch Best Practices wie Hooks, Parameterisierung und saubere Strukturierung kann das Testen effizienter und wartungsfreundlicher gestaltet werden. Gherkin als zugrunde liegende Sprache bietet eine einfache Möglichkeit, Tests verständlich und übersichtlich zu definieren, wodurch die Zusammenarbeit zwischen verschiedenen Teams verbessert wird.