Uvod u Serenity BDD

1. Uvod

U ovom uputstvu dat ćemo uvod u Serenity BDD - izvrstan alat za primjenu Behaviour Driven Development (BDD). Ovo je rješenje za automatizirano ispitivanje prihvaćanja koje generira dobro ilustrirana izvješća o ispitivanju.

2. Temeljni koncepti

Koncepti iza Serenity slijede koncepte iza BDD-a. Ako želite pročitati više o tome, pogledajte naš članak o Krastavcu i JBehaveu.

2.1. Zahtjevi

U Serenityju su zahtjevi organizirani u tri razine:

  1. mogućnosti
  2. značajke
  3. priče

Tipično, projekt implementira mogućnosti visoke razine, npr. mogućnosti upravljanja narudžbama i upravljanja članstvom u projektu e-trgovine. Svaka se mogućnost sastoji od mnogih značajki, a značajke su detaljno objašnjene u korisničkim pričama.

2.2. Koraci i ispitivanja

Koraci sadrže skup operacija manipulacije resursima. To može biti radnja, provjera ili operacija vezana uz kontekst. Klasični Dato_Kada_Tada format može se odraziti u koracima.

I testovi idu ruku pod ruku Koraci.Svaki test govori jednostavnu korisničku priču koja se provodi pomoću određenih Korak.

2.3. Izvještaji

Serenity ne samo da izvještava o rezultatima ispitivanja, već ih koristi i za izradu žive dokumentacije koja opisuje zahtjeve i ponašanja u primjeni.

3. Testiranje sa SerenityBDD

Da bismo pokrenuli naše testove spokojstva s JUnit-om, moramo @RunWith the SerenityRunner, test trkač. SerenityRunner opslužuje knjižnice koraka i osigurava da će izvještaji Serenity zabilježiti i o njima izvještavati.

3.1. Ovisnosti Mavena

Da bismo iskoristili Serenity s JUnit-om, trebali bismo uključiti spokoj-jezgra i vedrina-junit u pom.xml:

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

Također trebamo serenity-maven-plugin za prikupljanje izvještaja iz rezultata ispitivanja:

 net.serenity-bdd.maven.plugins serenity-maven-plugin 1.2.5-rc.6 serenity-reports post-integracija-test agregat 

Ako želimo da Serenity generira izvješća, čak i ako postoji test neuspjeh, dodajte sljedeće u pom.xml:

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

3.2. Primjer bodova za članstvo

U početku se naši testovi temelje na tipičnim značajkama članskih bodova u aplikaciji za e-trgovinu. Kupac se može pridružiti programu za članove. Kako kupac kupuje robu na platformi, bodovi za članstvo će se povećavati, a stupanj članstva kupca u skladu s tim rasti.

Napišimo sada nekoliko testova u odnosu na gore opisane scenarije i vidjet ćemo kako Serenity radi.

Prvo, napišimo test za inicijalizaciju članstva i vidimo koji su nam koraci potrebni:

@RunWith (SerenityRunner.class) javna klasa MemberStatusIntegrationTest {@Steps private MemberStatusSteps memberSteps; @Test javni void membersShouldStartWithBronzeStatus () {memberSteps.aClientJoinsTheMemberProgram (); memberSteps.theMemberShouldHaveAStatusOf (Bronze); }}

Tada dva koraka provodimo na sljedeći način:

javni razred MemberStatusSteps {privatni član član; @Step ("S obzirom da član ima {0} bodova") javna void aMemberHasPointsOf (int points) {member = Member.withInitialPoints (points); } @Step ("Tada bi ocjena člana trebala biti {0}") void theMemberShouldHaveAStatusOf (MemberGrade grade) {assertThat (member.getGrade (), jednakTo (ocjena)); }}

Sada smo spremni pokrenuti test integracije s mvn čista provjera. Izvještaji će se nalaziti na target / site / serenity / index.html:

Iz izvješća možemo vidjeti da imamo samo jedan test prihvaćanja "Članovi bi trebali početi s brončanim statusom, ima sposobnost" i prolazi. Klikom na test ilustrirani su koraci:

Kao što vidimo, Serenityino izvješće daje nam temeljito razumijevanje onoga što naša aplikacija radi i usklađuje li naše zahtjeve. Ako imamo neke korake za provedbu, možemo ih označiti kao @U tijeku:

