TestNG Opplæringen

⚡ Smart oppsummering

TestNG er en neste generasjon Java testrammeverk som kobles til Selenium for strukturert automatisering, omfattende rapportering og parallell utførelse. Denne veiledningen dekker kjerneannoteringer, prosjektoppsett i Eclipse, skriving av det første testtilfellet, HTML-rapporter og avansert parameterbruk.

  • 🧱 Kjernerammeverk: TestNG strekker JUnit ideer med merknader, gruppeping, og parallell testutførelse for Selenium suiter.
  • 🏷️ Annotasjoner driver flyt: Oppsett, test og nedbryting av @Test-, @BeforeMethod-, @EtterMethod-, @BeforeTest- og @EtterTest-sekvens.
  • 🗂️ Eclipse Oppsett: Bygg en TestNG prosjekt, legg til TestNG bibliotek og Selenium JAR-filer, og generer deretter testklasser fra veiviseren.
  • 📊 rapportering: TestNG produserer tekst-, grafikk- og HTML-rapporter i test-output-mappen, inkludert kronologiske visninger.
  • ⚙️ Parametere: Bruk priority, alwaysRun og dataProvider til å kontrollere utførelsesrekkefølgen og mate data inn i tester.
  • 🤖 AI Boost: AI-kodingsassistenter akselererer TestNG klassegenerering, lokatoroppdateringer og dataProvider-stillas.

TestNG Opplæringen

Hva er TestNG?

TestNG er et rammeverk for automatiseringstesting der «NG» står for «Next Generation». TestNG er inspirert av JUnit og bruker Java annoteringer (@) for å kontrollere testflyten. Det overvinner JUnittidligere begrensninger og er utformet for å gjøre ende-til-ende testing lettere.

Med TestNG Du kan generere en skikkelig rapport og umiddelbart se hvor mange tester som ble bestått, mislyktes eller hoppet over. Du kan også kjøre bare de mislykkede tilfellene på nytt.

For eksempel:

  • Anta at du har fem testtilfeller, hver med sin egen metode, skrevet uten TestNGTre beståtte forsøk; den fjerde feiler. Etter å ha fikset den fjerde, vil du bare kjøre den på nytt, siden de tre første allerede har bestått. Dette er vanskelig å gjøre med vanlig main()-metodekode.
  • TestNG gir en testng-failed.xml fil i test-output mappe. Å kjøre den XML-filen kjører bare de mislykkede tilfellene på nytt.

Utover det vil du lære fordelene med TestNG, hvordan du skriver testmetoder med @Test-annoteringer, og hvordan du konverterer klassene dine til en testpakke som kjører fra Eclipse eller kommandolinjen.

Hvorfor bruk TestNG med Selenium?

Som standard Selenium tester gir ikke pent formaterte resultater. Med TestNG Når den er koblet til strømnettet, sender testkjøreren ut en strukturert rapport du kan dele med teamet.

bro Selenium brukerne foretrekker TestNG enn JUnit på grunn av det bredere funksjonssettet. De viktigste funksjonene for Selenium er:

  • Rapporter som inkluderer antall testtilfeller som er kjørt, bestått, mislyktes og hoppet over.
  • Enkel groingping av testtilfeller via en testng.xml fil, med utførelsesprioriteter.
  • Gjenta en test flere ganger uten løkker ved å bruke invocationCount.
  • Kjør flere tester på flere nettlesere – på tvers avnettlesertesting Støtte.
  • Smidig integrasjon med Maven, Jenkinsog annet CI-verktøy.
  • Readable merknader – for eksempel @BeforeMethod, @EtterMethod, @BeforeTest, @EtterTest.
  • Selenium WebDriver har ingen innebygd rapportering; TestNG fyller dette gapet med en ren HTML-rapport som den nedenfor.

TestNG Eksempel på HTML-rapport for Selenium tester

  • TestNG forenkler testkoden. Du trenger ikke lenger en statisk hovedmetode; annoteringer bestemmer hva som kjøres og når.

