TestNG Tutorijal

ล to je TestNG?

TestNG je okvir za automatizirano testiranje u kojem NG oznaฤava "sljedeฤ‡u generaciju". TestNG nadahnut je JUnit koji koristi oznake (@). TestNG prevladava nedostatke JUnit i dizajniran je za izradu end-to-end testiranje lako.

Koriลกtenje TestNG, moลพete generirati odgovarajuฤ‡e izvjeลกฤ‡e i lako moลพete saznati koliko je testnih sluฤajeva proลกlo, neuspjeลกno i preskoฤeno. Moลพete zasebno izvrลกiti neuspjele testove.

Na primjer:

  • Pretpostavimo da imate pet testnih sluฤajeva, jedna metoda je napisana za svaki testni sluฤaj (pretpostavimo da je program napisan koriลกtenjem glavne metode bez koriลกtenja testNG). Kada prvo pokrenete ovaj program, tri metode su uspjeลกno izvedene, a ฤetvrta metoda nije uspjela. Zatim ispravite greลกke prisutne u ฤetvrtoj metodi, sada ลพelite pokrenuti samo ฤetvrtu metodu jer se prve tri metode ionako uspjeลกno izvode. To nije moguฤ‡e bez koriลกtenja TestNG.
  • The TestNG in Selenium pruลพa opciju, tj. datoteku testng-failed.xml u mapi testnih izlaza. Ako ลพelite pokrenuti samo neuspjele testove, znaฤi da morate pokrenuti ovu XML datoteku. Izvrลกit ฤ‡e samo neuspjeลกne testne sluฤajeve.

Osim gornjeg koncepta, saznat ฤ‡ete viลกe o TestNG, kao ลกto su prednosti TestNG, kako stvoriti testne metode koristeฤ‡i @test anotacije, kako pretvoriti ove klase u datoteku paketa za testiranje i izvrลกiti kroz eclipse kao i iz naredbenog retka.

Zaลกto koristiti TestNG sa Selenium?

Zadano Selenium testovi ne generiraju odgovarajuฤ‡i format za rezultate testa. Koriลกtenje TestNG in Selenium, moลพemo generirati rezultate testa.

most Selenium korisnici ovo koriste viลกe od Junit zbog svojih prednosti. Toliko je znaฤajki TestNG, ali ฤ‡emo se usredotoฤiti samo na one najvaลพnije koje moลพemo koristiti u Selenium. Slijede kljuฤne znaฤajke Selenium TestNG:

  • Generirajte izvjeลกฤ‡e u odgovarajuฤ‡em formatu ukljuฤujuฤ‡i broj testnih sluฤajeva, broj testnih sluฤajeva koji su proลกli, broj testnih sluฤajeva neuspjelih i broj testnih sluฤajeva koji su preskoฤeni.
  • Viลกe testnih sluฤajeva moลพe se lakลกe grupirati pretvaranjem u datoteku testng.xml. U kojem moลพete postaviti prioritete koji testni sluฤaj treba prvi izvrลกiti.
  • Isti testni sluฤaj moลพe se izvrลกiti viลกe puta bez petlji samo koriลกtenjem kljuฤne rijeฤi pod nazivom 'broj pozivanja'.
  • Koristeฤ‡i testng, moลพete izvrลกiti viลกe testnih sluฤajeva na viลกe preglednika, tj. unakrsno testiranje preglednika.
  • The TestNG Okvir se moลพe lako integrirati s alatima kao ลกto su TestNG Maven, Jenkins itd.
  • Biljeลกke koriลกtene u testiranju vrlo je lako razumjeti, npr.: @BeforeMethod, @AfterMethod, @BeforeTest, @AfterTest
  • WebDriver nema izvorni mehanizam za generiranje izvjeลกฤ‡a. TestNG moลพe generirati izvjeลกฤ‡e u ฤitljivom formatu poput onog prikazanog u nastavku.
  • Koristiti TestNG sa Selenium

  • TestNG pojednostavljuje naฤin kodiranja testova. Nema viลกe potrebe za statiฤkom glavnom metodom u naลกim testovima. Redoslijed radnji reguliran je lako razumljivim komentarima koji ne zahtijevaju da metode budu statiฤne.
  • Koristiti TestNG sa Selenium

    Koristiti TestNG sa Selenium

  • Neuhvaฤ‡ene iznimke automatski obraฤ‘uje TestNG bez preranog prekida testa. Ove se iznimke u izvjeลกฤ‡u prijavljuju kao neuspjeli koraci.

