Kukice od krastavaca

1. Uvod

Kuke krastavaca mogu dobro doći kada želimo izvršiti određene radnje za svaki scenarij ili korak, ali bez da te radnje budu izričito navedene u Gherkinovom kodu.

U ovom uputstvu pogledat ćemo @Prije, @BeforeStep, @AfterStep, i @Nakon Kukice od krastavaca.

2. Pregled udica u krastavcu

2.1. Kada se trebaju koristiti udice?

Kuke se mogu koristiti za izvršavanje pozadinskih zadataka koji nisu dio poslovne funkcionalnosti. Takvi zadaci mogu biti:

  • Pokretanje preglednika
  • Postavljanje ili brisanje kolačića
  • Povezivanje s bazom podataka
  • Provjera stanja sustava
  • Praćenje

Slučaj upotrebe za praćenje bio bi ažuriranje nadzorne ploče s napretkom testa u stvarnom vremenu.

Kuke nisu vidljive u Gherkin kodu. Stoga, ne bismo ih trebali doživljavati kao zamjenu za pozadinu krastavaca ili zadani korak.

Pogledat ćemo primjer gdje pomoću kuka pravimo snimke zaslona tijekom izvođenja testa.

2.2. Opseg udica

Kuke utječu na svaki scenarij. Stoga je dobra praksa definirati sve kuke u određenoj klasi konfiguracije.

Nije potrebno definirati iste kuke u svakoj klasi koda ljepila. Ako definiramo kuke u istoj klasi s našim kodom ljepila, imali bismo manje čitljiv kod.

3. Kuke

Pogledajmo prvo pojedine kuke. Zatim ćemo pogledati puni primjer gdje ćemo vidjeti kako se udice izvršavaju u kombinaciji.

3.1. @Prije

Metode označene sa @Prije htjeti izvršiti prije svakog scenarija. U našem ćemo primjeru pokrenuti preglednik prije svakog scenarija:

@Prije javne void inicijalizacije () {startBrowser (); }

Ako nekoliko metoda označimo s @Prije, možemo izričito definirati redoslijed kojim se izvršavaju koraci:

@Before (order = 2) javna void beforeScenario () {takeScreenshot (); }

Gornja metoda se izvršava drugo, dok prolazimo 2 kao vrijednost za narudžba parametar bilješke. Možemo i proći 1 kao vrijednost za parametar narudžbe naše metode inicijalizacije:

@Before (order = 1) javna void inicijalizacija ()

Dakle, kada izvršimo scenarij, inicijalizacija() izvršava prvo, i beforeScenario () izvršava drugo.

3.2. @BeforeStep

Metode označene sa @BeforeStepizvršiti prije svakog koraka. Upotrijebimo bilješku za snimanje zaslona prije svakog koraka:

@BeforeStep javna praznina prijeStep () {takeScreenshot (); }

3.3. @AfterStep

Metode označene sa @AfterStepizvršiti nakon svakog koraka:

@AfterStep javna praznina afterStep () {takeScreenshot (); }

Koristili smo @AfterStep ovdje da napravite snimku zaslona nakon svakog koraka. Ovo se dogodi bez obzira na to završava li korak uspješno ili ne.

3.4. @Nakon

Metode označene sa @Nakonizvršiti nakon svakog scenarija:

@Nakon javne praznine afterScenario () {takeScreenshot (); closeBrowser (); }

U našem ćemo primjeru napraviti završni snimak zaslona i zatvoriti preglednik. Ovo se dogodi bez obzira na to završava li scenarij uspješno.

3.5. The Scenarij Parametar

Metode označene anotacijom kuke mogu prihvatiti parametar tipa Scenarij:

@Nakon javne praznine beforeScenario (scenarij scenarija) {// neki kod}

Predmet tipa Scenarij sadrži informacije o trenutnom scenariju. Uključeni su naziv scenarija, broj koraka, nazivi koraka i status (prolazak ili neuspjeh). To može biti korisno ako želimo provesti različite radnje za položene i neuspjele testove.

4. Izvršenje kuke

4.1. Sretan protok

Pogledajmo sada što se događa kada pokrenemo scenarij Krastavca sa sve četiri vrste udica:

Značajka: Knjižara s kukama Pozadina: Knjižara S obzirom na to da su sljedeće trgovine dostupne u trgovini | Đavao u bijelom gradu | Erik Larson | | Lav, vještica i ormar | C.S. Lewis | | U vrtu zvijeri | Erik Larson | Scenarij: 1 - Pronađi knjige autora Kad zatražim knjigu autora Erika Larsona Tada prodavač kaže da postoje 2 knjige Scenarij: 2 - Pronađi knjige autora, ali nema li ih kad zatražim knjigu autora autor Marcel Proust Tada Prodavač kaže da postoji 0 knjiga

Gledajući rezultat probnog rada u IntelliJ IDE, možemo vidjeti redoslijed izvršenja:

Prvo, naša dva @Prije kuke izvršiti. Zatim prije i nakon svakog koraka, @BeforeStep i @AfterStep udice trče, odnosno. Napokon, @Nakon kuka trči. Sve se kuke izvršavaju za oba scenarija.

4.2. Nesretni tok: korak ne uspijeva

Pogledajmo što će se dogoditi ako korak ne uspije. Kao što možemo vidjeti na donjoj snimci zaslona, ​​oba @Prije i @Nakon izvršavaju se kuke neuspjelog koraka. Sljedeći koraci se preskaču, i konačno, @Nakon kuka izvršava:

Ponašanje @Nakon je sličan konačno-klauzula poslije pokušaj uhvatiti na Javi. Mogli bismo ga koristiti za obavljanje zadataka čišćenja ako neki korak ne uspije. U našem primjeru i dalje snimamo snimku zaslona čak i ako scenarij ne uspije.

4.3. Nesretni protok: kvaka ne uspijeva

Pogledajmo što se događa kad sama kuka zakaže. U donjem primjeru, prvi @BeforeStep ne uspije.

U ovom se slučaju stvarni korak ne izvodi, ali jest @AfterStep kuka radi. Ni sljedeći koraci neće se izvoditi, dok @Nakon kuka se izvršava na kraju:

5. Uvjetno izvršenje s oznakama

Kuke su definirane globalno i utječu na sve scenarije i korake. Međutim, uz pomoć oznaka Krastavac možemo točno definirati za koje scenarije treba izvršiti udicu:

@Before (order = 2, value = "@ Screenshots") javna praznina beforeScenario () {takeScreenshot (); }

Ova će se kuka izvršiti samo za scenarije koji su označeni @ Snimke zaslona:

@ Scenarij snimke zaslona: 1 - Pronađi knjige autora Kad zatražim knjigu autora Erika Larsona Tada prodavač kaže da postoje 2 knjige

6. Java 8

Možemo dodati podršku za Cucumber Java 8 kako bismo definirali sve kuke s lambda izrazima.

Prisjetite se naše inicijalizacijske kuke iz gornjeg primjera:

@Before (order = 2) javna void inicijalizacija () {startBrowser (); }

Prepisano lambda izrazom, dobivamo:

public BookStoreWithHooksRunSteps () {Before (2, () -> startBrowser ()); }

Isto vrijedi i za @BeforeStep, @Nakon, i @AfterStep.

7. Zaključak

U ovom smo članku pogledali kako definirati udice od krastavaca.

Raspravljali smo u kojim bismo ih slučajevima trebali koristiti, a kada ne. Zatim smo vidjeli kojim se redoslijedom izvršavaju kuke i kako možemo postići uvjetnu izvedbu.

Napokon smo vidjeli kako možemo definirati udice s Java 8 lambda notacijom.

Kao i obično, cjelokupni izvorni kod ovog članka dostupan je na GitHubu.


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