Samouczek TestNG: Co to jest, adnotacje i Ramy w selenie

Spisie treści:

Anonim

Co to jest TestNG?

TestNG to platforma do testowania automatyzacji, w której NG oznacza „następną generację”. TestNG jest inspirowany przez JUnit, który używa adnotacji (@). TestNG przezwycięża wady JUnit i ma na celu ułatwienie kompleksowego testowania.

Korzystając z TestNG, możesz wygenerować odpowiedni raport i łatwo dowiedzieć się, ile przypadków testowych zostało zaliczonych, zakończonych niepowodzeniem i pominiętych. Przypadki testowe zakończone niepowodzeniem można wykonać oddzielnie.

Na przykład:

  • Załóżmy, że masz pięć przypadków testowych, jedna metoda jest napisana dla każdego przypadku testowego (Załóżmy, że program został napisany przy użyciu metody głównej bez użycia metody testNG). Po pierwszym uruchomieniu tego programu 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 i tak są pomyślnie wykonane. Nie jest to możliwe bez użycia TestNG.
  • TestNG w Selenium udostępnia opcję, tj. Plik testng-failed.xml w folderze test-output. Jeśli chcesz uruchomić tylko przypadki testowe zakończone niepowodzeniem, oznacza to, że uruchamiasz ten plik XML. Wykona tylko nieudane przypadki testowe.

Oprócz powyższej koncepcji, dowiesz się więcej na temat TestNG, na przykład jakie są zalety TestNG, jak tworzyć metody testowe za pomocą adnotacji @test, jak konwertować te klasy do pliku zestawu testowego i wykonywać je za pomocą zaćmienia, a także z wiersza poleceń .

W tym samouczku TestNG dowiesz się

  • Dlaczego warto używać TestNG z selenem?
  • Zalety TestNG nad JUnit
  • Utwórz przypadek testowy za pomocą adnotacji TestNG
  • Jak utworzyć nowy plik testowy TestNG
    • Kodowanie naszego pierwszego przykładu testu TestNG
    • Uruchamianie testu
  • Sprawdzanie raportów stworzonych przez TestNG
  • Adnotacje używane w TestNG
  • Wiele przypadków testowych
  • Parametry
    • Wiele parametrów
    • Podsumowanie adnotacji TestNG

Dlaczego warto używać TestNG z selenem?

Domyślne testy selenu nie generują prawidłowego formatu wyników testu. Używając TestNG w Selenium, możemy generować wyniki testów.

Większość użytkowników Selenium używa tego częściej niż Junit ze względu na jego zalety. Jest tak wiele funkcji TestNG, ale skupimy się tylko na tych najważniejszych, z których możemy korzystać w Selenium. Oto kluczowe cechy Selenium TestNG:

  • Wygeneruj raport w odpowiednim formacie, uwzględniając liczbę uruchomień przypadków testowych, liczbę przypadków testowych, które przeszły pomyślnie, liczbę przypadków testowych, które zakończyły się niepowodzeniem, oraz liczbę pominiętych.
  • Wiele przypadków testowych można łatwiej grupować, konwertując je do pliku testng.xml. W którym możesz ustalić priorytety, który przypadek testowy powinien zostać wykonany jako pierwszy.
  • Ten sam przypadek testowy można wykonać wiele razy bez pętli, używając tylko słowa kluczowego o nazwie „liczba wywołań”.
  • Używając testng, możesz wykonać wiele przypadków testowych na wielu przeglądarkach, tj. Testy między przeglądarkami.
  • Framework TestNG można łatwo zintegrować z narzędziami takimi jak TestNG Maven, Jenkins itp.
  • Adnotacje użyte 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 przedstawiony poniżej.
  • TestNG upraszcza sposób kodowania testów. W naszych testach nie ma już potrzeby stosowania statycznej metody głównej. Kolejność działań jest regulowana przez łatwe do zrozumienia adnotacje, które nie wymagają statycznego charakteru metod.
  • Niewychwycone wyjątki są automatycznie obsługiwane przez TestNG bez przedwczesnego kończenia testu. Te wyjątki są zgłaszane jako nieudane kroki w raporcie.

