Gurkenfeder Integration

1. Übersicht

Cucumber ist ein sehr leistungsfähiges Testframework, das in der Programmiersprache Ruby geschrieben ist und der BDD-Methode (Behaviour-Driven Development) folgt. Entwickler können damit Anwendungsfälle auf hoher Ebene in Klartext schreiben, die von nicht technischen Interessengruppen überprüft werden können, und sie in ausführbare Tests umwandeln, die in einer Sprache namens Gherkin geschrieben sind.

Wir haben diese bereits in einem anderen Artikel besprochen.

Die Cucumber-Spring-Integration soll die Testautomatisierung vereinfachen. Sobald wir die Gurkentests in Spring integriert haben, sollten wir sie zusammen mit dem Maven-Build ausführen können.

2. Maven-Abhängigkeiten

Beginnen wir mit der Verwendung der Cucumber-Spring-Integration, indem wir die Maven-Abhängigkeiten definieren - beginnend mit der Cucumber-JVM-Abhängigkeit:

 io.cucumber cucumber-java 6.8.0 test 

Die neueste Version von Cucumber JVM finden Sie hier.

Als Nächstes fügen wir die Testabhängigkeit für JUnit und Gurke hinzu:

 io.cucumber cucumber-junit 6.8.0 test 

Die neueste Version von Cucumber JUnit finden Sie hier.

Und schließlich die Abhängigkeit von Frühling und Gurke:

 io.cucumber cucumber-spring 6.8.0 test 

Auch hier können wir uns die neueste Version von Cucumber Spring ansehen.

3. Konfiguration

Wir werden uns nun ansehen, wie wir Cucumber in eine Spring-Anwendung integrieren können.

Zuerst erstellen wir eine Spring Boot-Anwendung, für die wir dem Artikel zur Spring Boot-Anwendung folgen. Dann erstellen wir einen Spring REST-Service und schreiben den Gurkentest dafür.

3.1. REST-Controller

Lassen Sie uns zunächst einen einfachen Controller erstellen:

@RestController public class VersionController { @GetMapping("/version") public String getVersion() { return "1.0"; } }

3.2. Gurkenschritt Definitionen

Um unsere Gurkentests mit JUnit auszuführen, müssen wir lediglich eine einzelne leere Klasse mit der Anmerkung @RunWith (Cucumber.class) erstellen :

@RunWith(Cucumber.class) @CucumberOptions(features = "src/test/resources") public class CucumberIntegrationTest { }

Wir können die Anmerkung @CucumberOptions sehen, in der wir den Speicherort der Gherkin-Datei angeben, die auch als Feature-Datei bezeichnet wird. An diesem Punkt erkennt Gurke die Gurkensprache; Sie können mehr über Gurke in dem Artikel lesen, der in der Einleitung erwähnt wird.

Erstellen wir nun eine Gurken-Feature-Datei:

Feature: the version can be retrieved Scenario: client makes call to GET /version When the client calls /version Then the client receives status code of 200 And the client receives server version 1.0

Das Szenario besteht darin, die URL / Version des REST-Dienstes mit GET aufzurufen und die Antwort zu überprüfen.

Als nächstes müssen wir einen sogenannten Klebercode erstellen. Dies sind Methoden, die einen einzelnen Gherkin-Schritt mit Java-Code verknüpfen.

Wir müssen hier Optionen auswählen - wir können entweder Gurkenausdrücke oder reguläre Ausdrücke in den Anmerkungen verwenden. In unserem Fall bleiben wir bei den regulären Ausdrücken:

@When("^the client calls /version$") public void the_client_issues_GET_version() throws Throwable{ executeGet("//localhost:8080/version"); } @Then("^the client receives status code of (\\d+)$") public void the_client_receives_status_code_of(int statusCode) throws Throwable { HttpStatus currentStatusCode = latestResponse.getTheResponse().getStatusCode(); assertThat("status code is incorrect : "+ latestResponse.getBody(), currentStatusCode.value(), is(statusCode)); } @And("^the client receives server version (.+)$") public void the_client_receives_server_version_body(String version) throws Throwable { assertThat(latestResponse.getBody(), is(version)); }

Lassen Sie uns nun die Gurkentests in den Spring-Anwendungskontext integrieren. Dazu erstellen wir eine neue Klasse und kommentieren sie mit @SpringBootTest und @CucumberContextConfiguration :

@CucumberContextConfiguration @SpringBootTest public class SpringIntegrationTest { // executeGet implementation }

Jetzt können alle Cucumber-Definitionen in eine separate Java-Klasse verschoben werden, die SpringIntegrationTest erweitert :

public class StepDefs extends SpringIntegrationTest { @When("^the client calls /version$") public void the_client_issues_GET_version() throws Throwable { executeGet("//localhost:8080/version"); } }

Wir sind jetzt alle bereit für einen Testlauf.

Schließlich können wir einen schnellen Lauf über die Befehlszeile durchführen, indem wir einfach mvn clean install -Pintegration ausführen - Maven führt die Integrationstests aus und zeigt die Ergebnisse in der Konsole an.

3 Scenarios ([32m3 passed[0m) 9 Steps ([32m9 passed[0m) 0m1.054s Tests run: 12, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 9.283 sec - in com.baeldung.CucumberTest 2016-07-30 06:28:20.142 INFO 732 --- [Thread-2] AnnotationConfigEmbeddedWebApplicationContext : Closing org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext: startup date [Sat Jul 30 06:28:12 CDT 2016]; root of context hierarchy Results : Tests run: 12, Failures: 0, Errors: 0, Skipped: 0 

4. Fazit

Nachdem Sie Cucumber mit Spring konfiguriert haben, ist es praktisch, Spring-konfigurierte Komponenten für BDD-Tests zu verwenden. Dies ist eine einfache Anleitung zum Integrieren des Gurkentests in eine Spring-Boot-Anwendung.

Wie üblich sind alle in diesem Tutorial gezeigten Codebeispiele auf GitHub verfügbar.