Uborka horgok
1. Bemutatkozás
Az uborkahorgok jól jöhetnek, ha minden forgatókönyvhöz vagy lépéshez konkrét műveleteket akarunk végrehajtani, de anélkül, hogy ezeket a műveleteket kifejezetten tartalmaznánk a Gherkin-kódban.
Ebben az oktatóanyagban megnézzük a @Előtt, @BeforeStep, @AfterStep, és @Utána Uborka kampók.
2. Az uborka horgainak áttekintése
2.1. Mikor kell horgot használni?
A horgokkal olyan háttérfeladatokat lehet végrehajtani, amelyek nem részei az üzleti funkcionalitásnak. Ilyen feladatok lehetnek:
- Böngésző indítása
- Cookie-k beállítása vagy törlése
- Csatlakozás adatbázishoz
- A rendszer állapotának ellenőrzése
- Monitoring
A megfigyeléshez egy olyan irányítópult frissítése lenne, ha valós időben frissítenék a teszt előrehaladását.
A horgok nem láthatók a Gherkin-kódban. Ebből kifolyólag, nem szabad őket egy uborka háttér vagy egy adott lépés helyettesítésére tekintenünk.
Megtekintünk egy példát, ahol horgok segítségével készítünk képernyőképeket a teszt végrehajtása során.
2.2. Horgok hatóköre
A horgok minden forgatókönyvre hatással vannak. Ezért jó gyakorlat az összes kampó meghatározása egy dedikált konfigurációs osztályban.
Nem szükséges ugyanazokat a horgokat definiálni minden ragasztókódosztályban. Ha a horgokat ugyanabban az osztályban definiáljuk a ragasztókóddal, akkor kevésbé olvasható kódunk lenne.
3. Horgok
Először nézzük meg az egyes horgokat. Ezután megnézünk egy teljes példát, ahol megnézzük, hogyan működnek a horgok kombinálva.
3.1. @Előtt
A módszerrel annotált @Előtt akarat minden forgatókönyv előtt végrehajtani. Példánkban minden forgatókönyv előtt elindítjuk a böngészőt:
@A nyilvános void inicializálása előtt () {startBrowser (); }
Ha számos módszert annotálunk @Előtt, kifejezetten meghatározhatjuk a lépések végrehajtásának sorrendjét:
@Before (order = 2) public void beforeScenario () {takeScreenshot (); }
A fenti módszer másodsorban hajtja végre, ahogy elhaladunk 2 értékeként a rendelés paraméter az annotációhoz. Mi is átmehetünk 1 az inicializálási módszerünk rendelési paraméterének értékeként:
@Before (order = 1) public void inicializálás ()
Tehát, amikor egy forgatókönyvet hajtunk végre, inicializálás () végrehajtja először, és beforeScenario () végrehajtja a második.
3.2. @BeforeStep
A módszerrel annotált @BeforeStepvégrehajtani minden lépés előtt. Használjuk a kommentárokat képernyőkép készítéséhez minden lépés előtt:
@BeforeStep public void beforeStep () {takeScreenshot (); }
3.3. @AfterStep
A módszerrel annotált @AfterStepvégrehajtani minden lépés után:
@AfterStep public void afterStep () {takeScreenshot (); }
Használtuk @AfterStep itt minden képernyőkép után képernyőképet készíthet. Ez történik függetlenül attól, hogy a lépés sikeresen befejeződik vagy nem sikerül.
3.4. @Utána
A módszerrel annotált @Utánaminden forgatókönyv után végrehajtani:
@A nyilvános érvénytelen utánScenario () {takeScreenshot (); bezárBöngésző (); }
Példánkban elkészítünk egy utolsó képernyőképet, és bezárjuk a böngészőt. Ez történik függetlenül attól, hogy a forgatókönyv sikeresen befejeződik-e.
3.5. A Forgatókönyv Paraméter
A horog annotációval kommentált módszerek elfogadhatnak egy típusú paramétert Forgatókönyv:
@A nyilvános void beforeScenario (forgatókönyv forgatókönyv) után {// néhány kód}
A típus objektuma Forgatókönyv információkat tartalmaz az aktuális forgatókönyvről. Tartalmazza a forgatókönyv nevét, a lépések számát, a lépések nevét és állapotát (sikeres vagy sikertelen). Ez hasznos lehet, ha különböző műveleteket akarunk végrehajtani a sikeres és a sikertelen teszteknél.
4. Horog végrehajtása
4.1. Boldog áramlást
Most nézzük meg, mi történik, amikor egy uborka-forgatókönyvet futtatunk mind a négy típusú kampóval:
Jellemző: Könyvesbolt horgokkal Háttér: A könyvesbolt adott A következő könyvek kaphatók a boltban Az ördög a fehér városban Erik Larson | | Az oroszlán, a boszorkány és a szekrény | C.S. Lewis | | A Vadállatok Kertjében | Erik Larson | 1. szcenárió: Keresse meg a szerző könyvét, amikor Erik Larson könyvét kérem. Az eladó azt mondja, hogy 2 könyv van. Forgatókönyv: 2 - Keresse meg a szerző könyvét, de nincs, amikor könyvet kérek a szerző Marcel Proust Ezután az eladó azt mondja, hogy 0 könyv van
Az IntelliJ IDE tesztfuttatásának eredményét tekintve láthatjuk a végrehajtási sorrendet:

Először a kettőnk @Előtt kampók végrehajtani. Aztán minden lépés előtt és után a @BeforeStep és @AfterStep horgok futnak, ill. Végül a @Utána horog fut. Az összes kampó mindkét forgatókönyvre érvényes.
4.2. Boldogtalan áramlás: Egy lépés nem sikerül
Lássuk, mi történik, ha egy lépés nem sikerül. Amint az alábbi képernyőképen láthatjuk, mind a @Előtt és @Utána a sikertelen lépés kampóit végrehajtják. A következő lépéseket kihagyja, végül a @Utána horog végrehajtja:

- viselkedése @Utána hasonló a végül-záradék után próbáld elkapni Java-ban. Tisztítási feladatok elvégzésére használhatnánk, ha egy lépés nem sikerül. Példánkban akkor is készítünk képernyőképet, ha a forgatókönyv kudarcot vall.
4.3. Boldogtalan áramlás: A kampó nem sikerül
Nézzük meg, mi történik, ha maga a horog nem sikerül. Az alábbi példában az első @BeforeStep nem sikerül.
Ebben az esetben a tényleges lépés nem fut, de igen @AfterStep horog nem. A következő lépések sem futnak, míg a @Utána horogot hajtják végre a végén:

5. Feltételes végrehajtás címkékkel
A horgok globálisan vannak meghatározva, és minden forgatókönyvet és lépést érintenek. Az Uborka címkék segítségével azonban pontosan meghatározhatjuk, hogy melyik forgatókönyv esetén kell végrehajtani a horgot:
@Before (order = 2, value = "@ Screenshots") public void beforeScenario () {takeScreenshot (); }
Ez a horog csak olyan szcenáriók esetén kerül végrehajtásra, amelyekkel fel van címkézve @Screenshots:
@Screenshots forgatókönyv: 1 - Keresse meg a szerző könyveit, amikor Erik Larson könyvét kérem, akkor az eladó azt mondja, hogy 2 könyv van
6. Java 8
Hozzáadhatjuk a Cucumber Java 8 támogatást, hogy meghatározzuk az összes kampót lambda kifejezésekkel.
Idézzük fel az inicializálási horogunkat a fenti példából:
@Before (order = 2) public void inicializálás () {startBrowser (); }
Lambda kifejezéssel átírva a következőket kapjuk:
public BookStoreWithHooksRunSteps () {Before (2, () -> startBrowser ()); }
Ugyanez működik a @BeforeStep, @Utána, és @AfterStep.
7. Következtetés
Ebben a cikkben megvizsgáltuk, hogyan lehet meghatározni az uborka horgokat.
Megbeszéltük, hogy mely esetekben kell használnunk őket, és mikor nem. Ezután láttuk, hogy a horgok milyen sorrendben hajtódnak végre, és hogyan érhetjük el a feltételes végrehajtást.
Végül láttuk, hogyan definiálhatjuk a horgokat Java 8 lambda jelöléssel.
Szokás szerint a cikk teljes forráskódja elérhető a GitHubon.