Gurkenfrühling Integration
1. Überblick
Cucumber ist ein sehr leistungsfähiges Test-Framework, das in der Programmiersprache Ruby geschrieben ist und der BDD-Methodik (Behaviour-Driven Development) folgt. Entwickler sollen in die Lage versetzt werden, Anwendungsfälle auf hoher Ebene in Klartext zu schreiben, der von nicht-technischen Interessengruppen verifiziert werden kann, und sie in ausführbare Tests umzuwandeln, die in einer Sprache namens Gherkin geschrieben sind.
Wir haben diese bereits indifferent article besprochen.
Und dieCucumber-Spring Integration sollen die Testautomatisierung erleichtern. Sobald wir die Cucumber-Tests 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:
info.cukes
cucumber-java
1.2.4
test
Die neueste Version von Cucumber JVM isthere.
Als Nächstes fügen wir die Testabhängigkeit für JUnit und Gurke hinzu:
info.cukes
cucumber-junit
1.2.4
test
Die neueste Version von Cucumber JUnit isthere.
Und schließlich die Frühlings- und Gurkenabhängigkeit:
info.cukes
cucumber-spring
1.2.4
test
Die neueste Version von Cucumber Spring isthere.
3. Aufbau
Wir werden uns nun ansehen, wie wir Cucumber in eine Spring Micro-Serviceanwendung integrieren können. Der erste Schritt besteht darin, eine Spring Boot-Anwendung zu erstellen, für die wir dieSpring-Boot application article befolgen.
Anschließend erstellen wir einen Spring REST-Service in der Boot-Anwendung und schreiben den Gurkentest für diesen REST-Service.
3.1. REST-Controller
Als ersten Schritt erstellen wir eine Controller-Klasse für eine einfache REST-API:
@RestController
public class VersionController {
@RequestMapping(method={RequestMethod.GET},value={"/version"})
public String getVersion() {
return "1.0";
}
}
3.2. Gurkenschritt Definitionen
Der JUnit-Läufer verwendet das JUnit-Framework, um den Gurkentest auszuführen. Wir müssen lediglich eine einzelne leere Klasse mit einer Annotation@RunWith(Cucumber.class) erstellen:
@RunWith(Cucumber.class)
@CucumberOptions(features = "src/test/resources")
public class CucumberTest {
}
Wir können die Annotation@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.
Lassen Sie uns nun eine Cucumber-Feature-Datei erstellen:
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
Schauen wir uns die Feature-Datei an. Das Szenario besteht darin, einen GET-Aufruf an die REST-Service-URL/version zu senden und die Antwort zu bestätigen.
Der nächste Schritt besteht darin, die Methode in der Java-Klasse zu erstellen, die diesem Testfall entspricht:
@When("^the client calls /version$")
public void the_client_issues_GET_version() throws Throwable{
executeGet("http://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));
}
Jetzt müssen wir diese Cucumber-Testfallmethoden mit Maven und Spring ausführen. Erstellen Sie eine Klasse, die mit Spring-JUnit ausgeführt werden kann, damit Maven diese Testklasse ausführen kann:
@ContextConfiguration(
classes = SpringDemoApplication.class,
loader = SpringApplicationContextLoader.class)
@WebAppConfiguration
@IntegrationTest
public class SpringIntegrationTest {
}
Jetzt können alle Cucumber-Definitionen in eine separate Java-Klasse aufgenommen werden, die sich auf die oben erwähnte Java-Klasse erstreckt:
public class StepDefs extends SpringIntegrationTest {
@When("^the client calls /version$")
public void the_client_issues_GET_version() throws Throwable {
executeGet("http://localhost:8080/version");
}
}
Wir sind alle bereit für einen Testlauf.
Wir können einen schnellen Lauf über die Befehlszeile durchführen, indem wir einfachmvn 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.example.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, können Sie problemlos mit Spring konfigurierte Komponenten für BDD-Tests verwenden. Dies ist eine einfache Anleitung zum Integrieren des Gurkentests in eine Spring-Boot-Anwendung.
Ein Beispielprojekt basierend auf dem Code in diesem Artikel finden Sie inlinked GitHub repository.