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.
  • Zastosowanie TestNG w Selenium

  • 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.
  • Zastosowanie TestNG w Selenium

    Zastosowanie TestNG w Selenium

  • 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.

Adnotacja w TestNG

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

Utworzenie nowego TestNG Projekt

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

Utworzenie nowego TestNG Projekt

Krok 3: Teraz zaczniemy importować plik TestNG Biblioteki do naszego projektu. Kliknij zakładkę „Biblioteki”, a następnie „Dodaj bibliotekę…”

Utworzenie nowego TestNG Projekt

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

Utworzenie nowego TestNG Projekt

Krok 5: Kliknij Zakończ.

Utworzenie nowego TestNG Projekt

Powinieneś to zauważyć TestNG znajduje się na liście bibliotek.

Utworzenie nowego TestNG Projekt

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.

Utworzenie nowego TestNG Projekt

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

Utworzenie nowego TestNG Projekt

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

Utworzenie nowego TestNG Projekt

Krok 7: Kliknij Zakończ i sprawdź, czy nasz plik FirstTestNGProjekt widoczny na EclipseOkno Eksploratora pakietów.

Utworzenie nowego TestNG Projekt

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…

Stwórz nowy TestNG Plik testowy

Krok 2: Wybierz TestNG class.
Kliknij na TestNG folderze i wybierz „TestNG opcja „klasa”. Kliknij Następny.

Stwórz nowy TestNG Plik testowy

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".

Stwórz nowy TestNG Plik testowy

Krok 4: Szablon został utworzony.
Eclipse powinien automatycznie utworzyć szablon dla naszego TestNG plik pokazany poniżej.

Stwórz nowy TestNG Plik testowy

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.

Uruchamianie testu

Uruchamianie testu

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.

Sprawdzanie raportów utworzonych przez TestNG

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ż”.

Generowanie raportów HTML

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.

Generowanie raportów HTML

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.

Generowanie raportów HTML

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.

Adnotacje użyte w TestNG

Uruchom ten kod i na wygenerowanej stronie Index.html kliknij „Widok chronologiczny”.

Adnotacje użyte w TestNG

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.

Parametry

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.

Parametry

TestNG Raport HTML potwierdzi, że metody zostały wykonane w oparciu o rosnącą wartość priorytetu.

Parametry

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)

Wiele parametrów

@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ę

Wiele parametrów

@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.

Wiele parametrów

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ę.

Wiele parametrów

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.