Čo je TestNG?
TestNG je rámec na testovanie automatizácie, v ktorom NG znamená „ďalšia generácia“. TestNG je inšpirovaný JUnitom, ktorý používa anotácie (@). TestNG prekonáva nevýhody JUnit a je navrhnutý tak, aby uľahčoval end-to-end testovanie.
Pomocou TestNG môžete vygenerovať riadnu správu a môžete ľahko zistiť, koľko testovacích prípadov bolo schválených, zlyhaných a preskočených. Neúspešné testovacie prípady môžete vykonať samostatne.
Napríklad:
- Predpokladajme, že máte päť testovacích prípadov, pre každý testovací prípad je napísaná jedna metóda (Predpokladajme, že program je napísaný pomocou hlavnej metódy bez použitia testNG). Pri prvom spustení tohto programu sa úspešne vykonajú tri metódy a štvrtá metóda zlyhala. Potom opravte chyby prítomné vo štvrtej metóde, teraz chcete spustiť iba štvrtú metódu, pretože prvé tri metódy sa aj tak úspešne vykonajú. To nie je možné bez použitia TestNG.
- TestNG v seléne poskytuje možnosť, tj. Súbor testng-failed.xml v priečinku test-output. Ak chcete spustiť iba neúspešné testovacie prípady, znamená to, že spustíte tento súbor XML. Vykoná iba neúspešné testovacie prípady.
Okrem vyššie uvedeného konceptu sa dozviete viac o TestNG, napríklad aké sú výhody TestNG, ako vytvárať testovacie metódy pomocou anotácií @test, ako prevádzať tieto triedy do súboru testovacej sady a vykonávať ich pomocou zatmenia aj z príkazového riadku .
V tomto tutoriáli TestNG sa naučíte
- Prečo používať TestNG so selénom?
- Výhody TestNG oproti JUnit
- Vytvorte testovací prípad pomocou anotácií TestNG
- Ako vytvoriť nový testovací súbor TestNG
- Kódovanie nášho prvého príkladu testovacieho prípadu NG
- Spustenie testu
- Prebieha kontrola správ vytvorených spoločnosťou TestNG
- Anotácie použité v TestNG
- Viaceré testovacie prípady
- Parametre
- Viaceré parametre
- Zhrnutie anotácií TestNG
Prečo používať TestNG so selénom?
Predvolené testy selénu negenerujú vhodný formát výsledkov testov. Pomocou TestNG v seléne môžeme generovať výsledky testov.
Väčšina používateľov selénu to používa viac ako Junit kvôli jeho výhodám. Existuje toľko funkcií TestNG, ale zameriame sa iba na tie najdôležitejšie, ktoré môžeme v seléne použiť. Kľúčové vlastnosti produktu Selenium TestNG sú:
- Vytvorte správu v správnom formáte, ktorý obsahuje počet spustení testovacích prípadov, počet úspešných testovacích prípadov, počet zlyhaných testovacích prípadov a počet vynechaných testovacích prípadov.
- Viaceré testovacie prípady je možné ľahšie zoskupiť prevedením do súboru testng.xml. V ktorých môžete určiť priority, ktoré testovacie prípady by sa mali vykonať ako prvé.
- Rovnaký testovací prípad je možné vykonať viackrát bez cyklov iba pomocou kľúčového slova s názvom „počet vyvolávaní“.
- Pomocou testng môžete vykonať viac testovacích prípadov na viacerých prehliadačoch, tj krížové testovanie.
- Rámec TestNG možno ľahko integrovať s nástrojmi ako TestNG Maven, Jenkins atď.
- Anotácie použité pri testovaní sú veľmi ľahko pochopiteľné, napríklad: @BeforeMethod, @AfterMethod, @BeforeTest, @AfterTest
- WebDriver nemá žiadny natívny mechanizmus na generovanie správ. TestNG môže vygenerovať správu v čitateľnom formáte, ako je ten, ktorý je uvedený nižšie.
- TestNG zjednodušuje spôsob kódovania testov. V našich testoch už nie je potrebná statická hlavná metóda. Postupnosť akcií je regulovaná ľahko pochopiteľnými anotáciami, ktoré nevyžadujú statické metódy.
- S nezachytenými výnimkami sa automaticky zaobíde TestNG bez predčasného ukončenia testu. Tieto výnimky sa v prehľade hlásia ako neúspešné kroky.
Výhody TestNG oproti JUnit
Existujú tri hlavné výhody TestNG oproti JUnit:
- Anotácia je zrozumiteľnejšia
- Testovacie prípady je možné ľahšie zoskupiť
- Paralelné testovanie je možné
Anotácie v TestNG sú riadky kódu, ktoré môžu určovať, ako bude vykonaná metóda pod nimi . Pred nimi je vždy symbol @. Veľmi skorý a rýchly príklad TestNG je uvedený nižšie.
O anotáciách budeme diskutovať neskôr v časti s názvom „Annotations used in TestNG“, takže je úplne v poriadku, ak ešte nerozumiete vyššie uvedenému príkladu TestNG. Je len dôležité poznamenať, že anotácie v TestNG sú ľahšie kódovateľné a zrozumiteľnejšie ako v JUnit.
Schopnosť paralelne spúšťať testy je k dispozícii v TestNG, ale nie v JUnit, preto je testovací rámec používajúci TestenG Selenium Grid preferovanejší.
Vytvorte testovací prípad pomocou anotácií TestNG
Teraz sa naučíme, ako vytvoriť náš prvý testovací prípad pomocou anotácií TestNG v seléne:
Predtým, ako vytvoríme testovací prípad, mali by sme najskôr nastaviť nový projekt TestNG v Eclipse a pomenovať ho ako „FirstTestNGProject“.
Pripravuje sa nový projekt TestNG
Krok 1: Kliknite na položky Súbor> Nové> Projekt Java
Krok 2: Ako názov projektu zadajte „FirstTestNGProject“ a potom kliknite na Ďalej.
Krok 3: Teraz začneme importovať knižnice TestNG do nášho projektu. Kliknite na kartu „Knižnice“ a potom na položku „Pridať knižnicu“
… “Krok 4: V dialógovom okne Pridať knižnicu zvoľte „TestNG“ a kliknite na Ďalej.
Krok 5: Kliknite na Dokončiť.
Mali by ste si všimnúť, že TestNG je zahrnutý v zozname knižníc.
Krok 6: Teraz pridáme súbory JAR, ktoré obsahujú selénové API. Tieto súbory sa nachádzajú v klientskom ovládači Java, ktorý sme si stiahli z adresy http://docs.seleniumhq.org/download/, keď sme v predchádzajúcich kapitolách inštalovali Selenium a Eclipse.
Potom prejdite na miesto, kde ste umiestnili súbory Selenium JAR.
Po pridaní externých súborov JAR by mala vaša obrazovka vyzerať takto.
Krok 7: Kliknite na Dokončiť a overte, či je náš FirstTestNGProject viditeľný v okne Prieskumníka balíkov Eclipse.
Ako vytvoriť nový testovací súbor TestNG
Teraz, keď sme nastavili náš projekt v tomto tutoriále TestNG, vytvorme nový súbor TestNG.
Krok 1: Kliknite pravým tlačidlom myši na priečinok balíka „src“ a potom vyberte položky Nový> Iné
…Krok 2: Kliknite na priečinok TestNG a vyberte možnosť „Trieda TestNG“. Kliknite na Ďalej.
Krok 3: Do príslušných vstupných polí zadajte hodnoty uvedené nižšie a kliknite na tlačidlo Dokončiť. Všimnite si, že sme náš súbor Java pomenovali ako „FirstTestNGFile“.
Eclipse by malo automaticky vytvoriť šablónu pre náš súbor TestNG uvedený nižšie.
Kódovanie nášho prvého príkladu testovacieho prípadu NG
Poďme teraz vytvoriť náš prvý testovací prípad, ktorý skontroluje, či je domovská stránka Mercury Tours správna. Zadajte kód, ako je uvedené v nasledujúcom príklade TestNG:
balíček firsttestngpackage;import org.openqa.selenium. *;import org.openqa.selenium.firefox.FirefoxDriver;import org.testng.Assert;import org.testng.annotations. *;public class firsttestngfile {public String baseUrl = "http://demo.guru99.com/test/newtours/";String driverPath = "C: \\ geckodriver.exe";verejný ovládač WebDriver;@Testpublic void verifyHomepageTitle () {System.out.println ("spustenie prehliadača firefox");System.setProperty ("webdriver.gecko.driver", driverPath);ovládač = nový FirefoxDriver ();driver.get (baseUrl);String expectTitle = "Vitajte: Mercury Tours";Reťazec actualTitle = driver.getTitle ();Assert.assertEquals (actualTitle, expectTitle);driver.close ();}}
Všimnite si nasledovné.
- TestNG nevyžaduje, aby ste mali metódu main ().
- Metódy nemusia byť statické.
- Použili sme anotáciu @Test. @Test slúži na zistenie, že metóda pod ním je testovacím prípadom . V tomto prípade sme nastavili metódu verifyHomepageTitle () ako náš testovací prípad, preto sme nad ňu umiestnili anotáciu „@Test“.
- Pretože v TestNG používame anotácie, bolo treba importovať balík org.testng.annotations. *.
- Použili sme triedu Assert. Trieda Assert sa používa na vykonávanie overovacích operácií v TestNG . Aby sme ho mohli použiť, musíme importovať balík org.testng.Assert.
V jednom súbore TestNG môžete mať viac testovacích prípadov (teda viac anotácií @Test). Týmto sa budeme podrobnejšie zaoberať ďalej v časti „Anotácie použité v TestNG“.
Spustenie testu
Ak chcete spustiť test, jednoducho spustite súbor v Eclipse ako obvykle. Eclipse poskytne dva výstupy - jeden v okne Konzoly a druhý v okne Výsledky TestNG.
Prebieha kontrola správ vytvorených spoločnosťou TestNG
Okno Konzoly v Eclipse poskytuje textovú správu o našich výsledkoch testovacích prípadov, zatiaľ čo okno Výsledky TestNG poskytuje grafické.
Generovanie správ HTML
TestNG má schopnosť generovať správy vo formáte HTML.
Krok 1: Po spustení súboru FirstTestNGFile, ktorý sme vytvorili v predchádzajúcej časti, kliknite pravým tlačidlom myši na názov projektu (FirstTestNGProject) v okne Prieskumník projektu a potom kliknite na možnosť „Obnoviť“.
Krok 2: Všimnite si, že bol vytvorený priečinok „test-výstup“. Rozbaľte ho a vyhľadajte súbor index.html. Tento súbor HTML je správou o výsledkoch najnovšej testovacej prevádzky.
Krok 3: Dvojitým kliknutím na tento súbor index.html ho otvoríte vo vstavanom webovom prehliadači Eclipse. Túto stránku môžete obnoviť kedykoľvek po opätovnom spustení testu jednoduchým stlačením klávesu F5, rovnako ako v bežných webových prehliadačoch.
Anotácie použité v TestNG
V predchádzajúcej časti ste sa oboznámili s anotáciou @Test. Teraz budeme študovať pokročilejšie anotácie a ich použitie.
Viaceré testovacie prípady
V jednom súbore TestNG môžeme použiť viac anotácií @Test. V predvolenom nastavení sú metódy anotované @Test vykonávané abecedne. Pozrite si kód uvedený nižšie. Aj keď metódy c_test, a_test a b_test nie sú v kóde zoradené abecedne, vykonajú sa ako také.
Spustite tento kód a na vygenerovanej stránke index.html kliknite na položku „Chronologické zobrazenie“.
Parametre
Ak chcete, aby sa metódy vykonávali v inom poradí, použite parameter „priorita“. Parametre sú kľúčové slová, ktoré upravujú funkciu anotácie .
- Parametre vyžadujú, aby ste im priradili hodnotu. Toto urobíte. Umiestnite vedľa nich znak „=“ a za nimi hodnotu.
- Parametre sú uzavreté v dvoch zátvorkách, ktoré sú umiestnené hneď za anotáciu, ako je útržok kódu uvedený nižšie.
TestNG vykoná anotáciu @Test s najnižšou hodnotou priority až po najväčšiu. Nie je potrebné, aby boli vaše prioritné hodnoty postupné.
Správa TestNG HTML potvrdí, že metódy boli vykonané na základe vzostupnej hodnoty priority.
Viaceré parametre
Okrem „priority“ má @Test ďalší parameter s názvom „alwaysRun“, ktorý je možné nastaviť iba na „true“ alebo „false“. Ak chcete použiť dva alebo viac parametrov v jednej anotácii, oddeľte ich čiarkou , ako je uvedená nižšie.
@Test (priorita = 0, alwaysRun = true)
@BeforeTest a @AfterTest
@BeforeTest |
metódy pod touto anotáciou sa vykonajú pred prvým testovacím prípadom v súbore TestNG . |
@ AfterTest |
metódy pod touto anotáciou sa vykonajú po vykonaní všetkých testovacích prípadov v súbore TestNG . |
Zvážte kód uvedený nižšie.
balíček firsttestngpackage;import org.openqa.selenium. *;import org.openqa.selenium.firefox.FirefoxDriver;import org.testng.Assert;import org.testng.annotations. *;public class firsttestngfile {public String baseUrl = "http://demo.guru99.com/test/newtours/";String driverPath = "C: \\ geckodriver.exe";verejný ovládač WebDriver;@BeforeTestpublic void launchBrowser () {System.out.println ("spustenie prehliadača firefox");System.setProperty ("webdriver.gecko.driver", driverPath);ovládač = nový FirefoxDriver ();driver.get (baseUrl);}@Testpublic void verifyHomepageTitle () {String expectTitle = "Vitajte: Mercury Tours";Reťazec actualTitle = driver.getTitle ();Assert.assertEquals (actualTitle, expectTitle);}@ AfterTestpublic void terminateBrowser () {driver.close ();}}
Ak použijeme logiku uvedenú v tabuľke a vyššie uvedenom kóde, môžeme predpovedať, že postupnosť metód bude vykonaná takto:
- 1. st - launchBrowser ()
- 2 nd - verifyHomepageTitle ()
- 3. miesto - terminateBrowser ()
Umiestnenie blokov anotácií je možné zameniť bez ovplyvnenia chronologického poradia, v akom sa vykonajú . Poďme to pochopiť s príkladom TestNG a pokúsme sa usporiadať bloky anotácií tak, aby váš kód vyzeral podobne ako ten nižšie.
balíček firsttestngpackage;import org.openqa.selenium. *;import org.openqa.selenium.firefox.FirefoxDriver;import org.testng.Assert;import org.testng.annotations. *;public class firsttestngfile {public String baseUrl = "http://demo.guru99.com/test/newtours/";String driverPath = "C: \\ geckodriver.exe";verejný ovládač WebDriver;@AfterTest // Jumbledpublic void terminateBrowser () {driver.close ();}@BeforeTest // Jumbledpublic void launchBrowser () {System.out.println ("spustenie prehliadača firefox");System.setProperty ("webdriver.gecko.driver", driverPath);ovládač = nový FirefoxDriver ();driver.get (baseUrl);}@ Test // Jumbledpublic void verifyHomepageTitle () {String expectTitle = "Vitajte: Mercury Tours";Reťazec actualTitle = driver.getTitle ();Assert.assertEquals (actualTitle, expectTitle);}}
Spustite vyššie uvedený kód a všimnite si to
@BeforeMethod a @AfterMethod
@BeforeMethod |
metódy pod touto anotáciou sa vykonajú pred každou metódou v každom testovacom prípade . |
@AfterMethod |
metódy pod touto anotáciou sa vykonajú po každej metóde v každom testovacom prípade. |
V Mercury Tours predpokladajme, že by sme chceli overiť názvy cieľových stránok dvoch odkazov uvedených nižšie.
Tok nášho testu by bol:
- Prejdite na domovskú stránku a overte jej názov.
- Kliknite na REGISTRÁCIA a overte názov cieľovej stránky.
- Vráťte sa na domovskú stránku a overte, či má stále správny názov.
- Kliknite na PODPORA a overte názov svojej cieľovej stránky.
- Vráťte sa na domovskú stránku a overte, či má stále správny názov.
Nasledujúci kód ilustruje, ako sa @BeforeMethod a @AfterMethod používajú na efektívne vykonávanie vyššie uvedeného scenára.
balíček firsttestngpackage;import org.openqa.selenium. *;import org.openqa.selenium.firefox.FirefoxDriver;import org.testng.Assert;import org.testng.annotations. *;@Testpublic class firsttestngfile {public String baseUrl = "http://demo.guru99.com/test/newtours/";String driverPath = "C: \\ geckodriver.exe";verejný ovládač WebDriver;public String expected = null;public String actual = null;@BeforeTestpublic void launchBrowser () {System.out.println ("spustenie prehliadača firefox");System.setProperty ("webdriver.gecko.driver", driverPath);ovládač = nový FirefoxDriver ();driver.get (baseUrl);}@BeforeMethodpublic void verifyHomepageTitle () {String expectTitle = "Vitajte: Mercury Tours";Reťazec actualTitle = driver.getTitle ();Assert.assertEquals (actualTitle, expectTitle);}@Test (priorita = 0)verejny void register () {driver.findElement (By.linkText ("REGISTRÁCIA")). kliknite ();expect = "Register: Mercury Tours";actual = driver.getTitle ();Assert.assertEquals (skutočné, očakávané);}@Test (priorita = 1)podpora neplatnosti verejných prostriedkov () {driver.findElement (By.linkText ("PODPORA")). klik ();Očakávané = "Vo výstavbe: Merkur";actual = driver.getTitle ();Assert.assertEquals (skutočné, očakávané);}@AfterMethodpublic void goBackToHomepage () {driver.findElement (By.linkText ("Domov")). click ();}@ AfterTestpublic void terminateBrowser () {driver.close ();}}
Po vykonaní tohto testu by mal váš TestNG nahlásiť nasledujúcu postupnosť.
Jednoducho povedané, @BeforeMethod by mal obsahovať metódy, ktoré musíte spustiť pred každým testovacím prípadom, zatiaľ čo @AfterMethod by mal obsahovať metódy, ktoré musíte spustiť po každom testovacom prípade.
Zhrnutie anotácií TestNG
@BeforeSuite : Anotovaná metóda sa spustí pred spustením všetkých testov v tejto suite.
@AfterSuite : Anotovaná metóda sa spustí po spustení všetkých testov v tejto suite.
@BeforeTest : Anotovaná metóda sa spustí pred spustením akejkoľvek testovacej metódy patriacej do tried vo vnútri značky.
@AfterTest : Anotovaná metóda sa spustí po spustení všetkých testovacích metód patriacich do tried vo vnútri značky.
@BeforeGroups : Zoznam skupín, pred ktorými bude táto metóda konfigurácie bežať. Táto metóda je zaručene spustená krátko pred vyvolaním prvej testovacej metódy patriacej do ktorejkoľvek z týchto skupín.
@AfterGroups : Zoznam skupín, po ktorých bude bežať táto metóda konfigurácie. Táto metóda je zaručene spustená krátko po vyvolaní poslednej testovacej metódy patriacej do ktorejkoľvek z týchto skupín.
@BeforeClass : Anotovaná metóda sa spustí pred vyvolaním prvej testovacej metódy v aktuálnej triede.
@AfterClass : Anotovaná metóda sa spustí po spustení všetkých testovacích metód v aktuálnej triede.
@BeforeMethod : Anotovaná metóda sa spustí pred každou testovacou metódou.
@AfterMethod : Anotovaná metóda sa spustí po každej testovacej metóde.
@ Test : Anotovaná metóda je súčasťou testovacieho prípadu
Záver
- TestNG je testovací rámec, ktorý umožňuje lepšie pochopenie selénových testov a generovanie prehľadov, ktoré sú ľahko pochopiteľné.
- Hlavné výhody TestNG oproti JUnit sú nasledujúce.
- Poznámky sú ľahšie použiteľné a zrozumiteľné.
- Testovacie prípady je možné ľahšie zoskupiť.
- TestNG nám umožňuje vytvárať paralelné testy.
- Okno Konzoly v Eclipse generuje textový výsledok, zatiaľ čo okno TestNG je užitočnejšie, pretože nám poskytuje grafický výstup výsledku testu a ďalšie zmysluplné podrobnosti, ako napríklad:
- Runtime každej metódy.
- Chronologické poradie, podľa ktorého boli metódy vykonané
- TestNG je schopný generovať výkazy založené na HTML.
- Anotácie môžu používať parametre rovnako ako bežné metódy Java TestNG.
- TestNG Dataprovider je spôsob, ako odovzdať parametre do testovacej funkcie, ktorá v jednom vykonaní odovzdá rôzne hodnoty v testovacích prípadoch.