Prednosti TestNG umjesto prema JUnit

Tri su glavne prednosti TestNG umjesto prema JUnit:

  • Biljeลกke su lakลกe razumljive
  • Testni sluฤajevi mogu se lakลกe grupirati
  • Moguฤ‡e je paralelno testiranje

U ฤemu je anotacija TestNG?

Biljeลกke u TestNG su linije koda koje mogu kontrolirati kako ฤ‡e se metoda ispod njih izvrลกiti. Uvijek im prethodi simbol @. Vrlo rano i brzo TestNG Primjer je onaj prikazan u nastavku.

Napomena u TestNG

O komentarima ฤ‡e se raspravljati kasnije u odjeljku pod nazivom โ€œKomentari koriลกteni u TestNGโ€, stoga je sasvim u redu ako ne razumijete gore navedeno TestNG Joลก samo primjer. Za sada je samo vaลพno napomenuti da su primjedbe u TestNG lakลกe ih je kodirati i razumjeti nego u JUnit.

Moguฤ‡nost paralelnog izvoฤ‘enja testova dostupna je u TestNG ali ne u JUnit, Tako da je TestNG okvir je poลพeljniji za testere koji koriste Selenium Mreลพa.

Kako napisati testne sluฤajeve TestNG?

Korak 1) Napiลกite svoju poslovnu logiku i umetnite TestNG napomene u vaลกem kodu.
Korak 2) Dodajte viลกe informacija kao ลกto su naziv klase, naziv grupe, naziv paketa itd
Korak 3) Pokreni TestNG.

Stvorite testni sluฤaj pomoฤ‡u TestNG Biljeลกke

Sada ฤ‡emo nauฤiti kako stvoriti naลก prvi testni sluฤaj koristeฤ‡i TestNG Biljeลกke u Selenium:

Prije nego ลกto stvorimo test sluฤaj, prvo bismo trebali postaviti novi TestNG Projekt u Eclipse i nazovite ga kao โ€œPrviTestNGProjekt".

Postavljanje novog TestNG Projekt

Korak 1: Kliknite Datoteka > Novo > Java Projekt

Postavljanje novog TestNG Projekt

Korak 2: Upiลกite "PrviTestNGProjektโ€ kao naziv projekta, a zatim kliknite Dalje.

Postavljanje novog TestNG Projekt

Korak 3: Sada ฤ‡emo poฤeti uvoziti TestNG Knjiลพnice na naลก projekt. Kliknite karticu "Biblioteke", a zatim "Dodaj biblioteku..."

Postavljanje novog TestNG Projekt

Korak 4: U dijaloลกkom okviru Dodaj biblioteku odaberite "TestNGโ€I kliknite Dalje.

Postavljanje novog TestNG Projekt

Korak 5: Pritisnite Finish.

Postavljanje novog TestNG Projekt

Trebali biste to primijetiti TestNG nalazi se na popisu knjiลพnica.

Postavljanje novog TestNG Projekt

Korak 6: Sada ฤ‡emo dodati JAR datoteke koje sadrลพe Selenium API. Ove se datoteke nalaze u Java klijentski upravljaฤki program s kojeg smo preuzeli https://www.selenium.dev/downloads/ kada smo instalirali Selenium i Eclipse u prethodnim poglavljima.

Postavljanje novog TestNG Projekt

Zatim doฤ‘ite do mjesta gdje ste postavili Selenium JAR datoteke.

Postavljanje novog TestNG Projekt

Nakon dodavanja vanjskih JAR-ova, vaลก bi zaslon trebao izgledati ovako.

Postavljanje novog TestNG Projekt

Korak 7: Kliknite Zavrลกi i potvrdite da je naลก FirstTestNGProjekt je vidljiv na Eclipse's Package Explorer prozor.

Postavljanje novog TestNG Projekt