Zalety TestNG nad JUnit

Istnieją trzy główne zalety TestNG w porównaniu z JUnit:

  • Adnotacje są łatwiejsze do zrozumienia
  • Przypadki testowe można łatwiej grupować
  • Możliwe jest testowanie równoległe

Adnotacje w TestNG to wiersze kodu, które mogą kontrolować sposób wykonania poniższej metody . Są zawsze poprzedzone symbolem @. Bardzo wczesny i szybki przykład TestNG jest pokazany poniżej.

Adnotacje zostaną omówione później w sekcji „Adnotacje używane w TestNG”, więc jest całkowicie w porządku, jeśli jeszcze nie rozumiesz powyższego przykładu TestNG. Na razie ważne jest, aby pamiętać, że adnotacje w TestNG są łatwiejsze do zakodowania i zrozumienia niż w JUnit.

Możliwość równoległego uruchamiania testów jest dostępna w TestNG, ale nie w JUnit, więc framework TestNG jest preferowany przez testerów używających Selenium Grid.

Utwórz przypadek testowy za pomocą adnotacji TestNG

Teraz nauczymy się, jak utworzyć nasz pierwszy przypadek testowy za pomocą adnotacji TestNG w Selenium:

Zanim utworzymy przypadek testowy, powinniśmy najpierw skonfigurować nowy projekt TestNG w Eclipse i nazwać go „FirstTestNGProject”.

Konfigurowanie nowego projektu TestNG

Krok 1: Kliknij Plik> Nowy> Projekt Java

Krok 2: Wpisz „FirstTestNGProject” jako nazwę projektu, a następnie kliknij przycisk Dalej.

Krok 3: Zaczniemy teraz importować biblioteki TestNG do naszego projektu. Kliknij kartę „Biblioteki”, a następnie „Dodaj bibliotekę”

… ”

Krok 4: W oknie dialogowym Dodaj bibliotekę wybierz „TestNG” i kliknij Dalej.

Krok 5: Kliknij Zakończ.

Należy zauważyć, że TestNG znajduje się na liście bibliotek.

Krok 6: Teraz dodamy pliki JAR zawierające interfejs API Selenium. Pliki te znajdują się w sterowniku klienta Java, który pobraliśmy ze strony http://docs.seleniumhq.org/download/ podczas instalacji Selenium i Eclipse w poprzednich rozdziałach.

Następnie przejdź do miejsca, w którym umieściłeś pliki Selenium JAR.

Po dodaniu zewnętrznych plików JAR Twój ekran powinien wyglądać następująco.

Krok 7: Kliknij Zakończ i sprawdź, czy nasz FirstTestNGProject jest widoczny w oknie Eksploratora pakietów Eclipse.

Jak utworzyć nowy plik testowy TestNG

Teraz, gdy skończyliśmy konfigurować nasz projekt w tym samouczku TestNG, stwórzmy nowy plik TestNG.

Krok 1: Kliknij prawym przyciskiem myszy folder pakietu „src”, a następnie wybierz Nowy> Inne

Krok 2: Kliknij folder TestNG i wybierz opcję „TestNG class”. Kliknij Następny.

Krok 3: Wpisz wartości wskazane poniżej w odpowiednich polach wejściowych i kliknij Zakończ. Zauważ, że nazwaliśmy nasz plik Java jako „FirstTestNGFile”.

Eclipse powinno automatycznie utworzyć szablon dla naszego pliku TestNG pokazanego poniżej.

Kodowanie naszego pierwszego przykładu testu TestNG

Stwórzmy teraz nasz pierwszy przypadek testowy, który sprawdzi, czy strona główna Mercury Tours jest poprawna. Wpisz swój kod, jak pokazano w poniższym przykładzie TestNG:

pakiet 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";publiczny sterownik WebDriver;@Testpublic void verifyHomepageTitle () {System.out.println ("uruchamianie przeglądarki Firefox");System.setProperty ("webdriver.gecko.driver", driverPath);driver = nowy FirefoxDriver ();driver.get (baseUrl);String spodziewanyTitle = "Witamy: Mercury Tours";String currentTitle = driver.getTitle ();Assert.assertEquals (faktycznyTitle, oczekiwanyTitle);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 stwierdzenia, że ​​metoda pod nim jest przypadkiem testowym . W tym przypadku ustawiliśmy metodę verifyHomepageTitle () jako nasz przypadek testowy, więc 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 TestNG . Aby z niego skorzystać, musimy zaimportować pakiet org.testng.Assert.

Możesz mieć wiele przypadków testowych (w związku z tym wiele adnotacji @Test) w jednym pliku TestNG. Zostanie to omówione bardziej szczegółowo w dalszej części sekcji „Adnotacje używane w TestNG”.

Uruchamianie testu

Aby uruchomić test, po prostu uruchom plik w Eclipse w normalny sposób. Eclipse zapewni dwa wyjścia - jedno w oknie konsoli, a drugie w oknie wyników testuNG.

Sprawdzanie raportów stworzonych przez TestNG

Okno konsoli w Eclipse zawiera tekstowy raport wyników naszych przypadków testowych, podczas gdy okno TestNG Results zawiera raport graficzny.

Generowanie raportów HTML

TestNG ma możliwość generowania raportów w formacie HTML.

Krok 1: Po uruchomieniu naszego FirstTestNGFile, który stworzyliśmy w poprzedniej sekcji, kliknij prawym przyciskiem myszy nazwę projektu (FirstTestNGProject) w oknie Eksploratora projektów, a następnie kliknij opcję „Odśwież”.

Krok 2: Zwróć uwagę, że został utworzony folder „test-output”. Rozwiń go i poszukaj pliku index.html. Ten plik HTML jest raportem wyników ostatniego uruchomienia testu.

Krok 3: Kliknij dwukrotnie ten plik index.html, aby otworzyć go we wbudowanej przeglądarce internetowej Eclipse. Możesz odświeżyć tę stronę w dowolnym momencie po ponownym uruchomieniu testu, po prostu naciskając klawisz F5, tak jak w zwykłych przeglądarkach internetowych.

Adnotacje używane w TestNG

W poprzedniej sekcji zostałeś wprowadzony do adnotacji @Test. Teraz będziemy badać bardziej zaawansowane adnotacje i ich zastosowania.

Wiele przypadków testowych

Możemy użyć wielu adnotacji @Test w jednym pliku TestNG. Domyślnie metody z adnotacjami @Test są wykonywane alfabetycznie. Zobacz poniższy kod. Chociaż metody c_test, a_test i b_test nie są ułożone alfabetycznie w kodzie, zostaną wykonane jako takie.

Uruchom ten kod i na wygenerowanej stronie index.html kliknij opcję „Widok chronologiczny”.

Parametry

Jeśli chcesz, aby metody były wykonywane w innej kolejności, użyj parametru „priorytet”. Parametry to słowa kluczowe, które modyfikują funkcję adnotacji .

  • Parametry wymagają przypisania im wartości. Robisz to, umieszczając obok nich znak „=”, a następnie wartość.
  • Parametry są zawarte w nawiasach, które są umieszczane bezpośrednio po adnotacji, tak jak we fragmencie kodu pokazanym poniżej.

TestNG wykona adnotację @Test z najniższą wartością priorytetu, aż do największej. Nie ma potrzeby, aby Twoje wartości priorytetowe następowały po sobie.

Raport TestNG HTML potwierdzi, że metody zostały wykonane na podstawie rosnącej wartości priorytetu.

Wiele parametrów

Oprócz „priorytetu” @Test ma inny parametr o nazwie „alwaysRun”, który można ustawić tylko na „prawda” lub „fałsz”. Aby użyć dwóch lub więcej parametrów w jednej adnotacji, oddziel je przecinkiem, tak jak pokazano poniżej.

@Test (priorytet = 0, alwaysRun = true)

@BeforeTest i @AfterTest

@BeforeTest

metody w tej adnotacji zostaną wykonane przed pierwszym przypadkiem testowym w pliku TestNG .

@AfterTest

metody w tej adnotacji zostaną wykonane po wykonaniu wszystkich przypadków testowych w pliku TestNG .

Rozważ poniższy kod.

pakiet 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";publiczny sterownik WebDriver;@BeforeTestpublic void launchBrowser () {System.out.println ("uruchamianie przeglądarki Firefox");System.setProperty ("webdriver.gecko.driver", driverPath);driver = nowy FirefoxDriver ();driver.get (baseUrl);}@Testpublic void verifyHomepageTitle () {String spodziewanyTitle = "Witamy: Mercury Tours";String currentTitle = driver.getTitle ();Assert.assertEquals (faktycznyTitle, oczekiwanyTitle);}@AfterTestpublic void terminateBrowser () {driver.close ();}}

Stosując logikę przedstawioną przez tabelę i powyższy kod możemy przewidzieć, że kolejność, według której metody będą wykonywane, to:

  • 1 st - launchBrowser ()
  • 2 ND - verifyHomepageTitle ()
  • 3 III - terminateBrowser ()

Umieszczanie bloków adnotacji można zamieniać bez wpływu na porządek chronologiczny, w jakim będą one wykonywane . Zrozummy na przykładzie TestNG i spróbujmy zmienić rozmieszczenie bloków adnotacji tak, aby Twój kod wyglądał podobnie do poniższego.

pakiet 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";publiczny sterownik WebDriver;@AfterTest // pomieszanepublic void terminateBrowser () {driver.close ();}@BeforeTest // Pomieszanepublic void launchBrowser () {System.out.println ("uruchamianie przeglądarki Firefox");System.setProperty ("webdriver.gecko.driver", driverPath);driver = nowy FirefoxDriver ();driver.get (baseUrl);}@Test // pomieszanepublic void verifyHomepageTitle () {String spodziewanyTitle = "Witamy: Mercury Tours";String currentTitle = driver.getTitle ();Assert.assertEquals (faktycznyTitle, oczekiwanyTitle);}}

Uruchom powyższy kod i zauważ to

@BeforeMethod i @AfterMethod

@BeforeMethod

metody w tej adnotacji zostaną wykonane przed każdą metodą w każdym przypadku testowym .

@AfterMethod

metody w tej adnotacji zostaną wykonane po każdej metodzie w każdym przypadku testowym.

Załóżmy, że w Mercury Tours chcielibyśmy zweryfikować tytuły stron docelowych dwóch poniższych linków.

Przebieg naszego testu wyglądałby następująco:

  • Wejdź na stronę główną i sprawdź jej tytuł.
  • Kliknij ZAREJESTRUJ SIĘ i zweryfikuj tytuł strony docelowej.
  • Wróć do strony głównej i sprawdź, czy nadal ma poprawny tytuł.
  • Kliknij WSPARCIE i sprawdź tytuł strony docelowej.
  • Wróć do strony głównej i sprawdź, czy nadal ma poprawny tytuł.

Poniższy kod ilustruje, w jaki sposób @BeforeMethod i @AfterMethod są używane do wydajnego wykonywania wspomnianego powyżej scenariusza.

pakiet 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";publiczny sterownik WebDriver;public String oczekiwano = null;public String rzeczywiste = null;@BeforeTestpublic void launchBrowser () {System.out.println ("uruchamianie przeglądarki Firefox");System.setProperty ("webdriver.gecko.driver", driverPath);driver = nowy FirefoxDriver ();driver.get (baseUrl);}@BeforeMethodpublic void verifyHomepageTitle () {String spodziewanyTitle = "Witamy: Mercury Tours";String currentTitle = driver.getTitle ();Assert.assertEquals (faktycznyTitle, oczekiwanyTitle);}@Test (priorytet = 0)public void register () {driver.findElement (By.linkText ("REJESTRACJA")). click ();oczekiwano = "Zarejestruj się: Mercury Tours";rzeczywista = driver.getTitle ();Assert.assertEquals (rzeczywiste, oczekiwane);}@Test (priorytet = 1)public void support () {driver.findElement (By.linkText ("WSPARCIE")). click ();oczekiwano = "W budowie: Mercury Tours";rzeczywista = driver.getTitle ();Assert.assertEquals (rzeczywiste, oczekiwane);}@AfterMethodpublic void goBackToHomepage () {driver.findElement (By.linkText ("Strona główna")). click ();}@AfterTestpublic void terminateBrowser () {driver.close ();}}

Po wykonaniu tego testu Twój TestNG powinien zgłosić następującą sekwencję.

Mówiąc najprościej, @BeforeMethod powinno zawierać metody, które musisz uruchomić przed każdym przypadkiem testowym, a @AfterMethod powinno zawierać metody, które musisz uruchomić po każdym przypadku testowym.

Podsumowanie adnotacji TestNG

@BeforeSuite : metoda z adnotacjami zostanie uruchomiona przed uruchomieniem wszystkich testów w tym pakiecie.

@AfterSuite : metoda z adnotacjami zostanie uruchomiona po wykonaniu wszystkich testów w tym pakiecie.

@BeforeTest : metoda z adnotacjami zostanie uruchomiona przed uruchomieniem jakiejkolwiek metody testowej należącej do klas wewnątrz tagu.

@AfterTest : metoda z adnotacjami zostanie uruchomiona po uruchomieniu wszystkich metod testowych należących do klas wewnątrz tagu.

@BeforeGroups : lista grup, dla których ta metoda konfiguracji będzie działać wcześniej. Ta metoda jest gwarantowana na krótko przed wywołaniem pierwszej metody testowej należącej do którejkolwiek z tych grup.

@AfterGroups : lista grup, po których będzie uruchamiana ta metoda konfiguracji. Ta metoda zostanie uruchomiona wkrótce po wywołaniu ostatniej metody testowej należącej do którejkolwiek z tych grup.

@BeforeClass : Metoda z adnotacjami zostanie uruchomiona przed wywołaniem pierwszej metody testowej w bieżącej klasie.

@AfterClass : metoda z adnotacjami zostanie uruchomiona po uruchomieniu wszystkich metod testowych w bieżącej klasie.

@BeforeMethod : metoda z adnotacjami zostanie uruchomiona przed każdą metodą testową.

@AfterMethod : metoda z adnotacjami zostanie uruchomiona po każdej metodzie testowej.

@Test : metoda z adnotacjami jest częścią przypadku testowego

Wniosek

  • TestNG to platforma testowa, która może uczynić testy Selenium łatwiejszymi do zrozumienia i generować łatwe do zrozumienia raporty.
  • Główne zalety TestNG nad JUnit są następujące.
    • Adnotacje są łatwiejsze w użyciu i zrozumieniu.
    • Przypadki testowe można łatwiej grupować.
    • TestNG pozwala nam tworzyć testy równoległe.
  • Okno konsoli w Eclipse generuje wynik tekstowy, podczas gdy okno TestNG jest bardziej przydatne, ponieważ daje nam graficzne wyjście wyniku testu oraz inne znaczące szczegóły, takie jak:
    • Czasy wykonawcze każdej metody.
    • Kolejność chronologiczna, według której wykonano metody
  • TestNG jest w stanie generować raporty w formacie HTML.
  • Adnotacje mogą używać parametrów tak samo, jak zwykłe metody Java TestNG.
  • TestNG Dataprovider to sposób na przekazanie parametrów do funkcji testowej, która przekazuje różne wartości w przypadkach testowych w jednym wykonaniu.