Vanlig Java testklassestruktur med hovedmetode

TestNG testklassestruktur ved bruk av annoteringer

  • Ufangede unntak håndteres elegant av TestNGDe rapporteres som mislykkede trinn uten å avslutte hele kjøringen.

fordeler med TestNG enn JUnit

TestNG tilbyr tre store fordeler i forhold til JUnit:

  • Annoteringer er enklere å forstå og bruke.
  • Testtilfeller kan grupperes og prioriteres med mindre innsats.
  • Parallell testkjøring støttes rett ut av boksen.

Hva er en annotasjon i TestNG?

Merknader i TestNG er kodelinjer plassert over en metode for å kontrollere hvordan den kjøres. De starter alltid med @-tegnet. Et enkelt eksempel er vist nedenfor.

Eksempel TestNG annotering over en Java metode

Annotasjoner er dekket i detalj i avsnittet "Annotasjoner brukt i TestNG" senere i denne veiledningen, så eksemplet ovenfor er bare for å sette forventninger. TestNG Annoteringer er enklere å kode og lese enn JUnit ekvivalenter, og de er essensielle når man kjører tester på Selenium Grid der parallell utførelse er viktig.

Hvordan skrive testsaker i TestNG

Skrive a TestNG Testtilfellet tar tre trinn:

  1. Skriv forretningslogikken din og plasser den TestNG merknader over hver metode.
  2. Legg til metadata som klassenavn, gruppenavn og pakkenavn.
  3. Kjør TestNG klasse fra IDE-en din eller kommandolinjen.

Opprett en testtilfelle ved hjelp av TestNG Merknader

Nå skal vi lage vår første testcase ved hjelp av TestNG annoteringer i SeleniumFør du skriver testen, sett opp en ny TestNG prosjekt i Eclipse og ring det FørstTestNGProsjekt.

Sette opp en ny TestNG Prosjekt

Trinn 1) Klikk Fil > Ny > Java Prosjekt.

Eclipse meny for å opprette en ny Java prosjekt

Trinn 2) Enter FørstTestNGProsjekt som prosjektnavnet og klikk neste.

Ny Java prosjektveiviser med navn FirstTestNGProsjekt

Trinn 3) Importer TestNG biblioteker. Klikk på Bibliotekene kategorien og deretter Legg til bibliotek….

Biblioteker-fanen med alternativet Legg til bibliotek i Eclipse

Trinn 4)Legg til bibliotek dialog, velg TestNG og klikk neste.

Velge TestNG i dialogboksen Legg til bibliotek

Trinn 5) Klikk Finish.

Fullfører veiviseren for å legge til bibliotek

TestNG skal nå vises i biblioteklisten.

TestNG synlig i biblioteklisten

Trinn 6) Legg til JAR-filene som inneholder Selenium API. Disse kommer fra Java klientdriveren lastet ned fra selenium.dev/nedlastinger.

Legg til eksterne JAR-filer i dialogboksen Eclipse

Naviger til mappen der Selenium JAR-filer lagres.

Velge Selenium JAR-filer for byggebanen

Etter at du har lagt til de eksterne JAR-filene, skal skjermen se slik ut.

Selenium JAR-filer lagt til i biblioteklisten

Trinn 7) Klikk Finish. Den nye FørstTestNGProsjekt vises i pakkeutforskeren.

FørstTestNGProsjekt synlig i Pakkeutforsker

Hvordan lage en ny TestNG Test fil

Når prosjektet er klart, opprett et nytt TestNG filen.

Trinn 1) Høyreklikk på src mappe og velg Ny > Annet….

Ny Annen-meny fra src-mappen i Eclipse

Trinn 2) Utvid TestNG mappe, velg TestNG klasse, og klikk neste.

TestNG klassealternativet i den nye veiviseren

Trinn 3) Skriv inn verdiene som vises nedenfor, og klikk Finish. De Java filen er navngitt FørstTestNGfilet.

TestNG klasseveiviser med FirstTestNGFilverdier

Trinn 4) Eclipse genererer TestNG malen vist nedenfor.

Generert TestNG klassemal i Eclipse redaktør

Koding av din første TestNG Testsak

Lag den første testforsøk som bekrefter tittelen på Mercury Turens hjemmeside.

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

Ting å legge merke til:

  • TestNG trenger ikke en main() metoden.
  • Metoder trenger ikke å være statiske.
  • Ocuco @Test annotasjonsmerker verifyHomepageTitle() som et prøvetilfelle.
  • Annotasjoner finnes i org.testng.annotations.* pakke.
  • Ocuco hevde klasse fra org.testng.Assert driververifiseringer.

Du kan ha flere @Test-annoteringer i én TestNG filen. Vi dekker det i "Annotasjoner brukt i TestNG" seksjon.

Kjører testen

Høyreklikk på filen og kjør den som en TestNG test. Eclipse produserer to utganger – et tekstresultat i konsollvinduet og et grafisk resultat i TestNG Resultatvinduet.

TestNG Resultatvindu med testutfall

Eclipse Konsollvindu med TestNG tekstutgang

Sjekker rapporter opprettet av TestNG

Konsollvinduet gir et tekstbasert sammendrag mens TestNG Resultatvinduet viser en grafisk visning.

Tekst kontra grafisk TestNG resultatsammenligning

Generering av HTML-rapporter

TestNG kan også generere fullstendige HTML-rapporter.

Trinn 1) Etter å ha kjørt FørstTestNGfilet, høyreklikk på prosjektet og velg Forfriske.

Oppdateringsalternativ for TestNG prosjekt i Eclipse

Trinn 2) A testutgang mappen vises. Utvid den og finn den index.html — HTML-rapporten for den siste kjøringen.

test-output-mappen med index.html uthevet

Trinn 3) Double-klikk index.html å åpne den inni Eclipses nettleser. Trykk F5 for å oppdatere etter fremtidige kjøringer.

TestNG HTML-indeksrapport gjengitt i Eclipse

Annotasjoner brukt i TestNG

Du har allerede sett @Test-annotasjonen. Resten av denne delen dekker de mest nyttige avanserte annotasjonene.

Flere testtilfeller

En enkelt TestNG filen kan inneholde flere @Test-annoteringer. Som standard kjøres metoder som er annotert med @Test i alfabetisk rekkefølge. I koden nedenfor, metoder c_test, a_testog b_test kjøres alfabetisk uavhengig av kilderekkefølge.

Flere @Test-metoder i én TestNG klasse

Kjør koden og åpne index.html. Klikk Kronologisk visning.

Kronologisk oversikt over flere TestNG metoder

Parametre

For å overstyre standardrekkefølgen, bruk priority parameter. Parametre er nøkkelord som endrer oppførselen til en annotasjon.

  • Tildel en verdi med =.
  • Pakk parametere i parenteser plassert rett etter annotasjonen, som vist nedenfor.

TestNG annotering med parameter- og verdisyntaks

TestNG kjører @Test-annoteringer fra den laveste prioritetsverdien til den høyeste. Prioritetsnumrene trenger ikke å være sammenhengende.

Full kode med @Test prioritetsparametere

HTML-rapporten bekrefter at metodene ble utført i stigende prioritetsrekkefølge.

TestNG rapport som viser metoder kjørt etter stigende prioritet

Flere parametere

Foruten priority, @Test aksepterer alwaysRun parameter (sann eller usann). For å bruke to eller flere parametere i én annotasjon, skill dem med komma:

@Test(priority = 0, alwaysRun = true)

Eksempel på flere parametere i en @Test-annotasjon

@BeforeTest og @AfterTest

@FørTest Metoder under denne annotasjonskjøringen før den første testsaken i TestNG fil.
@Ettertest Metoder under denne annotasjonskjøringen etter alle testtilfeller i TestNG filfinish.

Tenk på koden nedenfor.

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

Fra tabellen og koden kan vi forutsi at sekvensen vil være:

  • 1. — launchBrowser()
  • 2. — verifyHomepageTitle()
  • 3. — terminateBrowser()

Plasseringen av annotasjonsblokker i kildefilen påvirker ikke utførelsesrekkefølgen deres. Prøv å omstokke metodene som vist nedenfor.

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

Kjør koden og bekreft resultatet.

TestNG resultat som bekrefter rekkefølgen til tross for rotete annoteringer

@BeforeMethod og @AfterMethod

@BeforeMethod Metoder under denne annotasjonskjøringen før hver testmetode.
@AfterMethod Metoder under denne annotasjonskjøringen etter hver testmetode.

In Mercury Omvisninger, anta at vi vil bekrefte titlene på to målsider som nås fra hjemmesiden.

Tre lenker fra Mercury Turens hjemmeside

Testens flyt er:

  • Åpne hjemmesiden og bekreft tittelen.
  • Klikk REGISTRER og bekreft tittelen på målsiden.
  • Gå tilbake til hjemmesiden og bekreft tittelen.
  • Klikk STØTTE og bekreft tittelen på målsiden.
  • Gå tilbake til hjemmesiden og bekreft tittelen på nytt.

Koden nedenfor viser hvordan @BeforeMethod og @AfterMethod håndterer de gjentatte trinnene.

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

Etter å ha kjørt testen, TestNG rapporterer sekvensen nedenfor.

TestNG rapportsekvens ved bruk av Førmetoden og Ettermetoden

Kort sagt: plasser oppsettstrinnene inni @BeforeMethod og opprydding eller tilbakestilling av navigasjon inni @AfterMethod så hver testtilfelle starter og slutter i en kjent tilstand.

Oppsummering av TestNG Merknader

  • @BeforeSuite: kjører før alle tester i suiten.
  • @AfterSuite: kjører etter alle testene i suiten.
  • @Førtest: kjører før noen testmetode som tilhører klassene i en tagg.
  • @Ettertest: kjører etter alle testmetoder som tilhører klassene i en tagg.
  • @FørGrupper: kjører like før den første testmetoden som tilhører en av de listede gruppene.
  • @EtterGrupper: kjører kort tid etter den siste testmetoden som tilhører en av de oppførte gruppene.
  • @FørKlassen: kjører før den første testmetoden i gjeldende klasse.
  • @EtterKlassen: kjører etter alle testmetoder i gjeldende klasse.
  • @Førmetoden: kjøres før hver testmetode.
  • @Ettermetoden: kjører etter hver testmetode.
  • @Test: markerer metoden som et testtilfelle.

Spørsmål og svar

JUnit 5 moderniserte JUnit med Jupiter API-et og utvidelsesmodellen. TestNG leder fortsatt på parallell utførelse, gruppe på suite-nivåping, dependsOn og DataProvider. Mange Selenium lagvalg TestNG for komplette suiter og JUnit 5 for enhetstester.

Legg til parallel="methods" eller parallel="classes" pluss et thread-count-attributt på taggen i testng.xml. TestNG distribuerer deretter testmetoder på tvers av tråder, ideelt for Selenium Kjøring av nettlesere i rutenett eller sky.

@DataProvider mater flere datasett inn i én @Test-metode. Hver rad i leverandøren er én utførelse. Det er standardmønsteret for datadrevne Selenium tester mot skjemaer, søkebokser eller påloggingsskjermer.

Ja. AI kodeassistenter genererer TestNG skjeletter, annotere @Test-metoder, bygge Page Object-klasser og utkaste DataProvider-arrayer fra eksempel-CSV-er, noe som reduserer stillastiden kraftig.

Generativ AI inntar testng-results.xml og Surefire-logger, grupperer lignende feil, foreslår sannsynlige rotårsaker og utarbeider Jira-tickets. Dette forkorter sorteringen av ustabile tester og hjelper QA-ledere med å prioritere CI-rettelser.

Oppsummer dette innlegget med: