Bevezetés a Serenity BDD-be

1. Bemutatkozás

Ebben az oktatóanyagban bemutatjuk a Serenity BDD-t - egy nagyszerű eszköz a viselkedésvezérelt fejlesztés (BDD) alkalmazásához. Ez egy olyan megoldás az automatizált elfogadási teszteléshez, amely jól illusztrált tesztjelentéseket állít elő.

2. Alapfogalmak

A Serenity mögött álló fogalmak követik a BDD mögött álló fogalmakat. Ha többet szeretne róla tudni, olvassa el cikkünket az uborkáról és a JBehave-ről.

2.1. Követelmények

A Serenityben a követelményeket három szintre osztják:

  1. képességeit
  2. jellemzők
  3. történetek

Általában egy projekt magas szintű képességeket valósít meg, pl. megrendeléskezelési és tagságkezelési képességek egy e-kereskedelmi projektben. Minden képesség számos szolgáltatásból áll, és a szolgáltatásokat a felhasználói történetek részletesen elmagyarázzák.

2.2. Lépések és tesztek

A lépések az erőforrás-manipulációs műveletek egy csoportját tartalmazzák. Ez lehet művelet, ellenőrzés vagy kontextushoz kapcsolódó művelet. Klasszikus Given_When_Then formátum tükröződhet a lépésekben.

És a tesztek együtt járnak Lépések.Minden teszt egyszerű felhasználói történetet mesél el, amelyet bizonyos segítségével hajtanak végre Lépés.

2.3. Jelentések

A Serenity nemcsak a teszt eredményeit közli, hanem felhasználja azokat is a dokumentáció elkészítéséhez, amely leírja a követelményeket és az alkalmazási magatartást.

3. Tesztelés SerenityBDD-vel

A Serenity tesztjeink JUnittel való lefuttatásához meg kell @RunWith a SerenityRunner, tesztfutó. SerenityRunner műszerezi a lépéskönyvtárakat, és biztosítja, hogy a Serenity riporterek rögzítsék és jelentést tegyenek a teszt eredményeiről.

3.1. Maven-függőségek

Ahhoz, hogy a Serenity-t a JUnittal lehessen használni, bele kell foglalnunk derű-mag és derű-junit ban,-ben pom.xml:

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

Nekünk is szükségünk van serenity-maven-plugin a teszt eredményeiből összesített jelentések:

 net.serenity-bdd.maven.plugins serenity-maven-plugin 1.2.5-rc.6 serenity-reports integráció utáni teszt aggregátum 

Ha azt akarjuk, hogy a Serenity még teszthiba esetén is generáljon jelentéseket, adja hozzá a következőt a pom.xml:

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

3.2. Tagsági példa

Kezdetben tesztjeink az e-kereskedelmi alkalmazás tipikus tagsági pontjain alapulnak. Az ügyfél csatlakozhat a tagprogramhoz. Amint az ügyfél árukat vásárol a platformon, a tagsági pontok nőnek, és ennek megfelelően nő az ügyfél tagsági fokozata.

Most írjunk több tesztet a fent leírt szcenáriókkal szemben, és nézzük meg, hogyan működik a Serenity.

Először írjuk meg a tagság inicializálásának tesztjét, és nézzük meg, mely lépésekre van szükségünk:

@RunWith (SerenityRunner.class) public class MemberStatusIntegrationTest {@Steps private MemberStatusSteps memberSteps; @Test public void membersShouldStartWithBronzeStatus () {memberSteps.aClientJoinsTheMemberProgram (); memberSteps.theMemberShouldHaveAStatusOf (bronz); }}

Ezután a következő lépéseket hajtjuk végre:

public class MemberStatusSteps {private member member; @Step ("Ha egy tagnak van {0} pontja") public void aMemberHasPointsOf (int points) {member = Member.withInitialPoints (points); } @Step ("Akkor a tag fokozatának {0}" kell lennie) public void theMemberShouldHaveAStatusOf (MemberGrade grade) {assertThat (member.getGrade (), equalTo (grade)); }}

Most készen állunk egy integrációs teszt futtatására mvn tiszta ellenőrizze. A jelentések a következő címen találhatók: target / site / derű / index.html:

A jelentésből láthatjuk, hogy csak egy elfogadási tesztünk van: „A tagoknak bronz státusszal kell kezdenie, képesek rá” és sikeresek. A tesztre kattintva szemlélteti a lépéseket:

Mint láthatjuk, a Serenity jelentése alapos megértést nyújt számunkra, hogy mit csinál alkalmazásunk, és ha összehangolja-e követelményeinket. Ha van néhány lépésünk a megvalósításra, akkor ezeket jelölhetjük @Függőben levő:

@Pending @Step ("Amikor a tag cserél {}") public érvénytelen aMemberExchangeA (Commodity commodity) {// TODO}

A jelentés emlékeztetne bennünket arra, hogy mit kell tovább tenni. Ha pedig bármely teszt kudarcot vall, az a jelentésben is látható:

Minden sikertelen, figyelmen kívül hagyott vagy kihagyott lépés fel lesz sorolva:

4. Integráció a JBehave programmal

A Serenity integrálható a meglévő BDD keretrendszerekkel is, mint például a JBehave.

4.1. Maven-függőségek

A JBehave-hez való integráláshoz még egy függőség derű-jbehave szükséges a POM-ban:

 net.serenity-bdd serenity-jbehave 1.24.0 

4.2. A JBehave Github REST API teszt folytatódik

Mivel bemutattuk, hogyan kell elvégezni a REST API tesztelést a JBehave segítségével, folytathatjuk a JBehave REST API tesztet, és megnézhetjük, hogyan illeszkedik a Serenity-be.

A mi történetünk a következő volt:

Forgatókönyv: A Github felhasználói profiljának bejelentkezési terhelésének meg kell egyeznie a felhasználónévvel. Adott github felhasználói profil api Amikor az eugenp-t keresem az api-n keresztül

A Given_When_Then lépéseket át lehet vándorolni a @Lépések változtatások nélkül:

public class GithubRestUserAPISteps {private String api; privát GitHubUser erőforrás; @Step ("Adott a felhasználói profil github REST API-ja") public void withUserProfileAPIEndpoint () {api = "//api.github.com/users/%s"; } @Step ("Ha az {0} keresést az api segítségével keresi") public void getProfileOfUser (String felhasználónév) dobja az IOException {HttpResponse httpResponse = getGithubUserProfile (api, felhasználónév); erőforrás = retrieveResourceFromResponse (httpResponse, GitHubUser.class); } @Step ("Akkor egy {0} értékű bejelentkezési mezőnek kell lennie a (z) {0} felhasználó terhelésében) public void profilePayloadShouldContainLoginValue (String felhasználónév) {assertThat (felhasználónév, Matchers.is (resource.getLogin ())); }}

Ahhoz, hogy a JBehave történet-kód leképezése a várt módon működjön, végre kell hajtanunk a JBehave lépésdefinícióját a @Lépések:

public class GithubUserProfilePayloadStepDefinitions {@Steps GithubRestUserAPISteps userAPISteps; @Given ("github felhasználói profil api") public void givenGithubUserProfileApi () {userAPISteps.withUserProfileAPIEndpoint (); } @When ("$ felhasználó keresése az api segítségével") public void, amikor aLookingForProfileOf (String felhasználó) az IOException-t dobja {userAPISteps.getProfileOfUser (felhasználó); } @Then ("a github válasza egy" login "hasznos terhet tartalmaz, mint a $ user") public void thenGithubsResponseContainsAloginPayloadSameAs (karakterlánc felhasználó) {userAPISteps.profilePayloadShouldContainLoginValue (felhasználó); }}

Val vel SerenityStories, futtathatjuk a JBehave teszteket mind az IDE-nkön belül, mind az összeállítási folyamat során:

import net.serenitybdd.jbehave.SerenityStory; a GithubUserProfilePayload public class kiterjeszti a SerenityStory-t {}

Azután igazolja elkészült, láthatjuk a tesztjelentésünket:

A JBehave egyszerű szöveges beszámolójához képest a Serenity gazdag jelentése szemet gyönyörködtetőbb és élő áttekintést nyújt számunkra és a teszt eredményéről.

5. Integráció REST-biztosított

Figyelemre méltó, hogy a Serenity támogatja a REST-biztosított integrációt. A REST-Assured áttekintéséhez olvassa el a REST-Assured útmutatóját.

5.1. Maven-függőségek

A REN-biztosított Serenity használatához a derű-nyugodt a függőséget bele kell foglalni:

 net.serenity-bdd derű-nyugodt 1.2.5-rc.11 

5.2. Használja a REST-assured alkalmazást a Github REST API tesztben

Most lecserélhetjük webes kliensünket a REST által biztosított segédprogramokra:

import statikus net.serenitybdd.rest.SerenityRest.rest; importáljon statikus net.serenitybdd.rest.SerenityRest.then; public class GithubRestAssuredUserAPISteps {private String api; @Step ("Adott a felhasználói profil github REST API-ja") public void withUserProfileAPIEndpoint () {api = "//api.github.com/users/{username}"; } @Step ("Ha az {0} keresést az api segítségével keresi") public void getProfileOfUser (String felhasználónév) dobja az IOException {rest (). Get (api, felhasználónév); } @Step ("Akkor egy {0} értékű bejelentkezési mezőnek kell lennie a (z) {0} felhasználó terhelésében) public void profilePayloadShouldContainLoginValue (String felhasználónév) {then (). Body (" login ", Matchers.equalTo (felhasználónév) ); }}

Végrehajtásának cseréje után userAPISteps ban,-ben StepDefition, újra futtathatjuk a igazolja épít:

public class GithubUserProfilePayloadStepDefinitions {@Steps GithubRestAssuredUserAPISteps userAPISteps; // ...}

A jelentésben láthatjuk a teszt során meghívott tényleges API-t, és a gombra kattintva REST Lekérdezés gombra kattintva a kérelem és a válasz részleteit bemutatjuk:

6. Integráció a JIRA-val

Mostantól már van egy remek tesztjelentés, amely leírja a követelmények részleteit és állapotát a Serenity keretrendszerrel. De egy mozgékony csapat számára a követelmények nyomon követésére gyakran használnak olyan kérdéskövető rendszereket, mint a JIRA. Jobb lenne, ha zökkenőmentesen használhatnánk őket.

Szerencsére a Serenity már támogatja a JIRA-val való integrációt.

6.1. Maven-függőségek

A JIRA-val való integrációhoz egy másik függőségre van szükségünk: derű-jira-követelmény-szolgáltató.

 net.serenity-bdd derű-jira-követelmény-szolgáltató 1.1.3-rc.5 

6.2. Egyirányú integráció

JIRA-linkek hozzáadásához hozzáadhatjuk a JIRA-kérdést a történet metacímkéjével:

Meta: @ kiadás # BDDTEST-1

Ezenkívül a JIRA-fiókot és a linkeket a serenity.properties fájlban kell megadni a projekt gyökerében:

jira.url = jira.project = jira.username = jira.jelszó =

Ezután egy JIRA linket csatoltak a jelentéshez:

A Serenity a kétirányú integrációt is támogatja a JIRA-val, további részletekért tekintse meg a hivatalos dokumentációt.

7. Összegzés

Ebben a cikkben bemutattuk a Serenity BDD-t és többféle integrációt más tesztkeretekkel és követelménykezelő rendszerekkel.

Annak ellenére, hogy a Serenity legtöbb dolgát áttekintettük, minden bizonnyal többet tud. Következő cikkünkben kitérünk arra, hogy a Serenity a WebDriver támogatásával miként teheti lehetővé a webalkalmazások oldalainak automatizálását a forgatókönyv segítségével.

Mint mindig, a teljes implementációs kód megtalálható a GitHub projekten.