Co je TestNG?
TestNG je rámec pro testování automatizace, ve kterém NG znamená „Next Generation“. TestNG je inspirováno z JUnit, který používá anotace (@). TestNG překonává nevýhody JUnit a je navržen tak, aby usnadnil end-to-end testování.
Pomocí TestNG můžete vygenerovat řádnou zprávu a můžete snadno zjistit, kolik testovacích případů bylo předáno, selhalo a přeskočeno. Neúspěšné testovací případy můžete provést samostatně.
Například:
- Předpokládejme, že máte pět testovacích případů, pro každý testovací případ je napsána jedna metoda (Předpokládejme, že program je zapsán pomocí hlavní metody bez použití testNG). Při prvním spuštění tohoto programu se úspěšně provedou tři metody a čtvrtá metoda se nezdařila. Pak opravte chyby přítomné ve čtvrté metodě, nyní chcete spustit pouze čtvrtou metodu, protože první tři metody jsou stejně úspěšně provedeny. To není možné bez použití TestNG.
- TestNG v selenu poskytuje možnost, tj. Soubor testng-failed.xml ve složce test-output. Pokud chcete spustit pouze neúspěšné testovací případy, znamená to, že spustíte tento soubor XML. Provede pouze neúspěšné testovací případy.
Kromě výše uvedeného konceptu se na TestNG dozvíte více, například jaké jsou výhody TestNG, jak vytvořit testovací metody pomocí anotací @test, jak převést tyto třídy do souboru testovací sady a provést pomocí zatmění i z příkazového řádku .
V tomto tutoriálu TestNG se naučíte
- Proč používat TestNG se selenem?
- Výhody TestNG oproti JUnit
- Vytvořte testovací případ pomocí anotací TestNG
- Jak vytvořit nový testovací soubor TestNG
- Kódování našeho prvního příkladu testovacího případu NG
- Provedení testu
- Kontrola zpráv vytvořených TestNG
- Anotace použité v TestNG
- Několik testovacích případů
- Parametry
- Více parametrů
- Shrnutí anotací TestNG
Proč používat TestNG se selenem?
Výchozí testy selenu negenerují správný formát pro výsledky testů. Pomocí TestNG v selenu můžeme generovat výsledky testů.
Většina uživatelů selenu toto používá více než Junit kvůli jeho výhodám. Existuje tolik funkcí TestNG, ale zaměříme se pouze na ty nejdůležitější, které můžeme v selenu použít. Klíčové vlastnosti Selenium TestNG jsou následující:
- Vygenerujte zprávu ve správném formátu, včetně počtu spuštění testovacích případů, počtu předaných testovacích případů, počtu neúspěšných testovacích případů a počtu vynechaných testovacích případů.
- Více testovacích případů lze snáze seskupit převedením do souboru testng.xml. Ve kterém můžete určit priority, který testovací případ by měl být proveden jako první.
- Stejný testovací případ lze provést vícekrát bez smyček pouze pomocí klíčového slova s názvem „počet vyvolání“.
- Pomocí testng můžete spustit více testovacích případů na více prohlížečích, tj. Testování napříč prohlížeči.
- Rámec TestNG lze snadno integrovat s nástroji jako TestNG Maven, Jenkins atd.
- Annotations used in the testing are very easy to understand ex: @BeforeMethod, @AfterMethod, @BeforeTest, @AfterTest
- WebDriver nemá žádný nativní mechanismus pro generování sestav. TestNG může generovat zprávu v čitelném formátu, jako je ten, který je uveden níže.
- TestNG zjednodušuje způsob kódování testů. V našich testech již není potřeba statická hlavní metoda. Pořadí akcí je regulováno snadno srozumitelnými anotacemi, které nevyžadují statické metody.
- Nezachycené výjimky jsou automaticky zpracovány TestNG bez předčasného ukončení testu. Tyto výjimky jsou v sestavě hlášeny jako neúspěšné kroky.
Výhody TestNG oproti JUnit
Existují tři hlavní výhody TestNG oproti JUnit:
- Anotace jsou srozumitelnější
- Testovací případy lze snáze seskupit
- Paralelní testování je možné
Annotations in TestNG are lines of code that can control how the method below them will be executed . Vždy jim předchází symbol @. Níže je uveden velmi brzký a rychlý příklad TestNG.
O anotacích budeme hovořit později v části s názvem „Annotations used in TestNG“, takže je naprosto v pořádku, pokud výše uvedenému příkladu TestNG ještě nerozumíte. Prozatím je důležité si uvědomit, že anotace v TestNG jsou snadněji kódovatelné a srozumitelnější než v JUnit.
Možnost paralelně spouštět testy je k dispozici v TestNG, ale ne v JUnit, takže TestNG framework je výhodnější pro testery používající Selenium Grid.
Vytvořte testovací případ pomocí anotací TestNG
Nyní se naučíme, jak vytvořit náš první testovací případ pomocí TestNG anotací v selenu:
Než vytvoříme testovací případ, měli bychom nejprve nastavit nový projekt TestNG v Eclipse a pojmenovat jej jako „FirstTestNGProject“.
Nastavení nového projektu TestNG
Krok 1: Klikněte na Soubor> Nový> Projekt Java
Krok 2: Jako název projektu zadejte „FirstTestNGProject“ a klikněte na Další.
Krok 3: Nyní začneme importovat knihovny TestNG do našeho projektu. Klikněte na kartu „Knihovny“ a poté na „Přidat knihovnu“
… “Krok 4: V dialogovém okně Přidat knihovnu zvolte „TestNG“ a klikněte na Další.
Krok 5: Klikněte na Dokončit.
Měli byste si všimnout, že TestNG je zahrnut v seznamu knihoven.
Krok 6: Nyní přidáme soubory JAR, které obsahují Selenium API. Tyto soubory se nacházejí v klientském ovladači Java, který jsme si stáhli z http://docs.seleniumhq.org/download/, když jsme v předchozích kapitolách instalovali Selenium a Eclipse.
Poté přejděte na místo, kde jste umístili soubory Selenium JAR.
Po přidání externích souborů JAR by vaše obrazovka měla vypadat takto.
Krok 7: Klikněte na Dokončit a ověřte, zda je náš FirstTestNGProject viditelný v okně Průzkumníka balíčků Eclipse.
Jak vytvořit nový testovací soubor TestNG
Nyní, když jsme nastavili náš projekt v tomto tutoriálu TestNG, vytvořme nový soubor TestNG.
Krok 1: Klepněte pravým tlačítkem myši na složku balíčku „src“ a vyberte příkaz Nový> Jiné
…Krok 2: Klikněte na složku TestNG a vyberte možnost „Třída TestNG“. Klikněte na Další.
Krok 3: Zadejte hodnoty uvedené níže do příslušných vstupních polí a klikněte na Dokončit. Všimněte si, že jsme pojmenovali náš soubor Java jako „FirstTestNGFile“.
Eclipse by měl automaticky vytvořit šablonu pro náš soubor TestNG zobrazený níže.
Kódování našeho prvního příkladu testovacího případu NG
Vytvořme nyní náš první testovací případ, který ověří, zda je domovská stránka Mercury Tours správná. Zadejte svůj kód, jak je uvedeno v níže uvedeném příkladu TestNG:
balíček firsttestngpackage;import org.openqa.selenium. *;import org.openqa.selenium.firefox.FirefoxDriver;import org.testng.Assert;importovat org.testng.annotations. *;public class firsttestngfile {public String baseUrl = "http://demo.guru99.com/test/newtours/";Řetězec driverPath = "C: \\ geckodriver.exe";veřejný ovladač WebDriver;@Testpublic void verifyHomepageTitle () {System.out.println ("spuštění prohlížeče Firefox");System.setProperty ("webdriver.gecko.driver", driverPath);driver = new FirefoxDriver ();driver.get (baseUrl);String expectTitle = "Welcome: Mercury Tours";Řetězec actualTitle = driver.getTitle ();Assert.assertEquals (actualTitle, expectTitle);driver.close ();}}
Všimněte si následujícího.
- TestNG nevyžaduje, abyste měli metodu main ().
- Metody nemusí být statické.
- Použili jsme anotaci @Test. @Test slouží k určení, že metoda pod ním je testovacím případem . V tomto případě jsme nastavili metodu verifyHomepageTitle () jako náš testovací případ, takže jsme nad ni umístili anotaci '@Test'.
- Protože v TestNG používáme anotace, potřebovali jsme importovat balíček org.testng.annotations. *.
- Použili jsme třídu Assert. Třída Assert se používá k provádění ověřovacích operací v TestNG . Chcete-li jej použít, musíme importovat balíček org.testng.Assert.
V jednom souboru TestNG můžete mít více testovacích případů (tedy více anotací @Test). Tomu se budeme podrobněji věnovat dále v části „Poznámky použité v TestNG.“
Provedení testu
Chcete-li spustit test, jednoduše spusťte soubor v Eclipse jako obvykle. Eclipse poskytne dva výstupy - jeden v okně konzoly a druhý v okně Výsledky TestNG.
Kontrola zpráv vytvořených TestNG
Okno Konzoly v Eclipse poskytuje textovou zprávu o našich výsledcích testovacích případů, zatímco okno Výsledky TestNG nám poskytuje grafické.
Generování zpráv HTML
TestNG má schopnost generovat zprávy ve formátu HTML.
Krok 1: Po spuštění našeho souboru FirstTestNGFile, který jsme vytvořili v předchozí části, klikněte pravým tlačítkem na název projektu (FirstTestNGProject) v okně Průzkumník projektu a poté klikněte na možnost „Obnovit“.
Krok 2: Všimněte si, že byla vytvořena složka „test-výstup“. Rozbalte jej a vyhledejte soubor index.html. Tento soubor HTML je zprávou o výsledcích posledního zkušebního běhu.
Krok 3: Poklepáním na tento soubor index.html jej otevřete ve vestavěném webovém prohlížeči Eclipse. Tuto stránku můžete kdykoli po opětovném spuštění testu obnovit jednoduchým stisknutím klávesy F5 stejně jako v běžných webových prohlížečích.
Anotace použité v TestNG
V předchozí části jste byli seznámeni s anotací @Test. Nyní budeme studovat pokročilejší anotace a jejich použití.
Několik testovacích případů
V jednom souboru TestNG můžeme použít více anotací @Test. Ve výchozím nastavení jsou metody anotované @Test prováděny abecedně. Viz kód níže. Ačkoli metody c_test, a_test a b_test nejsou v kódu uspořádány abecedně, budou provedeny jako takové.
Spusťte tento kód a na vygenerované stránce index.html klikněte na „Chronologické zobrazení“.
Parametry
Pokud chcete, aby se metody prováděly v jiném pořadí, použijte parametr „priorita“. Parametry jsou klíčová slova, která mění funkci anotace .
- Parametry vyžadují, abyste jim přiřadili hodnotu. To uděláte tak, že vedle nich umístíte znak „=“ a poté hodnotu.
- Parametry jsou uzavřeny v dvojici závorek, které jsou umístěny hned za anotaci, jako fragment kódu uvedený níže.
TestNG provede anotaci @Test s nejnižší prioritou až po největší. Není třeba, aby byly vaše prioritní hodnoty za sebou.
Zpráva TestNG HTML potvrdí, že metody byly provedeny na základě vzestupné hodnoty priority.
Více parametrů
Kromě „priority“ má @Test další parametr s názvem „alwaysRun“, který lze nastavit pouze na „true“ nebo „false“. Chcete-li použít dva nebo více parametrů v jedné anotaci, oddělte je čárkou , jako je ta, která je uvedena níže.
@Test (priorita = 0, alwaysRun = true)
@BeforeTest a @AfterTest
@BeforeTest |
metody pod touto anotací budou provedeny před prvním testovacím případem v souboru TestNG . |
@AfterTest |
metody pod touto anotací budou provedeny po provedení všech testovacích případů v souboru TestNG . |
Zvažte níže uvedený kód.
balíček firsttestngpackage;import org.openqa.selenium. *;import org.openqa.selenium.firefox.FirefoxDriver;import org.testng.Assert;importovat org.testng.annotations. *;public class firsttestngfile {public String baseUrl = "http://demo.guru99.com/test/newtours/";Řetězec driverPath = "C: \\ geckodriver.exe";veřejný ovladač WebDriver;@BeforeTestpublic void launchBrowser () {System.out.println ("spuštění prohlížeče Firefox");System.setProperty ("webdriver.gecko.driver", driverPath);driver = new FirefoxDriver ();driver.get (baseUrl);}@Testpublic void verifyHomepageTitle () {String expectTitle = "Welcome: Mercury Tours";Řetězec actualTitle = driver.getTitle ();Assert.assertEquals (actualTitle, expectTitle);}@AfterTestpublic void terminateBrowser () {driver.close ();}}
Použitím logiky uvedené v tabulce a výše uvedeném kódu můžeme předpovědět, že posloupnost, kterou budou metody provedeny, je:
- 1. st - launchBrowser ()
- 2. místo - verifyHomepageTitle ()
- 3 rd - terminateBrowser ()
Umístění bloků anotací lze zaměnit, aniž by to ovlivnilo chronologické pořadí, ve kterém budou provedeny . Pojďme to pochopit pomocí TestNG příkladu a pokusme se přeskupit bloky poznámek tak, aby váš kód vypadal podobně jako ten níže.
balíček firsttestngpackage;import org.openqa.selenium. *;import org.openqa.selenium.firefox.FirefoxDriver;import org.testng.Assert;importovat org.testng.annotations. *;public class firsttestngfile {public String baseUrl = "http://demo.guru99.com/test/newtours/";Řetězec driverPath = "C: \\ geckodriver.exe";veřejný ovladač WebDriver;@AfterTest // Jumbledpublic void terminateBrowser () {driver.close ();}@BeforeTest // Jumbledpublic void launchBrowser () {System.out.println ("spuštění prohlížeče Firefox");System.setProperty ("webdriver.gecko.driver", driverPath);driver = new FirefoxDriver ();driver.get (baseUrl);}@ Test // Jumbledpublic void verifyHomepageTitle () {String expectTitle = "Welcome: Mercury Tours";Řetězec actualTitle = driver.getTitle ();Assert.assertEquals (actualTitle, expectTitle);}}
Spusťte výše uvedený kód a všimněte si to
@BeforeMethod a @AfterMethod
@BeforeMethod |
metody pod touto anotací budou provedeny před každou metodou v každém testovacím případě . |
@AfterMethod |
metody pod touto anotací budou provedeny po každé metodě v každém testovacím případě. |
Ve hře Mercury Tours předpokládejme, že bychom chtěli ověřit názvy cílových stránek dvou odkazů níže.
Průběh našeho testu by byl:
- Přejděte na domovskou stránku a ověřte její název.
- Klikněte na REGISTROVAT a ověřte název jeho cílové stránky.
- Vraťte se na domovskou stránku a ověřte, zda má stále správný název.
- Klikněte na PODPOROVAT a ověřte název cílové stránky.
- Vraťte se na domovskou stránku a ověřte, zda má stále správný název.
Níže uvedený kód ukazuje, jak se @BeforeMethod a @AfterMethod používají k efektivnímu provedení výše uvedeného scénáře.
balíček firsttestngpackage;import org.openqa.selenium. *;import org.openqa.selenium.firefox.FirefoxDriver;import org.testng.Assert;importovat org.testng.annotations. *;@Testpublic class firsttestngfile {public String baseUrl = "http://demo.guru99.com/test/newtours/";Řetězec driverPath = "C: \\ geckodriver.exe";veřejný ovladač WebDriver;public String očekáváno = null;public String actual = null;@BeforeTestpublic void launchBrowser () {System.out.println ("spuštění prohlížeče Firefox");System.setProperty ("webdriver.gecko.driver", driverPath);driver = new FirefoxDriver ();driver.get (baseUrl);}@BeforeMethodpublic void verifyHomepageTitle () {String expectTitle = "Welcome: Mercury Tours";Řetězec actualTitle = driver.getTitle ();Assert.assertEquals (actualTitle, expectTitle);}@Test (priorita = 0)public void register () {driver.findElement (By.linkText ("REGISTRACE")). click ();expect = "Register: Mercury Tours";actual = driver.getTitle ();Assert.assertEquals (skutečné, očekávané);}@Test (priorita = 1)public void support () {driver.findElement (By.linkText ("PODPORA")). click ();očekává se = "Ve výstavbě: Prohlídky Merkuru";actual = driver.getTitle ();Assert.assertEquals (skutečné, očekávané);}@AfterMethodpublic void goBackToHomepage () {driver.findElement (By.linkText ("Domů")). click ();}@AfterTestpublic void terminateBrowser () {driver.close ();}}
Po provedení tohoto testu by měl váš TestNG nahlásit následující sekvenci.
Jednoduše řečeno, @BeforeMethod by měl obsahovat metody, které musíte spustit před každým testovacím případem, zatímco @AfterMethod by měl obsahovat metody, které musíte spustit po každém testovacím případě.
Shrnutí anotací TestNG
@BeforeSuite : Anotovaná metoda bude spuštěna před spuštěním všech testů v této sadě.
@AfterSuite : Anotovaná metoda bude spuštěna po spuštění všech testů v této sadě.
@BeforeTest : Anotovaná metoda bude spuštěna před spuštěním jakékoli testovací metody patřící do tříd uvnitř značky.
@AfterTest : Anotovaná metoda bude spuštěna po spuštění všech testovacích metod patřících do tříd uvnitř značky.
@BeforeGroups : Seznam skupin, před kterými bude tato metoda konfigurace spuštěna. Je zaručeno, že tato metoda bude spuštěna krátce před vyvoláním první testovací metody, která patří do kterékoli z těchto skupin.
@AfterGroups : Seznam skupin, po kterých bude tato metoda konfigurace spuštěna. Je zaručeno, že tato metoda bude spuštěna krátce po vyvolání poslední testovací metody, která patří do kterékoli z těchto skupin.
@BeforeClass : Anotovaná metoda bude spuštěna před vyvoláním první testovací metody v aktuální třídě.
@AfterClass : Anotovaná metoda bude spuštěna po spuštění všech testovacích metod v aktuální třídě.
@BeforeMethod : Anotovaná metoda bude spuštěna před každou testovací metodou.
@AfterMethod : Anotovaná metoda bude spuštěna po každé testovací metodě.
@Test : Anotovaná metoda je součástí testovacího případu
Závěr
- TestNG je testovací rámec, který umožňuje snáze pochopit testy selenu a generovat snadno srozumitelné zprávy.
- Hlavní výhody TestNG oproti JUnit jsou následující.
- Poznámky jsou snadněji použitelné a srozumitelné.
- Testovací případy lze snáze seskupit.
- TestNG nám umožňuje vytvářet paralelní testy.
- Okno konzoly v Eclipse generuje textový výsledek, zatímco okno TestNG je užitečnější, protože nám poskytuje grafický výstup výsledku testu a další smysluplné podrobnosti, například:
- Runtime každé metody.
- Chronologické pořadí, ve kterém byly metody provedeny
- TestNG je schopen generovat zprávy založené na HTML.
- Anotace mohou používat parametry stejně jako obvyklé metody Java TestNG.
- TestNG Dataprovider je způsob, jak předat parametry do testovací funkce, která předává různé hodnoty v testovacích případech v jednom provedení.