TestNG konzultace
โก Chytrรฉ shrnutรญ
TestNG je novรก generace Java testovacรญ rรกmec, kterรฝ se spojuje s Selenium pro strukturovanou automatizaci, bohatรฉ reporty a paralelnรญ spouลกtฤnรญ. Tento tutoriรกl se zabรฝvรก zรกkladnรญmi anotacemi, nastavenรญm projektu v Eclipse, psanรญ prvnรญho testovacรญho pลรญpadu, HTML sestav a pokroฤilรฉ pouลพรญvรกnรญ parametrลฏ.

Co je to TestNG?
TestNG je framework pro automatizovanรฉ testovรกnรญ, kde โNGโ znamenรก โNext Generationโ (Nรกsledujรญcรญ generace). TestNG je inspirovรกn JUnit a pouลพitรญ Java anotace (@) pro ลรญzenรญ prลฏbฤhu testu. Pลekonรกvรก JUnitdลรญvฤjลกรญ omezenรญ a je navrลพen tak, aby end-to-end testovรกnรญ jednoduลกลกรญ.
S TestNG Mลฏลพete si vygenerovat sprรกvnou zprรกvu a okamลพitฤ vidฤt, kolik testลฏ probฤhlo รบspฤลกnฤ, neรบspฤลกnฤ nebo bylo pลeskoฤeno. Mลฏลพete takรฉ znovu spustit pouze neรบspฤลกnรฉ pลรญpady.
Napลรญklad:
- Pลedpoklรกdejme, ลพe mรกte pฤt testovacรญch pลรญpadลฏ, kaลพdรฝ s vlastnรญ metodou, napsanรฝch bez TestNGTลi projdou; ฤtvrtรฝ selลพe. Po opravฤ ฤtvrtรฉho chcete znovu spustit pouze ten, protoลพe prvnรญ tลi jiลพ proลกly. To je obtรญลพnรฉ provรฉst s pouhรฝm kรณdem metody main().
- TestNG poskytuje
testng-failed.xmlSoubor v souborutest-outputsloลพku. Spuลกtฤnรญ danรฉho XML znovu provede pouze neรบspฤลกnรฉ pลรญpady.
Kromฤ toho se dozvรญte vรฝhody TestNG, jak psรกt testovacรญ metody s anotacemi @Test a jak pลevรฉst tลรญdy do testovacรญ sady, kterรก bฤลพรญ z Eclipse nebo pลรญkazovรฝ ลรกdek.
Proฤ pouลพรญvat TestNG s Selenium?
Ve vรฝchozรญm nastavenรญ Selenium testy neprodukujรญ pฤknฤ formรกtovanรฉ vรฝsledky. S TestNG Po zapojenรญ testovacรญ program vygeneruje strukturovanou zprรกvu, kterou mลฏลพete sdรญlet s tรฝmem.
Vฤtลกina Selenium uลพivatelรฉ preferujรญ TestNG pลes JUnit kvลฏli ลกirลกรญ sadฤ funkcรญ. Klรญฤovรฉ funkce pro Selenium jsou:
- Zprรกvy, kterรฉ zahrnujรญ poฤet spuลกtฤnรฝch, รบspฤลกnรฝch, neรบspฤลกnรฝch a pลeskoฤenรฝch testovacรญch pลรญpadลฏ.
- Snadnรก skupinaping testovacรญch pลรญpadลฏ prostลednictvรญm
testng.xmlsoubor s prioritami provรกdฤnรญ. - Opakujte test nฤkolikrรกt bez smyฤek pomocรญ
invocationCount. - Spusลฅte vรญce testลฏ na vรญce prohlรญลพeฤรญch โ napลรญฤtestovรกnรญ prohlรญลพeฤe podporu.
- Hladkรก integrace s Mavenem, Jenkinsa dalลกรญ nรกstroje pro CI.
- Readable anotace โ napลรญklad @BeforeMethod, @AfterMethod, @BeforeTest, @AfterTest.
- Selenium WebDriver nemรก nativnรญ reporting; TestNG vyplnรญ tuto mezeru ฤistou HTML sestavou, jako je ta nรญลพe.
- TestNG zjednoduลกuje testovacรญ kรณd. Uลพ nepotลebujete statickou metodu main; anotace rozhodujรญ o tom, co se spustรญ a kdy.
- Nezachycenรฉ vรฝjimky jsou elegantnฤ zpracovรกny pomocรญ TestNGJsou hlรกลกeny jako neรบspฤลกnรฉ kroky bez ukonฤenรญ celรฉho bฤhu.
vรฝhody TestNG pลes JUnit
TestNG nabรญzรญ tลi hlavnรญ vรฝhody oproti JUnit:
- Anotace jsou snรกze pochopitelnรฉ a pouลพitelnรฉ.
- Testovacรญ pลรญpady lze seskupovat a prioritizovat s menลกรญm รบsilรญm.
- Paralelnรญ provรกdฤnรญ testลฏ je podporovรกno ihned po vybalenรญ.
Co je to anotace v TestNG?
Anotace v TestNG jsou ลรกdky kรณdu umรญstฤnรฉ nad metodou, kterรฉ ลรญdรญ, jak se metoda provรกdรญ. Vลพdy zaฤรญnajรญ symbolem @. Jednoduchรฝ pลรญklad je uveden nรญลพe.
Anotace jsou podrobnฤ popsรกny v sekci โPouลพitรฉ anotace v TestNG" dรกle v tomto tutoriรกlu, takลพe vรฝลกe uvedenรฝ pลรญklad slouลพรญ pouze k nastavenรญ oฤekรกvรกnรญ. TestNG Anotace se snรกze kรณdujรญ a ฤitelnฤ dฤlajรญ neลพ JUnit ekvivalenty a jsou nezbytnรฉ pลi provรกdฤnรญ testลฏ na Selenium Mลรญลพka kde je dลฏleลพitรฉ paralelnรญ provรกdฤnรญ.
Jak psรกt testovacรญ pลรญpady v TestNG
Psanรญ a TestNG Testovacรญ pลรญpad probรญhรก ve tลech krocรญch:
- Napiลกte svou obchodnรญ logiku a umรญstฤte ji TestNG anotace nad kaลพdou metodou.
- Pลidejte metadata, jako je nรกzev tลรญdy, nรกzev skupiny a nรกzev balรญฤku.
- Spusลฅte TestNG tลรญdu z vaลกeho IDE nebo z pลรญkazovรฉho ลรกdku.
Vytvoลte testovacรญ pลรญpad pomocรญ TestNG Anotace
Nynรญ vytvoลรญme nรกลก prvnรญ testovacรญ pลรญpad pomocรญ TestNG anotace v SeleniumPลed psanรญm testu si pลipravte novรฝ TestNG projekt v Eclipse a zavolej to JmรฉnoTestNGProjekt.
Nastavenรญ novรฉho TestNG Projekt
Krok 1) kliknฤte Soubor > Novรฝ > Java Projekt.
Krok 2) vstoupit JmรฉnoTestNGProjekt jako nรกzev projektu a kliknฤte dalลกรญ.
Krok 3) Importujte TestNG knihovny. Kliknฤte na knihovny a potom Pลidat knihovnuโฆ.
Krok 4) v Pลidat knihovnu dialog, zvolte TestNG a klepnฤte na tlaฤรญtko dalลกรญ.
Krok 5) kliknฤte รบprava.
TestNG by se nynรญ mฤlo zobrazit v seznamu knihoven.
Krok 6) Pลidejte soubory JAR, kterรฉ obsahujรญ Selenium API. Tyto pochรกzejรญ z Java ovladaฤ klienta staลพenรฝ z selenium.dev/ke staลพenรญ.
Pลejdฤte do sloลพky, kde se Selenium JAR soubory jsou uloลพeny.
Po pลidรกnรญ externรญch JAR souborลฏ by obrazovka mฤla vypadat takto.
Krok 7) kliknฤte รบprava. Novรฝ JmรฉnoTestNGProjekt zobrazรญ se v Prลฏzkumnรญku balรญฤkลฏ.
Jak vytvoลit novรฝ TestNG Testovacรญ soubor
S pลipravenรฝm projektem vytvoลte novรฝ TestNG soubor.
Krok 1) Klepnฤte pravรฝm tlaฤรญtkem myลกi na ikonu src sloลพky a zvolte Novรฉ > Ostatnรญโฆ.
Krok 2) Rozbalte TestNG vyberte sloลพku TestNG tลรญda, a klepnฤte na tlaฤรญtko dalลกรญ.
Krok 3) Zadejte nรญลพe uvedenรฉ hodnoty a kliknฤte na รบprava, Java soubor je pojmenovรกn JmรฉnoTestNGSoubor.
Krok 4) Eclipse generuje TestNG ลกablona uvedenรก nรญลพe.
Kรณdovรกnรญ vaลกeho prvnรญho TestNG Testovacรญ pลรญpad
Vytvoลte prvnรญ modelovรฝ pลรญpad kterรฝ ovฤลuje nรกzev Mercury Domovskรก strรกnka prohlรญdek.
package firsttestngpackage;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.Assert;
import org.testng.annotations.Test;
public class FirstTestNGFile {
public String baseUrl = "https://demo.guru99.com/test/newtours/";
public WebDriver driver;
@Test
public void verifyHomepageTitle() {
System.out.println("launching firefox browser");
// Selenium 4 ships Selenium Manager, so the driver path is no longer required.
driver = new FirefoxDriver();
driver.get(baseUrl);
String expectedTitle = "Welcome: Mercury Tours";
String actualTitle = driver.getTitle();
Assert.assertEquals(actualTitle, expectedTitle);
driver.quit();
}
}
Vฤci, kterรฝch je tลeba si vลกimnout:
- TestNG nepotลebuje
main()metoda. - Metody nemusรญ bรฝt statickรฉ.
- Jedno @Test anotaฤnรญ znaฤky
verifyHomepageTitle()jako testovacรญ pลรญpad. - Anotace jsou k dispozici v
org.testng.annotations.*balรญฤek. - Jedno Tvrdit tลรญda z
org.testng.Assertvede k ovฤลovรกnรญ.
V jednom souboru mลฏลพete mรญt vรญce anotacรญ @Test. TestNG souboru. Tomu se vฤnujeme v โPouลพitรฉ anotace v TestNG" sekce.
Spuลกtฤnรญ testu
Kliknฤte pravรฝm tlaฤรญtkem myลกi na soubor a spusลฅte jej jako TestNG test. Eclipse vygeneruje dva vรฝstupy โ textovรฝ vรฝsledek v oknฤ konzole a grafickรฝ vรฝsledek v TestNG Okno vรฝsledkลฏ.
Kontrola sestav vytvoลenรฝch uลพivatelem TestNG
Okno konzole poskytuje textovรฝ souhrn, zatรญmco TestNG Okno s vรฝsledky zobrazuje grafickรฉ zobrazenรญ.
Generovรกnรญ HTML zprรกv
TestNG mลฏลพe takรฉ generovat kompletnรญ HTML reporty.
Krok 1) Po spuลกtฤnรญ JmรฉnoTestNGSoubor, kliknฤte pravรฝm tlaฤรญtkem myลกi na projekt a vyberte Obnovit.
Krok 2) A testovacรญ vรฝstup Zobrazรญ se sloลพka. Rozbalte ji a vyhledejte index.html โ HTML sestava pro poslednรญ spuลกtฤnรญ.
Krok 3) Double-kliknฤte index.html otevลรญt to uvnitล EclipseProhlรญลพeฤ . Stisknutรญm klรกvesy F5 jej po dalลกรญch spuลกtฤnรญch obnovรญte.
Anotace pouลพitรฉ v TestNG
Anotaci @Test jste jiลพ vidฤli. Zbytek tรฉto ฤรกsti se zabรฝvรก nejuลพiteฤnฤjลกรญmi pokroฤilรฝmi anotacemi.
Vรญce testovacรญch pลรญpadลฏ
Single TestNG Soubor mลฏลพe obsahovat vรญce anotacรญ @Test. Ve vรฝchozรญm nastavenรญ se metody anotovanรฉ pomocรญ @Test provรกdฤjรญ v abecednรญm poลadรญ. V nรญลพe uvedenรฉm kรณdu metody c_test, a_test, a b_test spouลกtฤt abecednฤ bez ohledu na poลadรญ zdrojลฏ.
Spusลฅte kรณd a otevลete index.html, kliknฤte Chronologickรฝ pohled.
parametry
Chcete-li pลepsat vรฝchozรญ poลadรญ, pouลพijte priority parametr. Parametry jsou klรญฤovรก slova, kterรก upravujรญ chovรกnรญ anotace.
- Pลiลaฤte hodnotu pomocรญ
=. - Parametry zalomte do zรกvorek umรญstฤnรฝch bezprostลednฤ za anotacรญ, jak je znรกzornฤno nรญลพe.
TestNG Provรกdรญ anotace @Test od nejniลพลกรญ hodnoty priority po nejvyลกลกรญ. ฤรญsla priorit nemusรญ jรญt za sebou.
Zprรกva HTML potvrzuje, ลพe metody byly spuลกtฤny ve vzestupnรฉm poลadรญ priority.
Vรญce parametrลฏ
Kromฤ priority, @Test akceptuje alwaysRun parametr (true nebo false). Chcete-li v jednรฉ anotaci pouลพรญt dva nebo vรญce parametrลฏ, oddฤlte je ฤรกrkou:
@Test(priority = 0, alwaysRun = true)
@BeforeTest a @AfterTest
| @Pลed testem | Metody pod touto anotacรญ bฤลพรญ pลed prvnรญm testovacรญm pลรญpadem v TestNG soubor. |
| @Po testu | Metody pod touto anotacรญ bฤลพรญ po vลกech testovacรญch pลรญpadech v TestNG dokonฤenรญ souboru. |
Zvaลพte nรญลพe uvedenรฝ kรณd.
package firsttestngpackage;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.Assert;
import org.testng.annotations.*;
public class FirstTestNGFile {
public String baseUrl = "https://demo.guru99.com/test/newtours/";
public WebDriver driver;
@BeforeTest
public void launchBrowser() {
System.out.println("launching firefox browser");
driver = new FirefoxDriver();
driver.get(baseUrl);
}
@Test
public void verifyHomepageTitle() {
String expectedTitle = "Welcome: Mercury Tours";
String actualTitle = driver.getTitle();
Assert.assertEquals(actualTitle, expectedTitle);
}
@AfterTest
public void terminateBrowser() {
driver.quit();
}
}
Z tabulky a kรณdu mลฏลพeme pลedpovฤdฤt, ลพe sekvence bude:
- 1. โ
launchBrowser() - 2. โ
verifyHomepageTitle() - 3. โ
terminateBrowser()
Umรญstฤnรญ anotaฤnรญch blokลฏ ve zdrojovรฉm souboru neovlivลuje poลadรญ jejich provรกdฤnรญ. Zkuste metody pลeskupit, jak je uvedeno nรญลพe.
package firsttestngpackage;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.Assert;
import org.testng.annotations.*;
public class FirstTestNGFile {
public String baseUrl = "https://demo.guru99.com/test/newtours/";
public WebDriver driver;
@AfterTest // Jumbled
public void terminateBrowser() {
driver.quit();
}
@BeforeTest // Jumbled
public void launchBrowser() {
System.out.println("launching firefox browser");
driver = new FirefoxDriver();
driver.get(baseUrl);
}
@Test // Jumbled
public void verifyHomepageTitle() {
String expectedTitle = "Welcome: Mercury Tours";
String actualTitle = driver.getTitle();
Assert.assertEquals(actualTitle, expectedTitle);
}
}
Spusลฅte kรณd a ovฤลte vรฝsledek.
@BeforeMethod a @AfterMethod
| @BeforeMethod | Metody pod touto anotacรญ bฤลพรญ pลed kaลพdou zkuลกebnรญ metodou. |
| @AfterMethod | Metody pod touto anotacรญ bฤลพรญ po kaลพdรฉ zkuลกebnรญ metodฤ. |
In Mercury Pลedpoklรกdejme, ลพe chceme ovฤลit nรกzvy dvou cรญlovรฝch strรกnek, na kterรฉ se dostanete z domovskรฉ strรกnky.
Prลฏbฤh testu je:
- Otevลete domovskou strรกnku a ovฤลte jejรญ nรกzev.
- Kliknฤte na REGISTROVAT a ovฤลte nรกzev cรญlovรฉ strรกnky.
- Vraลฅte se na domovskou strรกnku a ovฤลte nรกzev.
- Kliknฤte na PODPORA a ovฤลte nรกzev cรญlovรฉ strรกnky.
- Vraลฅte se na domovskou strรกnku a znovu ovฤลte nรกzev.
Nรญลพe uvedenรฝ kรณd ukazuje, jak @BeforeMethod a @AfterMethod zpracovรกvajรญ opakovanรฉ kroky.
package firsttestngpackage;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.Assert;
import org.testng.annotations.*;
public class FirstTestNGFile {
public String baseUrl = "https://demo.guru99.com/test/newtours/";
public WebDriver driver;
public String expected = null;
public String actual = null;
@BeforeTest
public void launchBrowser() {
System.out.println("launching firefox browser");
driver = new FirefoxDriver();
driver.get(baseUrl);
}
@BeforeMethod
public void verifyHomepageTitle() {
String expectedTitle = "Welcome: Mercury Tours";
String actualTitle = driver.getTitle();
Assert.assertEquals(actualTitle, expectedTitle);
}
@Test(priority = 0)
public void register() {
driver.findElement(By.linkText("REGISTER")).click();
expected = "Register: Mercury Tours";
actual = driver.getTitle();
Assert.assertEquals(actual, expected);
}
@Test(priority = 1)
public void support() {
driver.findElement(By.linkText("SUPPORT")).click();
expected = "Under Construction: Mercury Tours";
actual = driver.getTitle();
Assert.assertEquals(actual, expected);
}
@AfterMethod
public void goBackToHomepage() {
driver.findElement(By.linkText("Home")).click();
}
@AfterTest
public void terminateBrowser() {
driver.quit();
}
}
Po spuลกtฤnรญ testu, TestNG uvรกdรญ nรญลพe uvedenou sekvenci.
Struฤnฤ ลeฤeno: umรญstฤte kroky instalace dovnitล @BeforeMethod a vyฤiลกtฤnรญ nebo resetovรกnรญ navigace uvnitล @AfterMethod takลพe kaลพdรฝ testovacรญ pลรญpad zaฤรญnรก a konฤรญ ve znรกmรฉm stavu.
Shrnutรญ TestNG Anotace
- @PลedSuite: spustรญ se pลed vลกemi testy v sadฤ.
- @AfterSuite: spustรญ se po vลกech testech v sadฤ.
- @PลedTestem: spustรญ se pลed jakoukoli testovacรญ metodou patลรญcรญ do tลรญd uvnitล ลกtรญtek.
- @PoTestu: spustรญ se po vลกech testovacรญch metodรกch patลรญcรญch do tลรญd uvnitล ลกtรญtek.
- @PลedGroups: spustรญ se krรกtce pลed prvnรญ testovacรญ metodou, kterรก patลรญ do jakรฉkoli uvedenรฉ skupiny.
- @AfterGroups: spustรญ se krรกtce po poslednรญ testovacรญ metodฤ, kterรก patลรญ do jakรฉkoli uvedenรฉ skupiny.
- @PลedTลรญdou: spustรญ se pลed prvnรญ testovacรญ metodou v aktuรกlnรญ tลรญdฤ.
- @AfterClass: spustรญ se po vลกech testovacรญch metodรกch v aktuรกlnรญ tลรญdฤ.
- @PลedMetodou: spustรญ se pลed kaลพdou testovacรญ metodou.
- @AfterMethod: spustรญ se po kaลพdรฉ testovacรญ metodฤ.
- @Test: oznaฤรญ metodu jako testovacรญ pลรญpad.

































