Komkommer lente-integratie

1. Overzicht

Cucumber is een zeer krachtig testraamwerk dat is geschreven in de programmeertaal Ruby, die de BDD-methode (behavior-driven development) volgt. Het stelt ontwikkelaars in staat om gebruiksscenario's op hoog niveau te schrijven in platte tekst die kan worden geverifieerd door niet-technische belanghebbenden, en deze om te zetten in uitvoerbare tests, geschreven in een taal die Gherkin wordt genoemd.

We hebben deze al besproken in een ander artikel.

En de Cucumber-Spring-integratie is bedoeld om testautomatisering eenvoudiger te maken. Zodra we de komkommertests hebben geïntegreerd met Spring, zouden we ze samen met de Maven-build moeten kunnen uitvoeren.

2. Maven afhankelijkheden

Laten we beginnen met het gebruik van de Cucumber-Spring-integratie door de Maven-afhankelijkheden te definiëren - te beginnen met de Cucumber-JVM-afhankelijkheid:

 io.cucumber cucumber-java 6.8.0 test 

We kunnen de meest recente versie van Cucumber JVM hier vinden.

Vervolgens voegen we de testafhankelijkheid JUnit en Cucumber toe:

 io.cucumber cucumber-junit 6.8.0 test 

De meest recente versie van Cucumber JUnit is hier te vinden.

En tot slot, de afhankelijkheid van lente en komkommer:

 io. komkommer komkommer-lente 6.8.0 test 

Nogmaals, we kunnen hier de meest recente versie van Cucumber Spring bekijken.

3. Configuratie

We gaan nu kijken hoe we Cucumber kunnen integreren in een Spring-applicatie.

Eerst maken we een Spring Boot-applicatie, waarvoor we het Spring-Boot-toepassingsartikel volgen. Vervolgens maken we een Spring REST-service en schrijven we de komkommertest ervoor.

3.1. REST-controller

Laten we eerst een eenvoudige controller maken:

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

3.2. Komkommer Stap Definities

Alles wat we nodig hebben om onze komkommertests met JUnit uit te voeren, is om een ​​enkele lege klasse met een annotatie te maken @RunWith (Cucumber.class):

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

We kunnen de annotatie zien @CucumberOptions waar we de locatie van het augurk-bestand specificeren, ook wel bekend als het feature-bestand. Op dit punt herkent Komkommer de augurken-taal; u kunt meer lezen over augurk in het artikel genoemd in de inleiding.

Laten we nu een komkommerfunctiebestand maken:

Feature: de versie kan worden opgehaald Scenario: client belt naar GET / version Wanneer de client belt / version Dan ontvangt de client statuscode 200 En de client ontvangt serverversie 1.0

Het scenario is om een ​​GET-aanroep te doen naar de REST-service-URL /versie en verifieer het antwoord.

Vervolgens moeten we een zogenaamde lijmcode maken. Dit zijn methoden die een enkele augurkstap koppelen aan Java-code.

We hebben hier opties - we kunnen komkommeruitdrukkingen of reguliere uitdrukkingen in de annotaties gebruiken. In ons geval houden we ons aan de reguliere expressies:

@When ("^ de client roept / versie $") public void the_client_issues_GET_version () gooit Throwable {executeGet ("// localhost: 8080 / version"); } @Then ("^ de client ontvangt statuscode van (\ d +) $") public void the_client_receives_status_code_of (int statusCode) gooit Throwable {HttpStatus currentStatusCode = latestResponse.getTheResponse (). GetStatusCode (); assertThat ("statuscode is onjuist:" + latestResponse.getBody (), currentStatusCode.value (), is (statusCode)); } @And ("^ de client ontvangt serverversie (. +) $") Public void the_client_receives_server_version_body (String-versie) gooit Throwable {assertThat (latestResponse.getBody (), is (versie)); }

Laten we nu de komkommertests integreren met de Spring Application Context. Daarvoor maken we een nieuwe klasse en maken we er aantekeningen mee @BuienRadarNL en @CucumberContextConfiguration:

@CucumberContextConfiguration @SpringBootTest openbare klasse SpringIntegrationTest {// executeGet implementatie}

Nu kunnen alle Cucumber-definities in een afzonderlijke Java-klasse worden geplaatst die zich uitbreidt SpringIntegrationTest:

public class StepDefs breidt SpringIntegrationTest {@When ("^ de client roept / versie $") public void the_client_issues_GET_version () uit met Throwable {executeGet ("// localhost: 8080 / version"); }}

We zijn nu helemaal klaar voor een testrit.

Eindelijk kunnen we een snelle run uitvoeren via de opdrachtregel, gewoon door te draaien mvn schone installatie -Pintegration - Maven voert de integratietests uit en toont de resultaten in de console.

3 scenario's ([32m3 geslaagd [0m) 9 stappen ([32m9 geslaagd [0m) 0m1.054s Tests uitgevoerd: 12, fouten: 0, fouten: 0, overgeslagen: 0, verstreken tijd: 9.283 sec - in com.baeldung.CucumberTest 2016-07-30 06: 28: 20.142 INFO 732 --- [Thread-2] AnnotationConfigEmbeddedWebApplicationContext: Sluiten org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext: opstartdatum [za 30 juli 06:28:12 CDT 2016]; wortel van contexthiërarchie Resultaten: uitgevoerde tests: 12, fouten: 0, fouten: 0, overgeslagen: 0 

4. Conclusie

Als je Komkommer met veer hebt geconfigureerd, is het handig om voor de lente geconfigureerde componenten te gebruiken bij het testen van BDD. Dit is een eenvoudige handleiding voor het integreren van de komkommertest in een Spring-Boot-applicatie.

Zoals gewoonlijk zijn alle codevoorbeelden die in deze tutorial worden getoond, beschikbaar op GitHub.