Gurkenfederintegration

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.