TestNG Handledning

โšก Smart sammanfattning

TestNG รคr en nรคsta generation Java testramverk som parar ihop med Selenium fรถr strukturerad automatisering, omfattande rapportering och parallell exekvering. Den hรคr handledningen tรคcker de viktigaste annoteringarna, projektkonfigurationen i Eclipse, skriva det fรถrsta testfallet, HTML-rapporter och avancerad parameteranvรคndning.

  • ๐Ÿงฑ Kรคrnramverk: TestNG strรคcker JUnit idรฉer med anteckningar, groupingoch parallell testkรถrning fรถr Selenium sviter.
  • ๐Ÿท๏ธ Annoteringar driver flรถde: Installation, test och nedmontering av sekvenser fรถr @Test, @BeforeMethod, @AfterMethod, @BeforeTest och @AfterTest.
  • ๐Ÿ—‚๏ธ Eclipse Setup: Bygg en TestNG projektet, lรคgg till TestNG bibliotek och Selenium JAR-filer och generera sedan testklasser frรฅn guiden.
  • ๐Ÿ“Š Rapportering: TestNG producerar text-, grafik- och HTML-rapporter i test-output-mappen, inklusive kronologiska vyer.
  • โš™๏ธ Parametrar: Anvรคnd priority, alwaysRun och dataProvider fรถr att styra kรถrningsordningen och mata in data i tester.
  • ๐Ÿค– AI Boost: AI-kodningsassistenter accelererar TestNG klassgenerering, lokaliseringsuppdateringar och dataProvider-scaffolding.

TestNG Handledning

Vad รคr TestNG?

TestNG รคr ett ramverk fรถr automatiseringstestning dรคr "NG" stรฅr fรถr "Next Generation". TestNG รคr inspirerad av JUnit och anvรคndningar Java annoteringar (@) fรถr att kontrollera testflรถdet. Det รถvervinner JUnits tidigare begrรคnsningar och รคr utformad fรถr att gรถra test frรฅn slut till slut lรคttare.

Med TestNG Du kan generera en korrekt rapport och omedelbart se hur mรฅnga tester som godkรคnts, misslyckats eller hoppats รถver. Du kan ocksรฅ kรถra om endast de misslyckade fallen.

Till exempel:

  • Anta att du har fem testfall, vart och ett med sin egen metod, skrivna utan TestNGTre godkรคnda; den fjรคrde misslyckas. Efter att ha รฅtgรคrdat den fjรคrde vill du bara kรถra den igen, eftersom de tre fรถrsta redan har godkรคnts. Detta รคr svรฅrt att gรถra med vanlig main()-metodkod.
  • TestNG tillhandahรฅller en testng-failed.xml fil i test-output mapp. Att kรถra den XML-filen kรถr endast de misslyckade fallen igen.

Utรถver det kommer du att lรคra dig fรถrdelarna med TestNG, hur man skriver testmetoder med @Test-annoteringar och hur man konverterar sina klasser till en testsvit som kรถrs frรฅn Eclipse eller kommandoraden.

Varfรถr anvรคnda TestNG med Selenium?

Som standard Selenium tester ger inte snyggt formaterade resultat. Med TestNG Nรคr den รคr inkopplad genererar testkรถraren en strukturerad rapport som du kan dela med teamet.

bro Selenium anvรคndarna fรถredrar TestNG รถver JUnit pรฅ grund av dess bredare funktionsuppsรคttning. De viktigaste funktionerna fรถr Selenium รคr:

  • Rapporter som inkluderar antalet kรถrda, godkรคnda, misslyckade och hoppade รถver testfall.
  • Lรคtt grogping av testfall via en testng.xml fil, med exekveringsprioriteter.
  • Upprepa ett test flera gรฅnger utan loopar med invocationCount.
  • Kรถr flera tester pรฅ flera webblรคsare โ€” korsviswebblรคsartestning stรถd.
  • Smidig integration med Maven, Jenkinsoch andra CI-verktyg.
  • Readable anteckningar โ€” till exempel @BeforeMethod, @EfterMethod, @BeforeTest, @EfterTest.
  • Selenium WebDriver har ingen inbyggd rapportering; TestNG fyller det gapet med en ren HTML-rapport som den nedan.

TestNG HTML-rapportexempel fรถr Selenium tester

  • TestNG fรถrenklar testkoden. Du behรถver inte lรคngre en statisk huvudmetod; annoteringar avgรถr vad som kรถrs och nรคr.

Vanliga Java testklassstruktur med huvudmetod

TestNG testklassstruktur med hjรคlp av annoteringar

  • Oupptรคckta undantag hanteras smidigt av TestNGDe rapporteras som misslyckade steg utan att hela kรถrningen avslutas.

Fรถrdelar med TestNG รถver JUnit

TestNG erbjuder tre stora fรถrdelar jรคmfรถrt med JUnit:

  • Annoteringar รคr lรคttare att fรถrstรฅ och anvรคnda.
  • Testfall kan grupperas och prioriteras med mindre anstrรคngning.
  • Parallell testkรถrning stรถds direkt ur lรฅdan.

Vad รคr en annotering i TestNG?

Anteckningar i TestNG รคr kodrader som placeras ovanfรถr en metod fรถr att styra hur den exekveras. De bรถrjar alltid med @-tecknet. Ett enkelt exempel visas nedan.

Exempelvis TestNG anteckning ovanfรถr en Java metod

Annoteringar behandlas i detalj i avsnittet "Annoteringar som anvรคnds i TestNG" senare i den hรคr handledningen, sรฅ exemplet ovan รคr bara fรถr att sรคtta fรถrvรคntningar. TestNG annoteringar รคr enklare att koda och lรคsa รคn JUnit ekvivalenter, och de รคr viktiga nรคr man kรถr tester pรฅ Selenium Rutnรคt dรคr parallell exekvering รคr viktig.

Hur man skriver testfall i TestNG

Skriva a TestNG testfallet tar tre steg:

  1. Skriv din affรคrslogik och placera den TestNG anteckningar ovanfรถr varje metod.
  2. Lรคgg till metadata som klassnamn, gruppnamn och paketnamn.
  3. Kรถr TestNG klassen frรฅn din IDE eller kommandoraden.

Skapa ett testfall med hjรคlp av TestNG Anteckningar

Nu ska vi skapa vรฅrt fรถrsta testfall med hjรคlp av TestNG anteckningar i SeleniumInnan du skriver testet, skapa ett nytt TestNG projekt i Eclipse och kalla det FรถrnamnTestNGProjekt.

Konfigurera en ny TestNG Projekt

Steg 1) Klicka Arkiv > Nytt > Java Projekt.

Eclipse meny fรถr att skapa en ny Java projektet

Steg 2) ange FรถrnamnTestNGProjekt som projektnamn och klicka pรฅ Nรคsta.

Nytt Java projektguiden med namnet FirstTestNGProjekt

Steg 3) Importera TestNG bibliotek. Klicka pรฅ bibliotek fliken och sedan Lรคgg till bibliotekโ€ฆ.

Fliken Bibliotek med alternativet Lรคgg till bibliotek i Eclipse

Steg 4) I Lรคgg till bibliotek dialog, vรคlj TestNG och klicka Nรคsta.

Vรคlja TestNG i dialogrutan Lรคgg till bibliotek

Steg 5) Klicka Finish.

Slutfรถr guiden Lรคgg till bibliotek

TestNG borde nu visas i bibliotekslistan.

TestNG syns i bibliotekslistan

Steg 6) Lรคgg till JAR-filerna som innehรฅller Selenium API. Dessa kommer frรฅn Java klientdrivrutinen hรคmtad frรฅn selenium.dev/nedladdningar.

Dialogrutan Lรคgg till externa JAR-filer i Eclipse

Navigera till mappen dรคr Selenium JAR-filer lagras.

Vรคlja Selenium JAR-filer fรถr byggsรถkvรคgen

Efter att du har lagt till de externa JAR-filerna bรถr skรคrmen se ut sรฅ hรคr.

Selenium JAR-filer tillagda i bibliotekslistan

Steg 7) Klicka Finish. Den nya FรถrnamnTestNGProjekt visas i Paketutforskaren.

FรถrnamnTestNGProjekt synligt i Paketutforskaren

Hur man skapar en ny TestNG Testfil

Nรคr projektet รคr klart, skapa ett nytt TestNG fil.

Steg 1) Hรถgerklicka pรฅ src mapp och vรคlj Nytt > Annatโ€ฆ.

Ny Annan-meny frรฅn src-mappen i Eclipse

Steg 2) Expandera TestNG mapp, vรคlj TestNG klass, och klicka Nรคsta.

TestNG klassalternativ i Ny-guiden

Steg 3) Ange vรคrdena som visas nedan och klicka Finish. De Java filen heter FรถrnamnTestNGFil.

TestNG klassguiden med FirstTestNGFilvรคrden

Steg 4) Eclipse genererar TestNG mallen som visas nedan.

Genererad TestNG klassmall i Eclipse redaktรถr

Kodning av din fรถrsta TestNG Testfall

Skapa den fรถrsta testfall som verifierar titeln pรฅ Mercury Tours hemsida.

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

Saker att lรคgga mรคrke till:

  • TestNG behรถver inte a main() metod.
  • Metoder behรถver inte vara statiska.
  • Ocuco-landskapet @Testa anteckningsmรคrken verifyHomepageTitle() som ett testfall.
  • Annoteringar finns i org.testng.annotations.* paket.
  • Ocuco-landskapet Hรคvda klass frรฅn org.testng.Assert driver verifieringar.

Du kan ha flera @Test-annoteringar i en och samma TestNG filen. Vi tar upp det i "Annoteringar som anvรคnds i TestNG" sektion.

Kรถr testet

Hรถgerklicka pรฅ filen och kรถr den som en TestNG testet. Eclipse producerar tvรฅ utdata โ€” ett textresultat i konsolfรถnstret och ett grafiskt resultat i TestNG Resultatfรถnster.

TestNG Resultatfรถnster med testresultat

Eclipse Konsolfรถnster med TestNG textutmatning

Kontrollera rapporter skapade av TestNG

Konsolfรถnstret visar en textbaserad sammanfattning medan TestNG Resultatfรถnstret visar en grafisk vy.

Text kontra grafisk TestNG resultatjรคmfรถrelse

Generera HTML-rapporter

TestNG kan ocksรฅ generera fullstรคndiga HTML-rapporter.

Steg 1) Efter kรถrning FรถrnamnTestNGFil, hรถgerklicka pรฅ projektet och vรคlj refresh.

Uppdateringsalternativ fรถr TestNG projekt i Eclipse

Steg 2) A testutdata mappen visas. Expandera den och leta reda pรฅ index.html โ€” HTML-rapporten fรถr den senaste kรถrningen.

test-output-mappen med index.html markerad

Steg 3) Double-klick index.html att รถppna den inuti Eclipses webblรคsare. Tryck F5 fรถr att uppdatera efter framtida kรถrningar.

TestNG HTML-indexrapport renderad i Eclipse

Annoteringar som anvรคnds i TestNG

Du har redan sett @Test-annoteringen. Resten av det hรคr avsnittet behandlar de mest anvรคndbara avancerade annoteringarna.

Flera testfall

En enda TestNG filen kan innehรฅlla flera @Test-annoteringar. Som standard kรถrs metoder som annoteras med @Test i alfabetisk ordning. I koden nedan, metoder c_test, a_testoch b_test kรถrs alfabetiskt oavsett kรคllordning.

Flera @Test-metoder i en enda TestNG klass

Kรถr koden och รถppna index.html. Klicka Kronologisk vy.

Kronologisk vy รถver flera TestNG metoder

Driftparametrar

Fรถr att รฅsidosรคtta standardordningen, anvรคnd priority parameter. Parametrar รคr nyckelord som modifierar en annoterings beteende.

  • Tilldela ett vรคrde med =.
  • Radbryt parametrar inom parenteser som placeras omedelbart efter annoteringen, som visas nedan.

TestNG annotering med parameter- och vรคrdesyntax

TestNG kรถr @Test-annoteringar frรฅn det lรคgsta prioritetsvรคrdet till det hรถgsta. Prioritetsnumren behรถver inte vara i fรถljd.

Fullstรคndig kod med @Test-prioritetsparametrar

HTML-rapporten bekrรคftar att metoderna kรถrdes i stigande prioritetsordning.

TestNG rapport som visar metoder som kรถrs med stigande prioritet

Flera parametrar

Fรถrutom priority, @Test accepterar alwaysRun parameter (sant eller falskt). Fรถr att anvรคnda tvรฅ eller fler parametrar i en enda annotering, separera dem med ett kommatecken:

@Test(priority = 0, alwaysRun = true)

Exempel pรฅ flera parametrar i en @Test-annotering

@BeforeTest och @AfterTest

@BeforeTest Metoder under denna annoteringskรถrning fรถre det fรถrsta testfallet i TestNG fil.
@AfterTest Metoder under denna annoteringskรถrning efter alla testfall i TestNG filfinish.

Tรคnk pรฅ koden nedan.

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

Frรฅn tabellen och koden kan vi fรถrutsรคga att sekvensen blir:

  • 1:a โ€” launchBrowser()
  • 2:a โ€” verifyHomepageTitle()
  • 3:e โ€” terminateBrowser()

Placeringen av annoteringsblock i kรคllfilen pรฅverkar inte deras exekveringsordning. Fรถrsรถk att omorganisera metoderna enligt nedan.

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 och verifiera resultatet.

TestNG resultat bekrรคftar ordningen trots blandade anteckningar

@BeforeMethod och @AfterMethod

@BeforeMethod Metoder under denna annoteringskรถrning fรถre varje testmetod.
@AfterMethod Metoder under denna annoteringskรถrning efter varje testmetod.

In Mercury Turer, anta att vi vill verifiera titlarna pรฅ tvรฅ mรฅlsidor som nรฅs frรฅn startsidan.

Tre lรคnkar frรฅn Mercury Tours hemsida

Testets fรถrlopp รคr:

  • ร–ppna startsidan och verifiera dess titel.
  • Klicka pรฅ REGISTRERA och verifiera titeln pรฅ dess mรฅlsida.
  • Gรฅ tillbaka till startsidan och verifiera titeln.
  • Klicka pรฅ SUPPORT och verifiera titeln pรฅ dess mรฅlsida.
  • Gรฅ tillbaka till startsidan och verifiera titeln igen.

Koden nedan visar hur @BeforeMethod och @AfterMethod hanterar de upprepade stegen.

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 att ha kรถrt testet, TestNG rapporterar sekvensen nedan.

TestNG rapportsekvens med hjรคlp av BeforeMethod och AfterMethod

Kort sagt: placera installationsstegen inuti @BeforeMethod och rensning eller รฅterstรคllning av navigering inuti @AfterMethod sรฅ varje testfall bรถrjar och slutar i ett kรคnt tillstรฅnd.

Sammanfattning av TestNG Anteckningar

  • @BeforeSuite: kรถrs fรถre alla tester i sviten.
  • @AfterSuite: kรถrs efter alla tester i sviten.
  • @FรถreTest: kรถrs fรถre nรฅgon testmetod som tillhรถr klasserna inuti en mรคrka.
  • @EfterTest: kรถrs efter alla testmetoder som tillhรถr klasserna inuti en mรคrka.
  • @FรถreGrupper: kรถrs strax fรถre den fรถrsta testmetoden som tillhรถr nรฅgon listad grupp.
  • @EfterGrupper: kรถrs strax efter den sista testmetoden som tillhรถr nรฅgon listad grupp.
  • @FรถreKlassen: kรถrs fรถre den fรถrsta testmetoden i den aktuella klassen.
  • @EfterKlassen: kรถrs efter alla testmetoder i den aktuella klassen.
  • @FรถreMetoden: kรถrs fรถre varje testmetod.
  • @EfterMetoden: kรถrs efter varje testmetod.
  • @Testa: markerar metoden som ett testfall.

Vanliga frรฅgor

JUnit 5 moderniserade JUnit med Jupiters API och tillรคggsmodell. TestNG leder fortfarande pรฅ parallell exekvering, grupp pรฅ svitnivรฅping, dependsOn och DataProvider. Mรฅnga Selenium lagens val TestNG fรถr kompletta sviter och JUnit 5 fรถr enhetstester.

Lรคgg till parallel="methods" eller parallel="classes" plus ett thread-count-attribut pรฅ taggen inuti testng.xml. TestNG distribuerar sedan testmetoder รถver trรฅdar, idealiskt fรถr Selenium Kรถrningar i rutnรคt eller moln รถver flera webblรคsare.

@DataProvider matar in flera datamรคngder i en enda @Test-metod. Varje rad i providern รคr en kรถrning. Det รคr standardmรถnstret fรถr datadrivna Selenium tester mot formulรคr, sรถkrutor eller inloggningsskรคrmar.

Ja. AI kodningsassistenter genererar TestNG skelett, annotera @Test-metoder, bygga Page Object-klasser och utarbeta DataProvider-arrayer frรฅn exempel-CSV-filer, vilket kraftigt minskar tiden fรถr scaffolding.

Generativ AI matar in testng-results.xml- och Surefire-loggar, klustrar liknande fel, fรถreslรฅr sannolika grundorsaker och utarbetar Jira-รคrenden. Detta fรถrkortar triage av instabila tester och hjรคlper QA-chefer att prioritera CI-korrigeringar.

Sammanfatta detta inlรคgg med: