TestNG Poradnik
โก Inteligentne podsumowanie
TestNG jest nastฤpnฤ generacjฤ Java framework testowy, ktรณry ลฤ czy siฤ z Selenium do ustrukturyzowanej automatyzacji, rozbudowanego raportowania i rรณwnolegลego wykonywania. Ten samouczek obejmuje podstawowe adnotacje, konfiguracjฤ projektu w Eclipse, pisanie pierwszego przypadku testowego, raportรณw HTML i zaawansowane wykorzystanie parametrรณw.

Czym jest TestNG?
TestNG jest platformฤ do automatyzacji testรณw, gdzie โNGโ oznacza โNext Generationโ (Nastฤpna Generacja). TestNG jest inspirowany JUnit i wykorzystuje Java adnotacje (@) do kontrolowania przepลywu testรณw. To przezwyciฤลผa JUnitwczeลniejsze ograniczenia i jest zaprojektowany tak, aby testy end-to-end ลatwiejsze.
Z TestNG Moลผesz wygenerowaฤ odpowiedni raport i natychmiast zobaczyฤ, ile testรณw zostaลo zaliczonych, niezaliczonych lub pominiฤtych. Moลผesz rรณwnieลผ ponownie uruchomiฤ tylko te przypadki, ktรณre zakoลczyลy siฤ niepowodzeniem.
Na przykลad:
- Zaลรณลผmy, ลผe masz piฤฤ przypadkรณw testowych, kaลผdy w swojej wลasnej metodzie, napisanych bez TestNG. Trzy przejลcia; czwarte koลczy siฤ niepowodzeniem. Po poprawieniu czwartego, chcesz ponownie uruchomiฤ tylko ten jeden, poniewaลผ pierwsze trzy juลผ przeszลy. Trudno to zrobiฤ za pomocฤ zwykลego kodu metody main().
- TestNG zapewnia
testng-failed.xmlPlik wtest-outputfolder. Uruchomienie tego pliku XML powoduje ponowne wykonanie tylko tych przypadkรณw, w ktรณrych wystฤ piล bลฤ d.
Poza tym poznasz zalety TestNG, jak pisaฤ metody testowe z adnotacjami @Test i jak konwertowaฤ klasy na zestaw testรณw, ktรณry bฤdzie uruchamiany z Eclipse lub wiersza poleceล.
Dlaczego warto korzystaฤ TestNG w Selenium?
Domyลlnie Selenium testy nie dajฤ ลadnie sformatowanych wynikรณw. TestNG Po podลฤ czeniu moduล uruchamiajฤ cy testy generuje ustrukturyzowany raport, ktรณrym moลผesz podzieliฤ siฤ z zespoลem.
Wiฤkszoลฤ Selenium uลผytkownicy wolฤ TestNG koniec JUnit ze wzglฤdu na szerszy zestaw funkcji. Kluczowe funkcje dla Selenium naleลผฤ :
- Raporty zawierajฤ ce liczbฤ przypadkรณw testowych uruchomionych, zaliczonych, niezaliczonych i pominiฤtych.
- ลatwa grupaping przypadkรณw testowych za poลrednictwem
testng.xmlplik z priorytetami wykonania. - Powtarzaj test wielokrotnie bez uลผycia pฤtli
invocationCount. - Przeprowadลบ wiele testรณw w wielu przeglฤ darkach โ miฤdzy przeglฤ darkamitestowanie przeglฤ darki Wsparcie.
- Pลynna integracja z Maven, Jenkinsi innych narzฤdzi CI.
- Readable adnotacje โ na przykลad @BeforeMethod, @AfterMethod, @BeforeTest, @AfterTest.
- Selenium WebDriver nie ma wbudowanego moduลu raportowania; TestNG wypeลnia tฤ lukฤ czystym raportem HTML, takim jak ten poniลผej.
- TestNG Upraszcza kod testowy. Nie potrzebujesz juลผ statycznej metody main; adnotacje decydujฤ , co i kiedy zostanie uruchomione.
- Nieprzechwycone wyjฤ tki sฤ obsลugiwane z gracjฤ przez TestNGSฤ one zgลaszane jako nieudane kroki bez przerywania caลego przebiegu.
Zalety TestNG koniec JUnit
TestNG oferuje trzy gลรณwne zalety w porรณwnaniu JUnit:
- Adnotacje sฤ ลatwiejsze do zrozumienia i uลผycia.
- Przypadki testowe moลผna grupowaฤ i ustalaฤ priorytety przy mniejszym wysiลku.
- Rรณwnolegลe wykonywanie testรณw jest obsลugiwane domyลlnie.
Czym jest adnotacja w TestNG?
Adnotacje w TestNG sฤ to wiersze kodu umieszczone nad metodฤ , kontrolujฤ ce sposรณb jej wykonania. Zawsze zaczynajฤ siฤ od symbolu @. Poniลผej znajduje siฤ prosty przykลad.
Adnotacje omรณwiono szczegรณลowo w sekcji โAdnotacje uลผywane w TestNG" pรณลบniej w tym samouczku, wiฤc powyลผszy przykลad ma jedynie na celu ustalenie oczekiwaล. TestNG adnotacje sฤ ลatwiejsze do kodowania i czytania niลผ JUnit odpowiedniki i sฤ one niezbฤdne podczas przeprowadzania testรณw na Selenium Krata gdzie rรณwnolegลe wykonywanie zadaล ma znaczenie.
Jak pisaฤ przypadki testowe w TestNG
Pisanie TestNG przypadek testowy skลada siฤ z trzech krokรณw:
- Napisz swojฤ logikฤ biznesowฤ i umieลฤ jฤ TestNG adnotacje nad kaลผdฤ metodฤ .
- Dodaj metadane, takie jak nazwa klasy, nazwa grupy i nazwa pakietu.
- Uruchom TestNG klasฤ ze swojego IDE lub wiersza poleceล.
Utwรณrz przypadek testowy za pomocฤ TestNG Adnotacje
Teraz utworzymy nasz pierwszy przypadek testowy, uลผywajฤ c TestNG adnotacje w Selenium. Przed napisaniem testu skonfiguruj nowy TestNG projekt w Eclipse i nazwij to ImiฤTestNGProjekt.
Konfigurowanie nowego TestNG Projekt
Krok 1) Kliknij Plik > Nowy > Java Projekt.
Krok 2) Wchodzฤ ImiฤTestNGProjekt jako nazwฤ projektu i kliknij Nastฤpna.
Krok 3) Importuj TestNG biblioteki. Kliknij biblioteki kartฤ, a nastฤpnie Dodaj bibliotekฤโฆ.
Krok 4) W Dodaj bibliotekฤ dialog, wybierz TestNG i kliknij Nastฤpna.
Krok 5) Kliknij Zakoลczyฤ.
TestNG powinien teraz pojawiฤ siฤ na liลcie bibliotek.
Krok 6) Dodaj pliki JAR zawierajฤ ce Selenium API. Pochodzฤ one z Java sterownik klienta pobrany z selenium.dev/downloads.
Przejdลบ do folderu, w ktรณrym znajduje siฤ Selenium Pliki JAR sฤ przechowywane.
Po dodaniu zewnฤtrznych plikรณw JAR ekran powinien wyglฤ daฤ nastฤpujฤ co.
Krok 7) Kliknij Zakoลczyฤ. Nowy ImiฤTestNGProjekt pojawia siฤ w Eksploratorze pakietรณw.
Jak stworzyฤ nowy TestNG Plik testowy
Po przygotowaniu projektu utwรณrz nowy TestNG plik.
Krok 1) Kliknij prawym przyciskiem myszy src folder i wybierz Nowe > Inneโฆ.
Krok 2) rozwiล TestNG wybierz folder TestNG klasai kliknij Nastฤpna.
Krok 3) Wprowadลบ wartoลci pokazane poniลผej i kliknij Zakoลczyฤ, Java plik ma nazwฤ ImiฤTestNGfilet.
Krok 4) Eclipse generuje TestNG szablon pokazany poniลผej.
Kodowanie Twojego pierwszego TestNG Przypadek testowy
Utwรณrz pierwszy walizka testowa ktรณry weryfikuje tytuล Mercury Strona gลรณwna wycieczek.
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();
}
}
Rzeczy, na ktรณre naleลผy zwrรณciฤ uwagฤ:
- TestNG nie potrzebuje
main()Metoda. - Metody nie muszฤ byฤ statyczne.
- @Test znaki adnotacji
verifyHomepageTitle()jako przypadek testowy. - Adnotacje sฤ
dostฤpne na ลผywo
org.testng.annotations.*pakiet. - Twierdziฤ klasa od
org.testng.Assertnapฤdza weryfikacje.
W jednej adnotacji @Test moลผe znajdowaฤ siฤ wiele adnotacji @Test TestNG Plik. Omรณwimy to w โAdnotacje uลผywane w TestNG"
Uruchamianie testu
Kliknij plik prawym przyciskiem myszy i uruchom go jako TestNG test. Eclipse generuje dwa wyniki โ wynik tekstowy w oknie konsoli i wynik graficzny w TestNG Okno wynikรณw.
Sprawdzanie raportรณw utworzonych przez TestNG
Okno konsoli zapewnia podsumowanie w formie tekstowej, podczas gdy TestNG Okno wynikรณw wyลwietla widok graficzny.
Generowanie raportรณw HTML
TestNG moลผe rรณwnieลผ generowaฤ peลne raporty HTML.
Krok 1) Po bieganiu ImiฤTestNGfilet, kliknij prawym przyciskiem myszy projekt i wybierz Odลwieลผ kod.
Krok 2) A wyjลcie testowe Pojawi siฤ folder. Rozwiล go i znajdลบ index.html โ raport HTML dla ostatniego uruchomienia.
Krok 3) Double-Kliknij index.html otworzyฤ to w ลrodku EclipsePrzeglฤ
darka. Naciลnij klawisz F5, aby odลwieลผyฤ po kolejnych uruchomieniach.
Adnotacje uลผywane w TestNG
Adnotacjฤ @Test juลผ widziaลeล. W dalszej czฤลci tej sekcji omรณwiono najbardziej przydatne, zaawansowane adnotacje.
Wiele przypadkรณw testowych
Pojedynczy TestNG Plik moลผe zawieraฤ wiele adnotacji @Test. Domyลlnie metody z adnotacjฤ
@Test sฤ
wykonywane w kolejnoลci alfabetycznej. W poniลผszym kodzie metody c_test, a_test, b_test wyลwietlane alfabetycznie, niezaleลผnie od kolejnoลci podanej w ลบrรณdle.
Uruchom kod i otwรณrz index.html. Kliknij Widok chronologiczny.
Parametry
Aby zastฤ
piฤ domyลlnฤ
kolejnoลฤ, uลผyj priority parametr. Parametry to sลowa kluczowe, ktรณre modyfikujฤ
zachowanie adnotacji.
- Przypisz wartoลฤ za pomocฤ
=. - Parametry naleลผy umieลciฤ w nawiasach umieszczonych bezpoลrednio za adnotacjฤ , jak pokazano poniลผej.
TestNG Wykonuje adnotacje @Test od najniลผszej wartoลci priorytetu do najwyลผszej. Numery priorytetรณw nie muszฤ nastฤpowaฤ po sobie.
Raport HTML potwierdza, ลผe โโmetody sฤ wykonywane w kolejnoลci rosnฤ cej wedลug priorytetu.
Wiele parametrรณw
Oprรณcz priority, @Test akceptuje alwaysRun parametr (prawda lub faลsz). Aby uลผyฤ dwรณch lub wiฤcej parametrรณw w jednej adnotacji, rozdziel je przecinkiem:
@Test(priority = 0, alwaysRun = true)
@PrzedTestem i @PoTestie
| @Przed testem | Metody w ramach tej adnotacji przed pierwszym przypadkiem testowym w TestNG filet. |
| @PoTest | Metody w ramach tej adnotacji po wszystkich przypadkach testowych w TestNG wykoลczenie pliku. |
Rozwaลผ poniลผszy kod.
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();
}
}
Na podstawie tabeli i kodu moลผemy przewidzieฤ, ลผe sekwencja bฤdzie wyglฤ daฤ nastฤpujฤ co:
- 1. โ
launchBrowser() - 2. โ
verifyHomepageTitle() - 3. โ
terminateBrowser()
Umiejscowienie blokรณw adnotacji w pliku ลบrรณdลowym nie ma wpลywu na kolejnoลฤ ich wykonywania. Sprรณbuj zmieniฤ metody, jak pokazano poniลผej.
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);
}
}
Uruchom kod i sprawdลบ wynik.
@BeforeMethod i @AfterMethod
| @Bez tytuลu | Metody w ramach tej adnotacji przed kaลผdฤ metodฤ testowฤ . |
| @Poradnik | Metody w ramach tej adnotacji po kaลผdej metodzie testowej. |
In Mercury Wycieczki, zaลรณลผmy, ลผe chcemy zweryfikowaฤ tytuลy dwรณch stron docelowych, do ktรณrych uzyskano dostฤp ze strony gลรณwnej.
Przebieg testu jest nastฤpujฤ cy:
- Otwรณrz stronฤ gลรณwnฤ i sprawdลบ jej tytuล.
- Kliknij ZAREJESTRUJ SIฤ i sprawdลบ tytuล strony docelowej.
- Wrรณฤ na stronฤ gลรณwnฤ i zweryfikuj tytuล.
- Kliknij WSPARCIE i sprawdลบ tytuล strony docelowej.
- Wrรณฤ na stronฤ gลรณwnฤ i ponownie zweryfikuj tytuล.
Poniลผszy kod pokazuje, jak @BeforeMethod i @AfterMethod obsลugujฤ powtarzajฤ ce siฤ kroki.
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 uruchomieniu testu, TestNG podaje sekwencjฤ poniลผej.
Krรณtko mรณwiฤ c: umieลฤ kroki instalacyjne wewnฤ trz @Bez tytuลu i czyszczenie lub resetowanie nawigacji w ลrodku @Poradnik wiฤc kaลผdy przypadek testowy zaczyna siฤ i koลczy w znanym stanie.
Podsumowanie TestNG Adnotacje
- @BeforeSuite: uruchamia siฤ przed wszystkimi testami w zestawie.
- @AfterSuite: uruchamia siฤ po wszystkich testach w pakiecie.
- @BeforeTest: uruchamia siฤ przed jakฤ kolwiek metodฤ testowฤ naleลผฤ cฤ do klas wewnฤ trz etykietka.
- @AfterTest: uruchamia siฤ po wszystkich metodach testowych naleลผฤ cych do klas wewnฤ trz etykietka.
- @BeforeGroups: uruchamia siฤ krรณtko przed pierwszฤ metodฤ testowฤ naleลผฤ cฤ do ktรณrejkolwiek z wymienionych grup.
- @AfterGroups: uruchamiana jest krรณtko po ostatniej metodzie testowej naleลผฤ cej do ktรณrejkolwiek z wymienionych grup.
- @BeforeClass: uruchamia siฤ przed pierwszฤ metodฤ testowฤ w bieลผฤ cej klasie.
- @AfterClass: uruchamia siฤ po wszystkich metodach testowych w bieลผฤ cej klasie.
- @BeforeMethod: uruchamia siฤ przed kaลผdฤ metodฤ testowฤ .
- @AfterMethod: uruchamia siฤ po kaลผdej metodzie testowej.
- @Test: oznacza metodฤ jako przypadek testowy.

