@Pending @Step ("When the member exchange {}") javna praznina aMemberExchangeA (robna roba) {// TODO}

Izvještaj bi nas podsjetio na ono što treba učiniti sljedeće. A u slučaju da bilo koji test ne uspije, to se može vidjeti i u izvješću:

Navest će se svaki neuspjeli, zanemareni ili preskočeni korak:

4. Integracija s JBehaveom

Serenity se također može integrirati sa postojećim BDD okvirima kao što je JBehave.

4.1. Ovisnosti Mavena

Da biste se integrirali s JBehaveom, još jedna ovisnost vedrina-jbehave je potreban u POM-u:

 net.serenity-bdd serenity-jbehave 1.24.0 

4.2. JBehave Github REST API Test Nastavljeno

Kako smo uveli kako se vrši testiranje REST API-ja s JBehaveom, možemo nastaviti s našim JBehave REST API testom i vidjeti kako se uklapa u Serenity.

Naša priča je bila:

Scenarij: Profil korisnika Github-a trebao bi imati korisni teret za prijavu isti kao korisničko ime. Dati profil korisnika github-a api Kada tražim eugenp putem api-a. Tada github-ov odgovor sadrži 'login' korisni teret isti kao eugenp

The Dato_Kada_Tada koraci se mogu premjestiti na @ Koraci bez ikakvih promjena:

javna klasa GithubRestUserAPISteps {private String api; privatni resurs GitHubUser; @Step ("S obzirom na github REST API za korisnički profil") javna praznina withUserProfileAPIEndpoint () {api = "//api.github.com/users/%s"; } @Step ("Kada se traži {0} putem api-a") javna praznina getProfileOfUser (korisničko ime niza) baca IOException {HttpResponse httpResponse = getGithubUserProfile (api, korisničko ime); resource = retrieveResourceFromResponse (httpResponse, GitHubUser.class); } @Step ("Tada bi trebalo postojati polje za prijavu s vrijednošću {0} u korisnom opterećenju korisnika {0}") public void profilePayloadShouldContainLoginValue (String username) {assertThat (username, Matchers.is (resource.getLogin ())); }}

Da bi JBehaveovo mapiranje priče u kod funkcioniralo kako se očekivalo, moramo implementirati definiciju koraka JBehavea koristeći @ Koraci:

javna klasa GithubUserProfilePayloadStepDefinitions {@Steps GithubRestUserAPISteps userAPISteps; @Given ("github profil korisničkog profila") javna praznina givenGithubUserProfileApi () {userAPISteps.withUserProfileAPIEndpoint (); } @When ("traženje $ korisnika putem api-a") javna praznina whenLookingForProfileOf (korisnik niza) baca IOException {userAPISteps.getProfileOfUser (korisnik); } @Then ("odgovor github-a sadrži korisni teret 'login' isti kao i $ user") javna praznina thenGithubsResponseContainsAloginPayloadSameAs (korisnik niza) {userAPISteps.profilePayloadShouldContainLoginValue (korisnik); }}

S SerenityStories, možemo pokrenuti JBehave testove i unutar našeg IDE-a i u procesu izrade:

import net.serenitybdd.jbehave.SerenityStory; javna klasa GithubUserProfilePayload proširuje SerenityStory {}

Nakon što provjeriti Izgradnja završena, možemo vidjeti naše izvješće o ispitivanju:

U usporedbi s JBehaveovim izvještajem s običnim tekstom, bogato izvješće Serenity-a pruža nam ugodniji i uživo pregledniji prikaz naše priče i rezultata testa.

5. Integracija s REST-osiguranim

Značajno je da Serenity podržava integraciju s REST-assured. Da biste pregledali REST-assured, pogledajte vodič za REST-assured.

5.1. Ovisnosti Mavena

Da biste iskoristili REST-assured sa Serenity, spokoj-uvjeren treba uključiti ovisnost:

 net.serenity-bdd vedrina-budite sigurni 1.2.5-rc.11 

5.2. Koristite REST-assured u Github REST API Test

Sada svoj web klijent možemo zamijeniti uslužnim programima koji imaju REST-osiguranje:

uvoz statičke net.serenitybdd.rest.SerenityRest.rest; uvoz statičke net.serenitybdd.rest.SerenityRest.then; javna klasa GithubRestAssuredUserAPISteps {private String api; @Step ("S obzirom na github REST API za korisnički profil") javna praznina withUserProfileAPIEndpoint () {api = "//api.github.com/users/{username}"; } @Step ("Kada se traži {0} putem api-a") javna void getProfileOfUser (korisničko ime niza) baca IOException {rest (). Get (api, korisničko ime); } @Step ("Tada bi trebalo postojati polje za prijavu s vrijednošću {0} u korisničkom opterećenju korisnika {0}") public void profilePayloadShouldContainLoginValue (String username) {then (). Body ("login", Matchers.equalTo (username) ); }}

Nakon zamjene provedbe userAPISteps u StepDefition, možemo ponovno pokrenuti provjeriti izgraditi:

javna klasa GithubUserProfilePayloadStepDefinitions {@Steps GithubRestAssuredUserAPISteps userAPISteps; // ...}

U izvješću možemo vidjeti stvarni API koji se poziva tijekom testa i klikom na OSTALI upit gumb, prikazat će se detalji zahtjeva i odgovora:

6. Integracija s JIRA-om

Od sada već imamo sjajno izvješće o ispitivanju koje opisuje detalje i status naših zahtjeva sa Serenity framework-om. Ali za agilni tim, sustavi za praćenje problema poput JIRA-e često se koriste za praćenje zahtjeva. Bilo bi bolje kad bismo ih mogli besprijekorno koristiti.

Srećom, Serenity već podržava integraciju s JIRA-om.

6.1. Ovisnosti Mavena

Da bismo se integrirali s JIRA-om, potrebna nam je još jedna ovisnost: vedrina-jira-zahtjevi-dobavljač.

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

6.2. Jednosmjerna integracija

Da bismo dodali JIRA veze u priču, možemo dodati JIRA izdanje pomoću metaoznake priče:

Meta: @issue # BDDTEST-1

Osim toga, JIRA račun i veze trebaju biti navedeni u datoteci serenity.properties u korijenu projekta:

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

Tada bi u izvješću bila dodana poveznica JIRA:

Serenity također podržava dvosmjernu integraciju s JIRA-om, za više detalja možemo se obratiti službenoj dokumentaciji.

7. Sažetak

U ovom smo članku predstavili Serenity BDD i višestruke integracije s drugim testnim okvirima i sustavima za upravljanje zahtjevima.

Iako smo pokrili većinu onoga što Serenity može učiniti, sigurno može i više. U sljedećem ćemo članku opisati kako nam Serenity s podrškom za WebDriver može omogućiti automatizaciju stranica web aplikacija pomoću scenarija.

Kao i uvijek, puni implementacijski kod možete pronaći na projektu GitHub.


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