Kako stvoriti novi TestNG Testna datoteka

Sada kada smo zavrลกili s postavljanjem naลกeg projekta u ovome TestNG vodiฤ, stvorimo novi TestNG file.

Korak 1: Kliknite na 'src' i odaberite drugo.
Desnom tipkom miลกa kliknite na mapu paketa โ€œsrcโ€, a zatim odaberite Novo > Ostaloโ€ฆ

Napravite novu TestNG Testna datoteka

Korak 2: odabrati TestNG klase.
Kliknite na TestNG mapu i odaberite "TestNG klasaโ€. Pritisnite Dalje.

Napravite novu TestNG Testna datoteka

Korak 3: Upiลกite vrijednosti.
Upiลกite dolje navedene vrijednosti u odgovarajuฤ‡e okvire za unos i kliknite Zavrลกi. Imajte na umu da smo imenovali naลกe Java datoteku kao โ€œFirstTestNGDatoteka".

Napravite novu TestNG Testna datoteka

Korak 4: Predloลพak stvoren.
Eclipse treba automatski stvoriti predloลพak za naลกe TestNG datoteku prikazanu u nastavku.

Napravite novu TestNG Testna datoteka

Kodiranje naลกeg prvog TestNG Primjer testnog sluฤaja

Kreirajmo sada naลก prvi Testni sluฤaj koji ฤ‡e provjeriti je li Mercury Poฤetna stranica Toursa je toฤna. Upiลกite svoj kod kao ลกto je prikazano u nastavku TestNG Primjer:

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();
  }
}

Primijetite sljedeฤ‡e.

  • TestNG ne zahtijeva da imate main() metodu.
  • Metode ne moraju biti statiฤne.
  • Koristili smo napomenu @Test. @Test se koristi da kaลพe da je metoda pod njim test sluฤaj. U ovom smo sluฤaju metodu verifyHomepageTitle() postavili kao naลก testni sluฤaj, pa smo iznad nje stavili napomenu '@Test'.
  • Buduฤ‡i da koristimo zabiljeลกke u TestNG, morali smo uvesti paket org.testng.annotations.*.
  • Koristili smo klasu Assert. Klasa Assert koristi se za provoฤ‘enje operacija provjere TestNG. Da bismo ga koristili, moramo uvesti paket org.testng.Assert.

Moลพete imati viลกe testnih sluฤajeva (dakle, viลกe @Test komentara) u jednom TestNG datoteka. O tome ฤ‡emo se detaljnije pozabaviti kasnije u odjeljku "Primjedbe koriลกtene u TestNG".

Izvoฤ‘enje testa

Da biste pokrenuli test, jednostavno pokrenite datoteku Eclipse kao ลกto to obiฤno radite. Eclipse pruลพit ฤ‡e dva izlaza โ€“ jedan u prozoru konzole, a drugi na TestNG Prozor s rezultatima.

Izvoฤ‘enje testa

Izvoฤ‘enje testa

Provjera izvjeลกฤ‡a koje je izradio TestNG

Prozor konzole u Eclipse daje tekstualno izvjeลกฤ‡e o naลกim rezultatima testa, dok TestNG Prozor s rezultatima daje nam grafiฤki.

Provjera izvjeลกฤ‡a Izradio TestNG

Generiranje HTML izvjeลกฤ‡a

TestNG ima moguฤ‡nost generiranja izvjeลกฤ‡a u HTML formatu.

Korak 1: Nakon ลกto smo pokrenuli naลก FirstTestNGDatoteku koju smo stvorili u prethodnom odjeljku desnom tipkom miลกa kliknite naziv projekta (PrviTestNGProject) u prozoru Project Explorera zatim kliknite na opciju "Osvjeลพi".

Generiranje HTML izvjeลกฤ‡a

Korak 2: Primijetite da je stvorena mapa "test-output". Proลกirite ga i potraลพite datoteku index.html. Ova HTML datoteka je izvjeลกฤ‡e o rezultatima posljednjeg testiranja.

Generiranje HTML izvjeลกฤ‡a

Korak 3: Double-kliknite na tu datoteku index.html da je otvorite unutar Eclipseugraฤ‘eni web preglednik. Ovu stranicu moลพete osvjeลพiti u bilo kojem trenutku nakon ponovnog pokretanja testa jednostavnim pritiskom na F5 baลก kao u obiฤnim web preglednicima.

Generiranje HTML izvjeลกฤ‡a

Biljeลกke koriลกtene u TestNG

U prethodnom odjeljku upoznali ste se s napomenom @Test. Sada ฤ‡emo prouฤavati naprednije biljeลกke i njihovu upotrebu.

Viลกe testnih sluฤajeva

Moลพemo koristiti viลกe @Test primjedbi u jednoj TestNG datoteka. Prema zadanim postavkama, metode oznaฤene @Testom izvode se abecednim redom. Pogledajte kod ispod. Iako metode c_test, a_test i b_test nisu poredane abecednim redom u kodu, izvrลกit ฤ‡e se kao takve.

Biljeลกke koriลกtene u TestNG

Pokrenite ovaj kod i na generiranoj stranici index.html kliknite "Kronoloลกki prikaz".

Biljeลกke koriลกtene u TestNG

Parametri

Ako ลพelite da se metode izvrลกavaju drugaฤijim redoslijedom, koristite parametar โ€œpriorityโ€. Parametri su kljuฤne rijeฤi koje mijenjaju funkciju zabiljeลกke.

  • Parametri zahtijevaju da im dodijelite vrijednost. To ฤinite tako da pored njih stavite "=", a zatim vrijednost.
  • Parametri su zatvoreni u par zagrada koje su smjeลกtene odmah nakon napomene poput isjeฤka koda prikazanog u nastavku.

Parametri

TestNG ฤ‡e izvrลกiti napomenu @Test s najniลพom vrijednoลกฤ‡u prioriteta do najveฤ‡e. Nema potrebe da vaลกe vrijednosti prioriteta budu uzastopne.

Parametri

The TestNG HTML izvjeลกฤ‡e ฤ‡e potvrditi da su metode izvrลกene na temelju rastuฤ‡e vrijednosti prioriteta.

Parametri

Viลกe parametara

Osim "prioriteta", @Test ima joลก jedan parametar pod nazivom "alwaysRun" koji se moลพe postaviti samo na "true" ili "false". Za koriลกtenje dva ili viลกe parametara u jednoj napomeni, odvojite ih zarezom poput dolje prikazanog.

@Test(priority = 0, alwaysRun = true)

Viลกe parametara

@BeforeTest i @AfterTest

@Prije testa metode pod ovom napomenom ฤ‡e se izvrลกiti prije prvog testnog sluฤaja u TestNG file.
@AfterTest metode pod ovom napomenom ฤ‡e se izvrลกiti nakon svih testnih sluฤajeva u TestNG datoteka se izvrลกavaju.

Razmotrite kod u nastavku.

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();
      }
}

Primjenjujuฤ‡i logiku predstavljenu tablicom i gornjim kodom, moลพemo predvidjeti da je redoslijed kojim ฤ‡e se metode izvrลกavati sljedeฤ‡i:

  • 1st โ€“ pokretanje preglednika()
  • 2nd โ€“ verifyHomepageTitle()
  • 3rd โ€“ terminateBrowser()

Poloลพaj blokova napomena moลพe se meฤ‘usobno mijenjati bez utjecaja na kronoloลกki red kojim ฤ‡e se izvrลกavati. Razumijmo se s a TestNG Primjer i pokuลกajte preurediti blokove napomena tako da vaลก kod izgleda sliฤno ovome u nastavku.

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);
     }
      
}

Pokrenite gornji kod i primijetite to

Viลกe parametara

@BeforeMethod i @AfterMethod

@PrijeMetode metode pod ovom napomenom ฤ‡e se izvrลกiti prije svake metode u svakom ispitnom sluฤaju.
@Nakon metode metode pod ovom napomenom ฤ‡e se izvrลกiti nakon svake metode u svakom testnom sluฤaju.

In Mercury Obilasci, pretpostavimo da ลพelimo provjeriti naslove ciljanih stranica dviju poveznica u nastavku.

Viลกe parametara

Tok naลกeg testa bi bio:

  • Idite na poฤetnu stranicu i provjerite njen naslov.
  • Kliknite REGISTRIRAJ SE i provjerite naslov ciljne stranice.
  • Vratite se na poฤetnu stranicu i provjerite ima li joลก uvijek toฤan naslov.
  • Pritisnite PODRล KA i provjerite naslov ciljne stranice.
  • Vratite se na poฤetnu stranicu i provjerite ima li joลก uvijek toฤan naslov.

Kรดd u nastavku ilustrira kako se @BeforeMethod i @AfterMethod koriste za uฤinkovito izvrลกavanje gore navedenog scenarija.

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();
      }
}

Nakon izvoฤ‘enja ovog testa, vaลก TestNG treba prijaviti sljedeฤ‡i slijed.

Viลกe parametara

Jednostavno reฤeno, @BeforeMethod treba sadrลพavati metode koje trebate pokrenuti prije svaki testni sluฤaj dok @AfterMethod treba sadrลพavati metode koje trebate pokrenuti nakon svaki test sluฤaj.

Saลพetak TestNG Biljeลกke

@BeforeSuite: Oznaฤena metoda pokrenut ฤ‡e se prije izvoฤ‘enja svih testova u ovom paketu.

@AfterSuite: Oznaฤena metoda pokrenut ฤ‡e se nakon izvoฤ‘enja svih testova u ovom paketu.

@Prije testa: Oznaฤena metoda ฤ‡e se pokrenuti prije pokretanja bilo koje testne metode koja pripada klasama unutar oznake.

@AfterTest: Oznaฤena metoda ฤ‡e se pokrenuti nakon ลกto se pokreฤ‡u sve testne metode koje pripadaju klasama unutar oznake.

@Prije Grupa: Popis grupa koje ฤ‡e ova metoda konfiguracije pokrenuti prije. Zajamฤeno je da ฤ‡e se ova metoda pokrenuti neposredno prije nego ลกto se pozove prva testna metoda koja pripada bilo kojoj od ovih grupa.

@NakonGrupe: Popis grupa nakon kojih ฤ‡e se pokrenuti ova metoda konfiguracije. Zajamฤeno je da ฤ‡e se ova metoda pokrenuti ubrzo nakon ลกto se pozove zadnja testna metoda koja pripada bilo kojoj od ovih grupa.

@Prije Klase: Oznaฤena metoda ฤ‡e se pokrenuti prije nego ลกto se pozove prva testna metoda u trenutnoj klasi.

@Nakon nastave: Oznaฤena metoda ฤ‡e se pokrenuti nakon ลกto se pokrenu sve testne metode u trenutnoj klasi.

@PrijeMetode: Oznaฤena metoda pokrenut ฤ‡e se prije svake ispitne metode.

@Nakon metode: Oznaฤena metoda pokrenut ฤ‡e se nakon svake testne metode.

@Test: Oznaฤena metoda je dio testnog sluฤaja

Zakljuฤak

  • TestNG je testiranje okvir koji je sposoban napraviti Selenium lakลกe razumljive testove i generiranje izvjeลกฤ‡a koja su lako razumljiva.
  • Glavne prednosti TestNG umjesto prema JUnit su sljedeฤ‡i.
    • Biljeลกke su lakลกe za koriลกtenje i razumijevanje.
    • Testni sluฤajevi mogu se lakลกe grupirati.
    • TestNG omoguฤ‡uje nam stvaranje paralelni testovi.
  • Prozor konzole u Eclipse generira tekstualni rezultat dok TestNG prozor je korisniji jer nam daje grafiฤki izlaz rezultata testa plus druge znaฤajne detalje kao ลกto su:
    • Vrijeme izvoฤ‘enja svake metode.
    • Kronoloลกki redoslijed kojim su metode izvrลกene
  • TestNG moลพe generirati izvjeลกฤ‡a temeljena na HTML-u.
  • Biljeลกke mogu koristiti parametre kao i obiฤno Java TestNG metode.
  • TestNG Dataprovider je naฤin za prosljeฤ‘ivanje parametara u testnu funkciju koja prosljeฤ‘uje razliฤite vrijednosti u testnim sluฤajevima u jednom izvrลกavanju.

Saลพmite ovu objavu uz: