TestNG tutorial

โšก Smart opsummering

TestNG er en nรฆste generation Java testramme, der parrer sig med Selenium til struktureret automatisering, omfattende rapportering og parallel udfรธrelse. Denne vejledning dรฆkker de centrale annotationer, projektopsรฆtning i Eclipse, skrivning af den fรธrste testcase, HTML-rapporter og avanceret parameterbrug.

  • ๐Ÿงฑ Kerneramme: TestNG udvider JUnit idรฉer med annotationer, gruppepingog parallel testudfรธrelse for Selenium suiter.
  • ๐Ÿท๏ธ Annotationer driver flow: Opsรฆtning, test og nedtagning af @Test-, @BeforeMethod-, @AfterMethod-, @BeforeTest- og @AfterTest-sekvenser.
  • ๐Ÿ—‚๏ธ Eclipse Opsรฆtning: Byg en TestNG projekt, tilfรธj TestNG bibliotek og Selenium JAR-filer, og generer derefter testklasser fra guiden.
  • ๐Ÿ“Š Rapportering: TestNG producerer tekst-, grafik- og HTML-rapporter i test-output-mappen, inklusive kronologiske visninger.
  • ๐Ÿ‡ง๐Ÿ‡ท Parametre: Brug priority, alwaysRun og dataProvider til at styre udfรธrelsesrรฆkkefรธlgen og indfรธre data i tests.
  • ๐Ÿค– AI Boost: AI-kodningsassistenter accelererer TestNG klassegenerering, locator-opdateringer og dataProvider-scaffolding.

TestNG tutorial

Hvad er TestNG?

TestNG er et framework for automatiseringstest, hvor "NG" stรฅr for "Next Generation". TestNG er inspireret af JUnit og anvendelser Java annotationer (@) til at styre testflowet. Det overvinder JUnit's tidligere begrรฆnsninger og er designet til at gรธre ende-til-ende test lettere.

Med TestNG Du kan generere en ordentlig rapport og straks se, hvor mange tests der bestod, mislykkedes eller blev sprunget over. Du kan ogsรฅ kun kรธre de mislykkede sager igen.

For eksempel:

  • Antag, at du har fem testcases, hver med sin egen metode, skrevet uden TestNGTre bestรฅelser; den fjerde fejler. Efter at have rettet den fjerde, skal du kun kรธre den ene igen, da de fรธrste tre allerede er bestรฅet. Dette er svรฆrt at gรธre med almindelig main()-metodekode.
  • TestNG tilvejebringer en testng-failed.xml fil i test-output mappe. Kรธrsel af den XML genudfรธrer kun de mislykkede tilfรฆlde.

Derudover vil du lรฆre fordelene ved TestNG, hvordan man skriver testmetoder med @Test-annotationer, og hvordan man konverterer sine klasser til en testsuite, der kรธrer fra Eclipse eller kommandolinjen.

Hvorfor brug TestNG med Selenium?

Som standard Selenium tests producerer ikke pรฆnt formaterede resultater. Med TestNG Nรฅr den er tilsluttet, udsender testlรธberen en struktureret rapport, som du kan dele med teamet.

bro Selenium brugerne foretrรฆkker TestNG i lรธbet af JUnit pรฅ grund af dets bredere funktionssรฆt. Nรธglefunktionerne for Selenium er:

  • Rapporter, der inkluderer antallet af kรธrte, bestรฅede, mislykkede og sprungne tests.
  • Let fugningping af testcases via en testng.xml fil med udfรธrelsesprioriteter.
  • Gentag en test flere gange uden lรธkker ved hjรฆlp af invocationCount.
  • Kรธr flere tests pรฅ flere browsere โ€” pรฅ tvรฆrs afbrowser test Support.
  • Problemfri integration med Maven, Jenkinsog andre CI-vรฆrktรธjer.
  • Readable annoteringer โ€” for eksempel @BeforeMethod, @EfterMethod, @BeforeTest, @EfterTest.
  • Selenium WebDriver har ingen indbygget rapportering; TestNG udfylder dette hul med en ren HTML-rapport som den nedenfor.

TestNG Eksempel pรฅ HTML-rapport for Selenium tests

  • TestNG forenkler testkode. Du behรธver ikke lรฆngere en statisk main-metode; annotationer bestemmer, hvad der kรธrer, og hvornรฅr.

Sรฆdvanlig Java testklassestruktur med hovedmetode

TestNG testklassestruktur ved hjรฆlp af annotationer

  • Uopfangede undtagelser hรฅndteres elegant af TestNGDe rapporteres som mislykkede trin uden at hele kรธrslen afsluttes.

Fordele ved TestNG i lรธbet af JUnit

TestNG tilbyder tre store fordele i forhold til JUnit:

  • Annotationer er nemmere at forstรฅ og bruge.
  • Testcases kan grupperes og prioriteres med mindre indsats.
  • Parallel testudfรธrelse understรธttes direkte fra starten.

Hvad er en annotation i TestNG?

Anmรฆrkninger i TestNG er linjer kode placeret over en metode for at kontrollere, hvordan den udfรธres. De starter altid med @-tegnet. Et simpelt eksempel er vist nedenfor.

Eksempel TestNG anmรฆrkning ovenfor en Java metode

Annotationer er beskrevet i detaljer i afsnittet "Annotationer brugt i TestNG" senere i denne vejledning, sรฅ eksemplet ovenfor er blot for at sรฆtte forventninger. TestNG Annotationer er nemmere at kode og lรฆse end JUnit รฆkvivalenter, og de er essentielle, nรฅr man kรธrer tests pรฅ Selenium Grid hvor parallel udfรธrelse er vigtig.

Sรฅdan skriver du testcases i TestNG

Skrivning a TestNG Testcasen tager tre trin:

  1. Skriv din forretningslogik og placering TestNG annotationer over hver metode.
  2. Tilfรธj metadata sรฅsom klassenavn, gruppenavn og pakkenavn.
  3. Kรธr TestNG klasse fra dit IDE eller kommandolinjen.

Opret en testcase ved hjรฆlp af TestNG Annotationer

Nu vil vi oprette vores fรธrste testcase ved hjรฆlp af TestNG annotationer i SeleniumInden du skriver testen, skal du oprette en ny TestNG projekt i Eclipse og kalde det FornavnTestNGProjekt.

Opsรฆtning af en ny TestNG Projekt

Trin 1) Klik Fil > Ny > Java Projekt.

Eclipse menu for at oprette en ny Java projekt

Trin 2) Indtast FornavnTestNGProjekt som projektnavnet og klik pรฅ Nรฆste.

Ny Java projektguide med navn FirstTestNGProjekt

Trin 3) Importer TestNG biblioteker. Klik pรฅ Biblioteker fanebladet og derefter Tilfรธj bibliotekโ€ฆ.

Fanen Biblioteker med muligheden Tilfรธj bibliotek i Eclipse

Trin 4) I Tilfรธj bibliotek dialog, vรฆlg TestNG og klik Nรฆste.

Valg TestNG i dialogboksen Tilfรธj bibliotek

Trin 5) Klik Finish.

Afslutning af guiden Tilfรธj bibliotek

TestNG burde nu vises pรฅ bibliotekslisten.

TestNG synlig pรฅ bibliotekslisten

Trin 6) Tilfรธj JAR-filerne, der indeholder Selenium API. Disse kommer fra Java klientdriveren downloadet fra selenium.dev/downloads.

Dialogboksen Tilfรธj eksterne JAR-filer i Eclipse

Naviger til den mappe, hvor Selenium JAR-filer gemmes.

Valg Selenium JAR-filer til byggestien

Efter tilfรธjelse af de eksterne JAR-filer, skulle skรฆrmen gerne se sรฅdan ud.

Selenium JAR-filer fรธjet til bibliotekslisten

Trin 7) Klik Finish. De nye FornavnTestNGProjekt vises i Pakke Explorer.

FornavnTestNGProjekt synligt i Pakkestifinder

Sรฅdan opretter du en ny TestNG Test fil

Nรฅr projektet er klar, skal du oprette et nyt TestNG fil.

Trin 1) Hรธjreklik pรฅ src mappe og vรฆlg Ny > Andetโ€ฆ.

Ny Anden-menu fra src-mappen i Eclipse

Trin 2) Udvid TestNG mappe, vรฆlg TestNG klasse, og klik Nรฆste.

TestNG klasseindstilling i den nye guide

Trin 3) Indtast de viste vรฆrdier nedenfor, og klik pรฅ Finish. Det Java filen er navngivet FornavnTestNGFile (Felt).

TestNG klassetroldmand med FirstTestNGFilvรฆrdier

Trin 4) Eclipse genererer TestNG skabelon vist nedenfor.

genereret TestNG klasseskabelon i Eclipse editor

Kodning af din fรธrste TestNG Test sag

Opret den fรธrste test sag der bekrรฆfter titlen pรฅ Mercury Tours 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 at bemรฆrke:

  • TestNG behรธver ikke en main() fremgangsmรฅde.
  • Metoder behรธver ikke at vรฆre statiske.
  • @Prรธve annotationsmรฆrker verifyHomepageTitle() som en testsag.
  • Annotationer findes i org.testng.annotations.* pakke.
  • Hรฆvde klasse fra org.testng.Assert drevverifikationer.

Du kan have flere @Test-annotationer i en enkelt TestNG fil. Vi dรฆkker det i "Annotationer brugt i TestNG" sektion.

Kรธrer testen

Hรธjreklik pรฅ filen og kรธr den som en TestNG test. Eclipse producerer to output - et tekstresultat i konsolvinduet og et grafisk resultat i TestNG Resultatvindue.

TestNG Resultatvindue med testresultat

Eclipse Konsolvindue med TestNG tekstoutput

Kontrol af rapporter oprettet af TestNG

Konsolvinduet viser et tekstbaseret resumรฉ, mens TestNG Resultatvinduet viser en grafisk visning.

Tekst vs. grafisk TestNG resultatsammenligning

Generering af HTML-rapporter

TestNG kan ogsรฅ generere komplette HTML-rapporter.

Trin 1) Efter at have kรธrt FornavnTestNGFile (Felt), hรธjreklik pรฅ projektet og vรฆlg Opfrisk.

Opdateringsmulighed for TestNG projekt i Eclipse

Trin 2) A test-output mappen vises. Udvid den og find den index.html โ€” HTML-rapporten for den seneste kรธrsel.

test-output-mappen med index.html fremhรฆvet

Trin 3) Double-klik index.html at รฅbne den indeni Eclipses browser. Tryk pรฅ F5 for at opdatere efter fremtidige kรธrsel.

TestNG HTML-indeksrapport gengivet i Eclipse

Annotationer brugt i TestNG

Du har allerede set @Test-annotationen. Resten af โ€‹โ€‹dette afsnit dรฆkker de mest nyttige avancerede annotationer.

Flere testcases

En enkelt TestNG Filen kan indeholde flere @Test-annotationer. Som standard udfรธres metoder, der er annoteret med @Test, i alfabetisk rรฆkkefรธlge. I koden nedenfor udfรธres metoderne c_test, a_testog b_test kรธres alfabetisk uanset kilderรฆkkefรธlge.

Flere @Test-metoder i รฉn TestNG klasse

Kรธr koden og รฅbn index.html. Klik Kronologisk oversigt.

Kronologisk overblik over flere TestNG metoder

Driftsparametre

For at tilsidesรฆtte standardrรฆkkefรธlgen skal du bruge priority parameter. Parametre er nรธgleord, der รฆndrer en annotations opfรธrsel.

  • Tildel en vรฆrdi med =.
  • Ombryd parametre i parenteser placeret umiddelbart efter annotationen, som vist nedenfor.

TestNG annotering med parameter- og vรฆrdisyntaks

TestNG udfรธrer @Test-annotationer fra den laveste prioritetsvรฆrdi til den hรธjeste. Prioritetsnumrene behรธver ikke at vรฆre fortlรธbende.

Fuld kode med @Test prioritetsparametre

HTML-rapporten bekrรฆfter, at metoderne blev udfรธrt i stigende prioritetsrรฆkkefรธlge.

TestNG rapport, der viser metoder kรธrt efter stigende prioritet

Flere parametre

Udover priority, @Test accepterer alwaysRun parameter (sand eller falsk). For at bruge to eller flere parametre i en enkelt annotation skal du adskille dem med et komma:

@Test(priority = 0, alwaysRun = true)

Eksempel pรฅ flere parametre i en @Test-annotation

@BeforeTest og @AfterTest

@FรธrTest Metoder under denne annotationskรธrsel fรธr den fรธrste testcase i TestNG fil.
@EfterTest Metoder under denne annotationskรธrsel efter alle testsager i TestNG filfinish.

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

Ud fra tabellen og koden kan vi forudsige, at sekvensen vil vรฆre:

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

Placeringen af โ€‹โ€‹annotationsblokke i kildefilen pรฅvirker ikke deres udfรธrelsesrรฆkkefรธlge. Prรธv at omrokere metoderne 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);
    }
}

Kรธr koden og verificer resultatet.

TestNG Resultat bekrรฆfter rรฆkkefรธlge trods rodede annotationer

@BeforeMethod og @AfterMethod

@FรธrMetode Metoder under denne annotationskรธrsel fรธr hver testmetode.
@AfterMethod Metoder under denne annotationskรธrsel efter hver testmetode.

In Mercury Rundvisninger, lad os antage, at vi vil verificere titlerne pรฅ to mรฅlsider, der nรฅs fra hjemmesiden.

Tre links fra Mercury Tours hjemmeside

Testens forlรธb er:

  • ร…bn hjemmesiden og bekrรฆft dens titel.
  • Klik pรฅ REGISTER og bekrรฆft titlen pรฅ dens mรฅlside.
  • Gรฅ tilbage til forsiden og bekrรฆft titlen.
  • Klik pรฅ SUPPORT og bekrรฆft titlen pรฅ dens mรฅlside.
  • Gรฅ tilbage til forsiden og bekrรฆft titlen igen.

Koden nedenfor viser, hvordan @BeforeMethod og @AfterMethod hรฅndterer de gentagne trin.

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

Efter at have kรธrt testen, TestNG rapporterer sekvensen nedenfor.

TestNG rapportsekvens ved hjรฆlp af BeforeMethod og AfterMethod

Kort sagt: placer opsรฆtningstrinnene indeni @FรธrMetode og oprydning eller nulstilling af navigation indeni @AfterMethod sรฅ hver testcase starter og slutter i en kendt tilstand.

Sammenfatning af TestNG Annotationer

  • @BeforeSuite: kรธrer fรธr alle tests i pakken.
  • @AfterSuite: kรธrer efter alle tests i pakken.
  • @FรธrTest: kรธrer fรธr enhver testmetode, der tilhรธrer klasserne i en mรฆrke.
  • @EfterTest: kรธrer efter alle testmetoder, der tilhรธrer klasserne i en mรฆrke.
  • @FรธrGrupper: kรธrer kort fรธr den fรธrste testmetode, der tilhรธrer en af โ€‹โ€‹de anfรธrte grupper.
  • @EfterGrupper: kรธrer kort efter den sidste testmetode, der tilhรธrer en af โ€‹โ€‹de anfรธrte grupper.
  • @FรธrKlassen: kรธrer fรธr den fรธrste testmetode i den aktuelle klasse.
  • @EfterKlassen: kรธrer efter alle testmetoder i den aktuelle klasse.
  • @FรธrMetoden: kรธrer fรธr hver testmetode.
  • @EfterMetode: kรธrer efter hver testmetode.
  • @Prรธve: markerer metoden som en testcase.

Ofte Stillede Spรธrgsmรฅl

JUnit 5 moderniserede JUnit med Jupiter API'en og udvidelsesmodellen. TestNG fรธrer stadig an pรฅ parallel udfรธrelse, gruppe pรฅ suite-niveauping, dependsOn og DataProvider. Mange Selenium holdvalg TestNG for komplette suiter og JUnit 5 til enhedstests.

Tilfรธj parallel="methods" eller parallel="classes" plus en trรฅdantal-attribut pรฅ tagget i testng.xml. TestNG distribuerer derefter testmetoder pรฅ tvรฆrs af trรฅde, ideelt til Selenium Kรธrer pรฅ tvรฆrs af browsere i gitter eller cloud.

@DataProvider indfรธrer flere datasรฆt i en enkelt @Test-metode. Hver rรฆkke i provideren er รฉn udfรธrelse. Det er standardmรธnsteret for datadrevne Selenium tests mod formularer, sรธgefelter eller loginskรฆrme.

Ja. AI kodningsassistenter genererer TestNG skeletter, annotere @Test-metoder, bygge Page Object-klasser og udarbejde DataProvider-arrays fra eksempel-CSV'er, hvilket reducerer scaffolding-tiden markant.

Generativ AI indtager testng-results.xml og Surefire-logfiler, grupperer lignende fejl, foreslรฅr sandsynlige rodรฅrsager og udarbejder Jira-tickets. Dette forkorter sorteringen af โ€‹โ€‹ustabile tests og hjรฆlper QA-ledere med at prioritere CI-rettelser.

Opsummer dette indlรฆg med: