TestNG Samouczek: Czym są adnotacje i struktura w Selenium
Czym jest TestNG?
TestNG to framework do testów automatycznych, w którym NG oznacza „Next Generation”. TestNG jest inspirowany JUnit który używa adnotacji (@). TestNG pokonuje wady JUnit i jest przeznaczony do wykonywania testy end-to-end łatwe.
Korzystanie z TestNG, możesz wygenerować odpowiedni raport i łatwo dowiedzieć się, ile przypadków testowych zostało zaliczonych, nieudanych lub pominiętych. Nieudane przypadki testowe można wykonać osobno.
Na przykład:
- Załóżmy, że masz pięć przypadków testowych, jedna metoda jest napisana dla każdego przypadku testowego (Załóżmy, że program jest napisany przy użyciu metody main bez użycia testNG). Kiedy uruchamiasz ten program jako pierwszy, trzy metody są wykonywane pomyślnie, a czwarta metoda kończy się niepowodzeniem. Następnie popraw błędy obecne w czwartej metodzie, teraz chcesz uruchomić tylko czwartą metodę, ponieważ pierwsze trzy metody są w każdym razie wykonywane pomyślnie. Nie jest to możliwe bez użycia TestNG.
- TestNG in Selenium zapewnia opcję, tj. plik testng-failed.xml w folderze test-output. Jeśli chcesz uruchomić tylko nieudane przypadki testowe, oznacza to, że uruchamiasz ten plik XML. Wykona on tylko nieudane przypadki testowe.
Oprócz powyższej koncepcji dowiesz się więcej na temat TestNG, jakie są zalety TestNGJak tworzyć metody testowe za pomocą adnotacji @test, jak konwertować te klasy do pliku zestawu testowego i wykonywać je zarówno za pomocą środowiska Eclipse, jak i z wiersza poleceń.
Dlaczego warto korzystać TestNG w Selenium?
Domyślnie Selenium testy nie generują odpowiedniego formatu wyników testów. Za pomocą TestNG in Selenium, możemy wygenerować wyniki testu.
Większość Selenium użytkownicy używają tego częściej niż Junita ze względu na swoje zalety. Jest tak wiele funkcji TestNG, ale skupimy się tylko na tych najważniejszych, w których możemy skorzystać SeleniumPoniżej przedstawiono kluczowe cechy Selenium TestNG:
- Wygeneruj raport w odpowiednim formacie, zawierający liczbę przebiegów przypadków testowych, liczbę przypadków testowych zakończonych sukcesem, liczbę przypadków testowych zakończonych niepowodzeniem oraz liczbę przypadków testowych pominiętych.
- Wiele przypadków testowych można łatwiej grupować, konwertując je do pliku testng.xml. W pliku tym można określić priorytety, które przypadki testowe powinny zostać wykonane jako pierwsze.
- Ten sam przypadek testowy można wykonać wiele razy bez pętli, po prostu używając słowa kluczowego o nazwie „liczba wywołań”.
- Za pomocą polecenia testng można wykonywać wiele przypadków testowych w wielu przeglądarkach, tj. testowanie przeglądarki.
- TestNG Framework można łatwo zintegrować z narzędziami takimi jak TestNG Mavena, Jenkinsa i innych.
- Adnotacje używane w testach są bardzo łatwe do zrozumienia, np.: @BeforeMethod, @AfterMethod, @BeforeTest, @AfterTest
- WebDriver nie posiada natywnego mechanizmu generowania raportów. TestNG może wygenerować raport w czytelnym formacie, takim jak pokazany poniżej.
- TestNG upraszcza sposób kodowania testów. W naszych testach nie ma już potrzeby stosowania statycznej metody głównej. Kolejność działań regulują łatwe do zrozumienia adnotacje, które nie wymagają, aby metody były statyczne.
- Nieprzechwycone wyjątki są obsługiwane automatycznie przez TestNG bez przedwczesnego kończenia testu. Te wyjątki są zgłaszane w raporcie jako kroki zakończone niepowodzeniem.
Zalety TestNG koniec JUnit
Istnieją trzy główne zalety TestNG koniec JUnit:
- Adnotacje są łatwiejsze do zrozumienia
- Przypadki testowe można łatwiej grupować
- Możliwe jest testowanie równoległe
Co to jest adnotacja w TestNG?
Adnotacje w TestNG to linie kodu, które mogą kontrolować sposób wykonania poniższej metody. Są one zawsze poprzedzone symbolem @. Bardzo wczesny i szybki TestNG Przykładem jest ten pokazany poniżej.
Adnotacje zostaną omówione później w sekcji zatytułowanej „Adnotacje używane w TestNG”, więc nie ma problemu, jeśli nie rozumiesz powyższego TestNG Przykład jeszcze. Na razie należy tylko zauważyć, że adnotacje w TestNG są łatwiejsze do kodowania i zrozumienia niż w JUnit.
Możliwość równoległego uruchamiania testów jest dostępna w TestNG ale nie w JUnit, Tak TestNG Framework jest bardziej preferowany dla testerów używających Selenium Krata.
Jak pisać przypadki testowe w TestNG?
Krok 1) Napisz logikę biznesową i wstaw plik TestNG adnotacje w swoim kodzie.
Krok 2) Dodaj więcej informacji, takich jak nazwa klasy, nazwa grupy, nazwa pakietu itp
Krok 3) Uruchom TestNG.
Utwórz przypadek testowy za pomocą TestNG Adnotacje
Teraz nauczymy się, jak stworzyć nasz pierwszy przypadek testowy za pomocą TestNG Adnotacje w Selenium:
Zanim utworzymy przypadek testowy, powinniśmy najpierw skonfigurować nowy TestNG Projekt w Eclipse i nazwij go jako „PierwszyTestNGProjekt".
Utworzenie nowego TestNG Projekt
Krok 1: Kliknij opcję Plik > Nowy > Java Projekt
Krok 2: Wpisz „Po pierwszeTestNGProject” jako nazwę projektu, a następnie kliknij Dalej.
Krok 3: Teraz zaczniemy importować plik TestNG Biblioteki do naszego projektu. Kliknij zakładkę „Biblioteki”, a następnie „Dodaj bibliotekę…”
Krok 4: W oknie dialogowym Dodaj bibliotekę wybierz „TestNG” i kliknij Dalej.
Krok 5: Kliknij Zakończ.
Powinieneś to zauważyć TestNG znajduje się na liście bibliotek.
Krok 6: Dodamy teraz pliki JAR zawierające plik Selenium API. Pliki te znajdują się w Java sterownik klienta, z którego pobraliśmy https://www.selenium.dev/downloads/ kiedy instalowaliśmy Selenium oraz Eclipse w poprzednich rozdziałach.
Następnie przejdź do miejsca, w którym umieściłeś plik Selenium pliki JAR.
Po dodaniu zewnętrznych plików JAR Twój ekran powinien wyglądać tak.
Krok 7: Kliknij Zakończ i sprawdź, czy nasz plik FirstTestNGProjekt widoczny na EclipseOkno Eksploratora pakietów.
Jak stworzyć nowy TestNG Plik testowy
Teraz, gdy skończyliśmy konfigurowanie naszego projektu w this TestNG samouczek, utwórzmy nowy TestNG plik.
Krok 1: Kliknij „src” i wybierz inny.
Kliknij prawym przyciskiem myszy folder pakietu „src”, a następnie wybierz Nowy > Inne…
Krok 2: Wybierz TestNG class.
Kliknij na TestNG folderze i wybierz „TestNG opcja „klasa”. Kliknij Następny.
Krok 3: Wpisz wartości.
Wpisz wartości wskazane poniżej w odpowiednich polach wprowadzania i kliknij Zakończ. Zauważ, że nazwaliśmy nasze Java plik jako „FirstTestNGPlik".
Krok 4: Szablon został utworzony.
Eclipse powinien automatycznie utworzyć szablon dla naszego TestNG plik pokazany poniżej.
Kodowanie naszego pierwszego TestNG Przykład przypadku testowego
Stwórzmy teraz nasz pierwszy Przypadek testowy to sprawdzi, czy Mercury Strona główna wycieczek jest poprawna. Wpisz swój kod, jak pokazano poniżej TestNG Przykład:
package 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 = "https://demo.guru99.com/test/newtours/"; String driverPath = "C:\\geckodriver.exe"; public WebDriver driver ; @Test public void verifyHomepageTitle() { System.out.println("launching firefox browser"); System.setProperty("webdriver.gecko.driver", driverPath); driver = new FirefoxDriver(); driver.get(baseUrl); String expectedTitle = "Welcome: Mercury Tours"; String actualTitle = driver.getTitle(); Assert.assertEquals(actualTitle, expectedTitle); driver.close(); } }
Zwróć uwagę na następujące kwestie.
- TestNG nie wymaga posiadania metody main().
- Metody nie muszą być statyczne.
- Użyliśmy adnotacji @Test. @Test służy do informowania, że metoda pod nim jest przypadkiem testowym. W tym przypadku ustawiliśmy metodę VerHomepageTitle() jako nasz przypadek testowy, dlatego umieściliśmy nad nią adnotację „@Test”.
- Ponieważ używamy adnotacji w TestNG, musieliśmy zaimportować pakiet org.testng.annotations.*.
- Użyliśmy klasy Assert. Klasa Assert służy do przeprowadzania operacji weryfikacyjnych w TestNGAby go użyć, musimy zaimportować pakiet org.testng.Assert.
Możesz mieć wiele przypadków testowych (a zatem wiele adnotacji @Test) w jednym TestNG pliku. Zostanie to omówione bardziej szczegółowo później w sekcji „Adnotacje używane w TestNG".
Uruchamianie testu
Aby uruchomić test, po prostu uruchom plik Eclipse jak zwykle. Eclipse zapewni dwa wyjścia – jedno w oknie Konsoli, a drugie w TestNG Okno wyników.
Sprawdzanie raportów utworzonych przez TestNG
Okno konsoli w Eclipse wyświetla raport tekstowy z wynikami naszego przypadku testowego, podczas gdy plik TestNG Okno wyników daje nam okno graficzne.
Generowanie raportów HTML
TestNG posiada możliwość generowania raportów w formacie HTML.
Krok 1: Po uruchomieniu naszego FirstTestNGPlik, który utworzyliśmy w poprzedniej sekcji, kliknij prawym przyciskiem myszy nazwę projektu (FirstTestNGProject) w oknie Eksploratora projektu, a następnie kliknij opcję „Odśwież”.
Krok 2: Zauważ, że został utworzony folder „test-output”. Rozwiń go i poszukaj pliku Index.html. Ten plik HTML stanowi raport z wynikami ostatniego przebiegu testowego.
Krok 3: Double-kliknij plik Index.html, aby go otworzyć Eclipsewbudowaną przeglądarkę internetową. Możesz odświeżyć tę stronę w dowolnym momencie po ponownym uruchomieniu testu, naciskając klawisz F5, tak jak w zwykłych przeglądarkach internetowych.
Adnotacje użyte w TestNG
W poprzedniej sekcji zapoznałeś się z adnotacją @Test. Teraz będziemy studiować bardziej zaawansowane adnotacje i ich zastosowania.
Wiele przypadków testowych
Możemy użyć wielu adnotacji @Test w jednym TestNG plik. Domyślnie metody oznaczone @Test są wykonywane w kolejności alfabetycznej. Zobacz poniższy kod. Chociaż metody c_test, a_test i b_test nie są ułożone w kodzie alfabetycznie, zostaną wykonane jako takie.
Uruchom ten kod i na wygenerowanej stronie Index.html kliknij „Widok chronologiczny”.
Parametry
Jeśli chcesz, aby metody były wykonywane w innej kolejności, użyj parametru „priorytet”. Parametry to słowa kluczowe modyfikujące funkcję adnotacji.
- Parametry wymagają przypisania im wartości. Robisz to umieszczając obok nich znak „=”, a następnie wartość.
- Parametry są ujęte w parę nawiasów, które są umieszczane zaraz po adnotacji, tak jak pokazano poniżej.
TestNG wykona adnotację @Test o najniższej wartości priorytetu aż do największej. Nie ma potrzeby, aby wartości priorytetów były kolejne.
TestNG Raport HTML potwierdzi, że metody zostały wykonane w oparciu o rosnącą wartość priorytetu.
Wiele parametrów
Oprócz „priorytetu” @Test ma inny parametr o nazwie „alwaysRun”, który można ustawić tylko na „true” lub „false”. Aby użyć dwóch lub więcej parametrów w jednej adnotacji, oddziel je przecinkiem taki jak ten pokazany poniżej.
@Test(priority = 0, alwaysRun = true)
@PrzedTestem i @PoTestie
@Przed testem | metody objęte tą adnotacją zostaną wykonane przed pierwszym przypadkiem testowym w TestNG filet. |
@PoTest | metody objęte tą adnotacją zostaną wykonane po wszystkich przypadkach testowych w TestNG plik są wykonywane. |
Rozważ poniższy kod.
package 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 = "https://demo.guru99.com/test/newtours/"; String driverPath = "C:\\geckodriver.exe"; public WebDriver driver ; @BeforeTest public void launchBrowser() { System.out.println("launching firefox browser"); System.setProperty("webdriver.gecko.driver", driverPath); 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.close(); } }
Stosując logikę przedstawioną w tabeli i powyższym kodzie, możemy przewidzieć, że kolejność wykonywania metod będzie następująca:
- 1st – uruchom przeglądarkę()
- 2nd – zweryfikuj tytuł strony głównej()
- 3rd – zakończ przeglądarkę()
Umiejscowienie bloków adnotacji można zmieniać bez wpływu na porządek chronologiczny ich wykonywania. Rozumiemy się z TestNG Przykład i spróbuj zmienić układ bloków adnotacji tak, aby Twój kod wyglądał podobnie do poniższego.
package 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 = "https://demo.guru99.com/test/newtours/"; String driverPath = "C:\\geckodriver.exe"; public WebDriver driver ; @AfterTest //Jumbled public void terminateBrowser(){ driver.close(); } @BeforeTest //Jumbled public void launchBrowser() { System.out.println("launching firefox browser"); System.setProperty("webdriver.gecko.driver", driverPath); 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 powyższy kod i zwróć na to uwagę
@BeforeMethod i @AfterMethod
@Bez tytułu | metody objęte tą adnotacją zostaną wykonane przed każdą metodą w każdym przypadku testowym. |
@Poradnik | metody objęte tą adnotacją zostaną wykonane po każdej metodzie w każdym przypadku testowym. |
In Mercury Wycieczki, załóżmy, że chcemy zweryfikować tytuły stron docelowych dwóch linków poniżej.
Przebieg naszego testu byłby następujący:
- Przejdź do strony głównej i sprawdź jej tytuł.
- Kliknij ZAREJESTRUJ SIĘ i sprawdź tytuł strony docelowej.
- Wróć do strony głównej i sprawdź, czy nadal ma ona poprawny tytuł.
- Kliknij WSPARCIE i sprawdź tytuł strony docelowej.
- Wróć do strony głównej i sprawdź, czy nadal ma ona poprawny tytuł.
Poniższy kod ilustruje sposób użycia @BeforeMethod i @AfterMethod do wydajnego wykonania powyższego scenariusza.
package firsttestngpackage; import org.openqa.selenium.*; 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/"; String driverPath = "C:\\geckodriver.exe"; public WebDriver driver; public String expected = null; public String actual = null; @BeforeTest public void launchBrowser() { System.out.println("launching firefox browser"); System.setProperty("webdriver.gecko.driver", driverPath); 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.close(); } }
Po wykonaniu tego testu, Twój TestNG powinien zgłosić następującą sekwencję.
Mówiąc najprościej, @BeforeMethod powinien zawierać metody, które należy uruchomić zanim każdy przypadek testowy, podczas gdy @AfterMethod powinien zawierać metody, które należy uruchomić po każdy przypadek testowy.
Podsumowanie TestNG Adnotacje
@Bezpieczeństwo: Metoda z adnotacjami zostanie uruchomiona przed uruchomieniem wszystkich testów w tym pakiecie.
@AfterSuite: Metoda z adnotacjami zostanie uruchomiona po uruchomieniu wszystkich testów w tym pakiecie.
@Przed testem: Metoda z adnotacjami zostanie uruchomiona przed uruchomieniem jakiejkolwiek metody testowej należącej do klas wewnątrz znacznika.
@PoTest: Metoda z adnotacjami zostanie uruchomiona po uruchomieniu wszystkich metod testowych należących do klas wewnątrz znacznika.
@PrzedGrupami: Lista grup, dla których ta metoda konfiguracji będzie wcześniej uruchamiana. Gwarantujemy, że ta metoda zostanie uruchomiona na krótko przed wywołaniem pierwszej metody testowej należącej do którejkolwiek z tych grup.
@PoGrupy: Lista grup, po których zostanie uruchomiona ta metoda konfiguracji. Gwarantujemy, że ta metoda zostanie uruchomiona wkrótce po wywołaniu ostatniej metody testowej należącej do którejkolwiek z tych grup.
@Przed zajęciami: Metoda z adnotacjami zostanie uruchomiona przed wywołaniem pierwszej metody testowej w bieżącej klasie.
@Po zajęciach: Metoda z adnotacjami zostanie uruchomiona po uruchomieniu wszystkich metod testowych w bieżącej klasie.
@Bez tytułu: Metoda z adnotacjami zostanie uruchomiona przed każdą metodą testową.
@Poradnik: Metoda z adnotacjami zostanie uruchomiona po każdej metodzie testowej.
@Test: Metoda z adnotacjami jest częścią przypadku testowego
Podsumowanie
- TestNG jest testowanie ramy, które jest w stanie stworzyć Selenium łatwiejsze do zrozumienia testy i generowanie łatwych do zrozumienia raportów.
- Główne zalety TestNG koniec JUnit są następujące.
- Adnotacje są łatwiejsze w użyciu i zrozumiałe.
- Przypadki testowe można łatwiej grupować.
- TestNG pozwala nam tworzyć testy równoległe.
- Okno konsoli w Eclipse generuje wynik tekstowy, podczas gdy TestNG Okno jest bardziej przydatne, ponieważ wyświetla nam w formie graficznej wynik testu oraz inne istotne szczegóły, takie jak:
- Czasy wykonania każdej metody.
- Porządek chronologiczny, według którego metody zostały wykonane
- TestNG potrafi generować raporty w formacie HTML.
- Adnotacje mogą używać parametrów tak jak zwykle Java TestNG Metody.
- TestNG Dostawca danych to sposób przekazywania parametrów do funkcji testowej, która przekazuje różne wartości w przypadkach testowych w jednym wykonaniu.