Inleiding tot Serenity BDD

1. Inleiding

In deze tutorial geven we een inleiding tot Serenity BDD - een geweldige tool voor het toepassen van Behavior Driven Development (BDD). Dit is een oplossing voor geautomatiseerde acceptatietesten die goed geïllustreerde testrapporten genereert.

2. Kernconcepten

De concepten achter Serenity volgen de concepten achter BDD. Als je er meer over wilt lezen, bekijk dan ons artikel over Cucumber en JBehave.

2.1. Vereisten

In Serenity zijn de vereisten onderverdeeld in drie niveaus:

  1. mogelijkheden
  2. Kenmerken
  3. verhalen

Doorgaans implementeert een project capaciteiten op hoog niveau, bijv. mogelijkheden voor orderbeheer en lidmaatschapsbeheer in een e-commerceproject. Elke mogelijkheid bestaat uit vele functies en functies worden in detail uitgelegd door gebruikersverhalen.

2.2. Stappen en tests

Stappen bevatten een groep bewerkingen voor resourcemanipulatie. Het kan een actie, verificatie of een contextgerelateerde bewerking zijn. De klassieke Given_When_Then formaat kan worden weerspiegeld in de stappen.

En testen gaan er hand in hand mee Stappen.Elke test vertelt een eenvoudig gebruikersverhaal, dat wordt uitgevoerd met behulp van bepaalde Stap.

2.3. Rapporten

Serenity rapporteert niet alleen de testresultaten, maar gebruikt ze ook voor het produceren van levende documentatie die de vereisten en toepassingsgedrag beschrijft.

3. Testen met SerenityBDD

Om onze Serenity-tests met JUnit uit te voeren, moeten we dat doen @Rennen met de SerenityRunner, testloper. SerenityRunner instrumenteert de step-bibliotheken en zorgt ervoor dat de testresultaten worden geregistreerd en gerapporteerd door de Serenity-verslaggevers.

3.1. Afhankelijkheden van Maven

Om gebruik te maken van Serenity met JUnit, moeten we opnemen sereniteit-kern en serenity-junit in de pom.xml:

 net.serenity-bdd serenity-core 1.2.5-rc.11 net.serenity-bdd serenity-junit 1.2.5-rc.11 

We hebben ook nodig serenity-maven-plugin rapporten laten samenvoegen op basis van testresultaten:

 net.serenity-bdd.maven.plugins serenity-maven-plugin 1.2.5-rc.6 serenity-rapporten post-integratie-test geaggregeerd 

Als we willen dat Serenity rapporten genereert, zelfs als er een test is mislukt, voegt u het volgende toe aan het pom.xml:

 org.apache.maven.plugins maven-surefire-plugin 2.20 waar 

3.2. Een voorbeeld van lidmaatschapspunten

In eerste instantie zijn onze tests gebaseerd op de typische functie voor lidmaatschapspunten in een e-commercetoepassing. Een klant kan deelnemen aan het ledenprogramma. Naarmate de klant goederen op het platform koopt, zullen de lidmaatschapspunten toenemen en zal het lidmaatschapsniveau van de klant dienovereenkomstig toenemen.

Laten we nu verschillende tests schrijven tegen de hierboven beschreven scenario's en kijken hoe Serenity werkt.

Laten we eerst de test schrijven voor het initialiseren van het lidmaatschap en kijken welke stappen we nodig hebben:

@RunWith (SerenityRunner.class) openbare klasse MemberStatusIntegrationTest {@Steps privé MemberStatusSteps memberSteps; @Test openbare ongeldige ledenShouldStartWithBronzeStatus () {memberSteps.aClientJoinsTheMemberProgram (); memberSteps.theMemberShouldHaveAStatusOf (Bronze); }}

Vervolgens implementeren we de twee stappen als volgt:

openbare klasse MemberStatusSteps {privélidlid; @Step ("Gegeven dat een lid {0} punten heeft") public void aMemberHasPointsOf (int punten) {member = Member.withInitialPoints (punten); } @Step ("Dan zou het lidcijfer {0}" moeten zijn) public void theMemberShouldHaveAStatusOf (MemberGrade-cijfer) {assertThat (member.getGrade (), equalTo (grade)); }}

Nu zijn we klaar om een ​​integratietest mee uit te voeren mvn schoon verifiëren. De rapporten zijn te vinden op target / site / serenity / index.html:

Uit het rapport kunnen we zien dat we maar één acceptatietest hebben ‘Leden moeten beginnen met een bronzen status, hebben de mogelijkheid om’ en slagen. Door op de test te klikken, worden de stappen geïllustreerd:

Zoals we kunnen zien, geeft het rapport van Serenity ons een grondig inzicht in wat onze applicatie doet en of het aansluit op onze vereisten. Als we enkele stappen moeten implementeren, kunnen we deze markeren als @In afwachting:

@Pending @Step ("When the member exchange {}") public void aMemberExchangeA (Commodity commodity) {// TODO}

Het rapport zou ons eraan herinneren wat er daarna moet gebeuren. En als een test mislukt, is dit ook te zien in het rapport:

Elke mislukte, genegeerde of overgeslagen stap wordt respectievelijk weergegeven:

4. Integratie met JBehave

Serenity kan ook worden geïntegreerd met bestaande BDD-frameworks zoals JBehave.

4.1. Afhankelijkheden van Maven

Om te integreren met JBehave, nog een afhankelijkheid serenity-jbehave is nodig in de POM:

 net.serenity-bdd serenity-jbehave 1.24.0 

4.2. JBehave Github REST API-test voortgezet

Aangezien we hebben geïntroduceerd hoe u REST API-testen kunt doen met JBehave, kunnen we doorgaan met onze JBehave REST API-test en zien hoe deze in Serenity past.

Ons verhaal was:

Scenario: het Github-gebruikersprofiel moet een login-payload hebben die hetzelfde is als de gebruikersnaam Gegeven github-gebruikersprofiel api Wanneer ik eugenp zoek via de api Dan bevat het antwoord van github een 'login'-payload hetzelfde als eugenp

De Given_When_Then stappen kunnen worden gemigreerd naar as @Stappen zonder enige wijzigingen:

openbare klasse GithubRestUserAPISteps {private String api; privé GitHubUser-bron; @Step ("Gezien de github REST API voor gebruikersprofiel") public void withUserProfileAPIEndpoint () {api = "//api.github.com/users/%s"; } @Step ("Bij het zoeken naar {0} via de api") public void getProfileOfUser (String gebruikersnaam) genereert IOException {HttpResponse httpResponse = getGithubUserProfile (api, gebruikersnaam); resource = retrieveResourceFromResponse (httpResponse, GitHubUser.class); } @Step ("Dan zou er een login-veld moeten zijn met waarde {0} in payload van gebruiker {0}") public void profilePayloadShouldContainLoginValue (String gebruikersnaam) {assertThat (gebruikersnaam, Matchers.is (resource.getLogin ())); }}

Om de story-to-code mapping van JBehave te laten werken zoals verwacht, moeten we de stapdefinitie van JBehave implementeren met @Stappen:

openbare klasse GithubUserProfilePayloadStepDefinitions {@Steps GithubRestUserAPISteps userAPISteps; @Given ("github gebruikersprofiel api") openbare leegte gegevenGithubUserProfileApi () {userAPISteps.withUserProfileAPIEndpoint (); } @When ("op zoek naar $ user via de api") public void whenLookingForProfileOf (String-gebruiker) gooit IOException {userAPISteps.getProfileOfUser (gebruiker); } @Then ("antwoord van github bevat een 'login' payload hetzelfde als $ user") public void thenGithubsResponseContainsAloginPayloadSameAs (String-gebruiker) {userAPISteps.profilePayloadShouldContainLoginValue (gebruiker); }}

Met SerenityStorieskunnen we JBehave-tests uitvoeren, zowel vanuit onze IDE als tijdens het buildproces:

import net.serenitybdd.jbehave.SerenityStory; openbare klasse GithubUserProfilePayload breidt SerenityStory {} uit

Na de verifiëren build voltooid, we kunnen ons testrapport zien:

In vergelijking met het platte-tekstrapport van JBehave, geeft het rijke rapport van Serenity ons een meer oogstrelend en live overzicht van ons verhaal en het testresultaat.

5. Integratie met REST-verzekerd

Het is opmerkelijk dat Serenity integratie met REST-assured ondersteunt. Om een ​​beoordeling van REST-assured te krijgen, bekijk de gids voor REST-assured.

5.1. Afhankelijkheden van Maven

Om gebruik te maken van REST-assured with Serenity, de sereniteit-gerustgesteld afhankelijkheid moet worden opgenomen:

 net.serenity-bdd serenity-rest-verzekerde 1.2.5-rc.11 

5.2. Gebruik REST-verzekerd in Github REST API Test

Nu kunnen we onze webclient vervangen door REST-verzekerde hulpprogramma's:

importeer statisch net.serenitybdd.rest.SerenityRest.rest; importeer statisch net.serenitybdd.rest.SerenityRest.then; openbare klasse GithubRestAssuredUserAPISteps {private String api; @Step ("Gezien de github REST API voor gebruikersprofiel") public void withUserProfileAPIEndpoint () {api = "//api.github.com/users/{gebruikersnaam}"; } @Step ("Bij het zoeken naar {0} via de api") public void getProfileOfUser (String gebruikersnaam) gooit IOException {rest (). Get (api, gebruikersnaam); } @Step ("Dan zou er een login-veld met waarde {0} in payload van gebruiker {0}" moeten zijn) public void profilePayloadShouldContainLoginValue (String gebruikersnaam) {then (). Body ("login", Matchers.equalTo (gebruikersnaam) ); }}

Na het vervangen van de implementatie van userAPISteps in de StepDefition, kunnen we het verifiëren bouwen:

openbare klasse GithubUserProfilePayloadStepDefinitions {@Steps GithubRestAssuredUserAPISteps userAPISteps; // ...}

In het rapport kunnen we de daadwerkelijke API zien die tijdens de test wordt aangeroepen en door op het REST-zoekopdracht knop, worden de details van het verzoek en de reactie weergegeven:

6. Integratie met JIRA

Vanaf nu hebben we al een geweldig testrapport waarin de details en de status van onze vereisten met Serenity-framework worden beschreven. Maar voor een agile team worden issue-tracking-systemen zoals JIRA vaak gebruikt om de vereisten bij te houden. Het zou beter zijn als we ze naadloos konden gebruiken.

Gelukkig ondersteunt Serenity al integratie met JIRA.

6.1. Afhankelijkheden van Maven

Om te integreren met JIRA hebben we een andere afhankelijkheid nodig: serenity-jira-requirements-provider.

 net.serenity-bdd serenity-jira-requirements-provider 1.1.3-rc.5 

6.2. Integratie in één richting

Om JIRA-links aan het verhaal toe te voegen, kunnen we het JIRA-probleem toevoegen met de metatag van het verhaal:

Meta: @issue # BDDTEST-1

Bovendien moeten JIRA-account en links worden gespecificeerd in het bestand serenity.properties in de root van het project:

jira.url = jira.project = jira.username = jira.password =

Dan zou er een JIRA-link in het rapport worden toegevoegd:

Serenity ondersteunt ook tweerichtingsintegratie met JIRA, we kunnen de officiële documentatie raadplegen voor meer details.

7. Samenvatting

In dit artikel hebben we Serenity BDD en meerdere integraties met andere testframeworks en vereistenbeheersystemen geïntroduceerd.

Hoewel we het meeste hebben besproken van wat Serenity kan doen, kan het zeker meer doen. In ons volgende artikel zullen we bespreken hoe Serenity met WebDriver-ondersteuning ons in staat kan stellen webapplicatiepagina's te automatiseren met behulp van scenario's.

Zoals altijd is de volledige implementatiecode te vinden op het GitHub-project.


$config[zx-auto] not found$config[zx-overlay] not found