TestNG Tutorijal

โšก Pametni saลพetak

TestNG je sljedeฤ‡a generacija Java okvir za testiranje koji se spaja s Selenium za strukturiranu automatizaciju, bogato izvjeลกtavanje i paralelno izvrลกavanje. Ovaj vodiฤ pokriva kljuฤne napomene, postavljanje projekta u Eclipse, pisanje prvog testnog sluฤaja, HTML izvjeลกฤ‡a i napredno koriลกtenje parametara.

  • ๐Ÿงฑ Osnovni okvir: TestNG proteลพe se JUnit ideje s biljeลกkama, grupingi paralelno izvrลกavanje testova za Selenium apartmani.
  • ๐Ÿท๏ธ Anotacije Drive Flow: Postavljanje, testiranje i rastavljanje sekvenci @Test, @BeforeMethod, @AfterMethod, @BeforeTest i @AfterTest.
  • ๐Ÿ—‚๏ธ Eclipse Postaviti: Izgradite a TestNG projekt, dodajte TestNG knjiลพnica i Selenium JAR-ove, a zatim generirajte testne klase iz ฤarobnjaka.
  • ๐Ÿ“Š Izvjeลกฤ‡ivanje: TestNG stvara tekstualna, grafiฤka i HTML izvjeลกฤ‡a u mapi test-output, ukljuฤujuฤ‡i kronoloลกke prikaze.
  • ๏ธ Parametri: Koristite priority, alwaysRun i dataProvider za kontrolu redoslijeda izvrลกavanja i unos podataka u testove.
  • ๐Ÿค– Poboljลกanje umjetne inteligencije: AI asistenti za kodiranje ubrzavaju TestNG generiranje klasa, aลพuriranja lokatora i scaffolding dataProvider-a.

TestNG Tutorijal

ล to je TestNG?

TestNG je okvir za automatizirano testiranje gdje โ€žNGโ€œ oznaฤava โ€žSljedeฤ‡u generacijuโ€œ. TestNG nadahnut je JUnit i koristi Java anotacije (@) za kontrolu tijeka testiranja. To prevladava JUnitranija ograniฤenja i osmiลกljen je kako bi end-to-end testiranje lakลกe.

Kontakt TestNG Moลพete generirati odgovarajuฤ‡e izvjeลกฤ‡e i odmah vidjeti koliko je testova proลกlo, neuspjeลกno ili preskoฤeno. Takoฤ‘er moลพete ponovno pokrenuti samo neuspjeลกne sluฤajeve.

Na primjer:

  • Pretpostavimo da imate pet testnih sluฤajeva, svaki sa svojom metodom, napisanih bez TestNGTri prolaze; ฤetvrti ne uspijeva. Nakon ลกto popravite ฤetvrti, ลพelite ponovno pokrenuti samo taj, buduฤ‡i da su prve tri veฤ‡ proลกle. To je teลกko uฤiniti s obiฤnim kodom metode main().
  • TestNG osigurava testng-failed.xml Datoteka u test-output mapa. Pokretanje tog XML-a ponovno izvrลกava samo neuspjeลกne sluฤajeve.

Osim toga, nauฤit ฤ‡ete prednosti TestNG, kako pisati metode testiranja s @Test anotacijama i kako pretvoriti svoje klase u skup testova koji se izvrลกava iz Eclipse ili naredbeni redak.

Zaลกto koristiti TestNG sa Selenium?

Po defaultu, Selenium testovi ne daju lijepo formatirane rezultate. S TestNG Kada je ukljuฤen, program za testiranje generira strukturirano izvjeลกฤ‡e koje moลพete podijeliti s timom.

most Selenium korisnici preferiraju TestNG umjesto prema JUnit zbog ลกireg skupa znaฤajki. Kljuฤne znaฤajke za Selenium je:

  • Izvjeลกฤ‡a koja ukljuฤuju broj pokrenutih, uspjeลกnih, neuspjeลกnih i preskoฤenih testnih sluฤajeva.
  • Lako gruping testnih sluฤajeva putem testng.xml datoteka s prioritetima izvrลกavanja.
  • Ponovite test viลกe puta bez petlji koristeฤ‡i invocationCount.
  • Pokrenite viลกe testova na viลกe preglednika โ€” unakrsnotestiranje preglednika Podrลกka.
  • Glatka integracija s Mavenom, Jenkinsi ostali CI alati.
  • Readable anotacije โ€” na primjer, @BeforeMethod, @AfterMethod, @BeforeTest, @AfterTest.
  • Selenium WebDriver nema izvorno izvjeลกtavanje; TestNG popunjava tu prazninu ฤistim HTML izvjeลกฤ‡em poput onog ispod.

TestNG Primjer HTML izvjeลกฤ‡a za Selenium ispitivanja

  • TestNG pojednostavljuje testni kod. Viลกe vam nije potrebna statiฤka glavna metoda; anotacije odluฤuju ลกto se izvrลกava i kada.

uobiฤajen Java struktura testne klase s glavnom metodom

TestNG struktura testne klase pomoฤ‡u anotacija

  • Neuhvaฤ‡ene iznimke se elegantno obraฤ‘uju od strane TestNGPrijavljeni su kao neuspjeli koraci bez prekidanja cijelog izvoฤ‘enja.

Prednosti TestNG umjesto prema JUnit

TestNG nudi tri glavne prednosti u odnosu na JUnit:

  • Anotacije su lakลกe za razumjeti i koristiti.
  • Testni sluฤajevi mogu se grupirati i prioritizirati uz manje napora.
  • Paralelno izvrลกavanje testova podrลพano je odmah po instalaciji.

ล to je anotacija u TestNG?

Biljeลกke u TestNG su linije koda smjeลกtene iznad metode kako bi se kontroliralo kako se ona izvrลกava. Uvijek poฤinju simbolom @. Jednostavan primjer prikazan je u nastavku.

Primjer TestNG napomena iznad Java naฤin

Anotacije su detaljno obraฤ‘ene u odjeljku "Napomene koriลกtene u TestNG" kasnije u ovom vodiฤu, pa gornji primjer sluลพi samo za postavljanje oฤekivanja. TestNG Anotacije je lakลกe kodirati i ฤitati nego JUnit ekvivalenti, i bitni su pri izvoฤ‘enju testova na Selenium reลกetka gdje je paralelno izvrลกavanje vaลพno.

Kako napisati testne sluฤajeve TestNG

Pisanje a TestNG Testni sluฤaj se odvija u tri koraka:

  1. Napiลกite svoju poslovnu logiku i mjesto TestNG napomene iznad svake metode.
  2. Dodajte metapodatke kao ลกto su naziv klase, naziv grupe i naziv paketa.
  3. Pokreni TestNG klasu iz vaลกeg IDE-a ili naredbenog retka.

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

Sada ฤ‡emo kreirati naลก prvi testni sluฤaj koristeฤ‡i TestNG napomene u SeleniumPrije pisanja testa, postavite novi TestNG projekt u Eclipse i nazovite ga ImeTestNGProjekt.

Postavljanje novog TestNG Projekt

Korak 1) Kliknite Datoteka > Novo > Java Projekt.

Eclipse izbornik za stvaranje novog Java projekt

Korak 2) uฤ‡i ImeTestNGProjekt kao naziv projekta i kliknite Sljedeฤ‡i.

Novo Java ฤarobnjak projekta s nazivom FirstTestNGProjekt

Korak 3) Uvezite TestNG knjiลพnice. Kliknite na Knjiลพnice tabulator, a zatim Dodaj knjiลพnicuโ€ฆ.

Kartica Biblioteke s opcijom Dodaj biblioteku u Eclipse

Korak 4) u Dodaj biblioteku dijalog, odaberite TestNG i kliknite Sljedeฤ‡i.

Odabirom TestNG u dijalogu Dodaj biblioteku

Korak 5) Kliknite zavrลกiti.

Zavrลกetak ฤarobnjaka za dodavanje knjiลพnice

TestNG sada bi se trebao pojaviti na popisu Biblioteka.

TestNG vidljivo na popisu knjiลพnica

Korak 6) Dodajte JAR datoteke koje sadrลพe Selenium API. To dolazi iz Java upravljaฤki program klijenta preuzet s selenium.dev/preuzimanja.

Dijalog za dodavanje vanjskih JAR-ova u Eclipse

Idite do mape u kojoj se nalazi Selenium JAR-ovi se pohranjuju.

Odabirom Selenium JAR datoteke za putanju izgradnje

Nakon dodavanja vanjskih JAR-ova, ekran bi trebao izgledati ovako.

Selenium JAR-ovi dodani na popis biblioteka

Korak 7) Kliknite zavrลกiti. Novo ImeTestNGProjekt pojavljuje se u Pregledniku paketa.

ImeTestNGProjekt vidljiv u Package Exploreru

Kako stvoriti novi TestNG Testna datoteka

Kada je projekt spreman, stvorite novi TestNG file.

Korak 1) Desnom tipkom miลกa kliknite src mapu i odaberite Novo > Ostaloโ€ฆ.

Novi izbornik Ostalo iz mape src u Eclipse

Korak 2) Poveฤ‡aj TestNG mapa, odaberite TestNG razred, i kliknite Sljedeฤ‡i.

TestNG opcija klase u ฤarobnjaku za novo

Korak 3) Unesite vrijednosti prikazane u nastavku i kliknite zavrลกiti, Java datoteka je nazvana ImeTestNGfile.

TestNG ฤarobnjak razreda s FirstTestNGVrijednosti datoteka

Korak 4) Eclipse generira TestNG predloลพak prikazan dolje.

Generirano TestNG predloลพak razreda u Eclipse urednik

Kodiranje vaลกeg prvog TestNG Testni sluฤaj

Stvorite prvi testni sluฤaj koji potvrฤ‘uje naslov Mercury Poฤetna stranica Tours.

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

Stvari koje treba primijetiti:

  • TestNG ne treba main() metoda.
  • Metode ne moraju biti statiฤne.
  • The @Test oznake biljeลกki verifyHomepageTitle() kao testni sluฤaj.
  • Anotacije su dostupne u org.testng.annotations.* paket.
  • The tvrditi razred iz org.testng.Assert pokreฤ‡e provjere.

Moลพete imati viลกe @Test anotacija u jednom TestNG datoteku. To pokrivamo u "Napomene koriลกtene u TestNG" odjeljak.

Izvoฤ‘enje testa

Desnom tipkom miลกa kliknite datoteku i pokrenite je kao TestNG Test. Eclipse proizvodi dva izlaza - tekstualni rezultat u prozoru konzole i grafiฤki rezultat u TestNG Prozor s rezultatima.

TestNG Prozor s rezultatima testa

Eclipse Prozor konzole s TestNG tekstualni izlaz

Provjera izvjeลกฤ‡a Izradio TestNG

Prozor konzole pruลพa tekstualni saลพetak dok TestNG Prozor s rezultatima prikazuje grafiฤki prikaz.

Tekst u odnosu na grafiฤki prikaz TestNG usporedba rezultata

Generiranje HTML izvjeลกฤ‡a

TestNG takoฤ‘er moลพe generirati potpuna HTML izvjeลกฤ‡a.

Korak 1) Nakon trฤanja ImeTestNGfile, desnom tipkom miลกa kliknite projekt i odaberite Osvjeลพiti.

Opcija osvjeลพavanja za TestNG projekt u Eclipse

Korak 2) A testni izlaz pojavljuje se mapa. Proลกirite je i pronaฤ‘ite index.html โ€” HTML izvjeลกฤ‡e za najnovije pokretanje.

mapa test-output s oznaฤenom datotekom index.html

Korak 3) Double-klik index.html da ga otvorim iznutra Eclipse's preglednik. Pritisnite F5 za osvjeลพavanje nakon buduฤ‡ih pokretanja.

TestNG Izvjeลกฤ‡e o HTML indeksu prikazano u Eclipse

Koriลกtene napomene u TestNG

Veฤ‡ ste vidjeli anotaciju @Test. Ostatak ovog odjeljka pokriva najkorisnije napredne anotacije.

Viลกe testnih sluฤajeva

Jedan sam TestNG Datoteka moลพe sadrลพavati viลกe @Test anotacija. Prema zadanim postavkama, metode oznaฤene s @Test izvrลกavaju se abecednim redom. U donjem kodu, metode c_test, a_testi b_test prikazuju se abecednim redom bez obzira na redoslijed izvora.

Viลกe @Test metoda u jednoj TestNG razred

Pokrenite kod i otvorite index.html, Klik Kronoloลกki prikaz.

Kronoloลกki prikaz viลกestrukih TestNG metode

Parametri

Za poniลกtavanje zadanog redoslijeda upotrijebite priority parametar. Parametri su kljuฤne rijeฤi koje mijenjaju ponaลกanje anotacije.

  • Dodijelite vrijednost pomoฤ‡u =.
  • Parametri se stavljaju u zagrade odmah nakon anotacije, kao ลกto je prikazano dolje.

TestNG anotacija sa sintaksom parametara i vrijednosti

TestNG izvrลกava @Test anotacije od najniลพe do najviลกe vrijednosti prioriteta. Brojevi prioriteta ne moraju biti uzastopni.

Puni kod s parametrima prioriteta @Test

HTML izvjeลกฤ‡e potvrฤ‘uje da su se metode izvrลกavale u rastuฤ‡em redoslijedu prioriteta.

TestNG izvjeลกฤ‡e koje prikazuje metode pokrenute po rastuฤ‡em prioritetu

Viลกe parametara

Osim toga priority, @Test prihvaฤ‡a alwaysRun parametar (istina ili laลพ). Za koriลกtenje dva ili viลกe parametara u jednoj anotaciji, odvojite ih zarezom:

@Test(priority = 0, alwaysRun = true)

Primjer viลกe parametara unutar anotacije @Test

@BeforeTest i @AfterTest

@Prije testa Metode pod ovom anotacijom se izvrลกavaju prije prvog testnog sluฤaja u TestNG file.
@AfterTest Metode pod ovom anotacijom se izvrลกavaju nakon svih testnih sluฤajeva u TestNG zavrลกetak datoteke.

Razmotrite kod u nastavku.

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

Iz tablice i koda moลพemo predvidjeti da ฤ‡e slijed biti:

  • 1. โ€” launchBrowser()
  • 2. โ€” verifyHomepageTitle()
  • 3. โ€” terminateBrowser()

Poloลพaj blokova anotacija u izvornoj datoteci ne utjeฤe na njihov redoslijed izvrลกavanja. Pokuลกajte premjestiti metode kao ลกto je prikazano u nastavku.

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

Pokrenite kod i provjerite rezultat.

TestNG rezultat potvrฤ‘uje redoslijed unatoฤ neredovitim biljeลกkama

@BeforeMethod i @AfterMethod

@PrijeMetode Metode pod ovom anotacijom se izvrลกavaju prije svake metode ispitivanja.
@Nakon metode Metode pod ovom anotacijom se izvrลกavaju nakon svake metode ispitivanja.

In Mercury Tours, pretpostavimo da ลพelimo provjeriti naslove dviju ciljnih stranica do kojih se dolazi s poฤetne stranice.

Tri poveznice iz Mercury Poฤetna stranica Tours

Tijek testa je sljedeฤ‡i:

  • Otvorite poฤetnu stranicu i provjerite njezin naslov.
  • Kliknite REGISTRIRAJ SE i provjerite naslov ciljne stranice.
  • Vratite se na poฤetnu stranicu i provjerite naslov.
  • Pritisnite PODRล KA i provjerite naslov ciljne stranice.
  • Vratite se na poฤetnu stranicu i ponovno provjerite naslov.

Donji kod pokazuje kako @BeforeMethod i @AfterMethod obraฤ‘uju ponovljene korake.

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

Nakon pokretanja testa, TestNG izvjeลกtava o donjem slijedu.

TestNG izvjeลกtajni slijed koriลกtenjem BeforeMethod i AfterMethod

Ukratko: postavite korake postavljanja unutra @PrijeMetode i ฤiลกฤ‡enje ili resetiranje navigacije unutra @Nakon metode pa svaki testni sluฤaj poฤinje i zavrลกava u poznatom stanju.

Saลพetak TestNG Biljeลกke

  • @BeforeSuite: pokreฤ‡e se prije svih testova u paketu.
  • @AfterSuite: pokreฤ‡e se nakon svih testova u paketu.
  • @PrijeTestiranja: izvrลกava se prije bilo koje testne metode koja pripada klasama unutar oznaฤiti.
  • @Nakon testa: izvrลกava se nakon svih testnih metoda koje pripadaju klasama unutar oznaฤiti.
  • @PrijeGrupa: izvodi se neposredno prije prve metode ispitivanja koja pripada bilo kojoj navedenoj skupini.
  • @AfterGroups: pokreฤ‡e se ubrzo nakon posljednje metode ispitivanja koja pripada bilo kojoj navedenoj skupini.
  • @PrijeRada: izvrลกava se prije prve testne metode u trenutnoj klasi.
  • @Nakon nastave: izvrลกava se nakon svih testnih metoda u trenutnoj klasi.
  • @PrijeMetode: izvodi se prije svake metode ispitivanja.
  • @NakonMetode: izvodi se nakon svake metode ispitivanja.
  • @Test: oznaฤava metodu kao testni sluฤaj.

Pitanja i odgovori

JUnit 5 moderniziranih JUnit s Jupiter API-jem i modelom proลกirenja. TestNG joลก uvijek vodi u paralelnom izvrลกavanju, grupa na razini paketaping, dependsOn i DataProvider. Mnogi Selenium timovi biraju TestNG za kompletne apartmane i JUnit 5 za jediniฤne testove.

Dodajte parallel=โ€methodsโ€ ili parallel=โ€classesโ€ plus atribut thread-count na oznaka unutar testng.xml. TestNG zatim distribuira metode testiranja po nitima, idealno za Selenium Grid ili cloud radi u viลกe preglednika.

@DataProvider unosi viลกe skupova podataka u jednu @Test metodu. Svaki redak u pruลพatelju je jedno izvrลกenje. To je standardni obrazac za metode voฤ‘ene podacima. Selenium testovi na obrascima, okvirima za pretraลพivanje ili ekranima za prijavu.

Da. AI asistenti kodiranja generiraju TestNG kosture, oznaฤavanje @Test metoda, izgradnja klasa objekata stranice i izrada nizova DataProvider iz primjera CSV-ova, ลกto znatno smanjuje vrijeme izgradnje skele.

Generativna umjetna inteligencija unosi zapisnike testng-results.xml i Surefire, grupira sliฤne kvarove, predlaลพe vjerojatne uzroke i izraฤ‘uje Jira tikete. To skraฤ‡uje trijaลพu nestabilnih testova i pomaลพe voditeljima osiguranja kvalitete da daju prioritet ispravcima neispravne konfiguracije.

Saลพmite ovu objavu uz: