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.
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.xmlfil itest-outputmappe. 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.xmlfil 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 forenkler testkode. Du behรธver ikke lรฆngere en statisk main-metode; annotationer bestemmer, hvad der kรธrer, og hvornรฅr.
- 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.
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:
- Skriv din forretningslogik og placering TestNG annotationer over hver metode.
- Tilfรธj metadata sรฅsom klassenavn, gruppenavn og pakkenavn.
- 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.
Trin 2) Indtast FornavnTestNGProjekt som projektnavnet og klik pรฅ Nรฆste.
Trin 3) Importer TestNG biblioteker. Klik pรฅ Biblioteker fanebladet og derefter Tilfรธj bibliotekโฆ.
Trin 4) I Tilfรธj bibliotek dialog, vรฆlg TestNG og klik Nรฆste.
Trin 5) Klik Finish.
TestNG burde nu vises pรฅ bibliotekslisten.
Trin 6) Tilfรธj JAR-filerne, der indeholder Selenium API. Disse kommer fra Java klientdriveren downloadet fra selenium.dev/downloads.
Naviger til den mappe, hvor Selenium JAR-filer gemmes.
Efter tilfรธjelse af de eksterne JAR-filer, skulle skรฆrmen gerne se sรฅdan ud.
Trin 7) Klik Finish. De nye FornavnTestNGProjekt vises i Pakke Explorer.
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โฆ.
Trin 2) Udvid TestNG mappe, vรฆlg TestNG klasse, og klik Nรฆste.
Trin 3) Indtast de viste vรฆrdier nedenfor, og klik pรฅ Finish. Det Java filen er navngivet FornavnTestNGFile (Felt).
Trin 4) Eclipse genererer TestNG skabelon vist nedenfor.
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.Assertdrevverifikationer.
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.
Kontrol af rapporter oprettet af TestNG
Konsolvinduet viser et tekstbaseret resumรฉ, mens TestNG Resultatvinduet viser en grafisk visning.
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.
Trin 2) A test-output mappen vises. Udvid den og find den index.html โ HTML-rapporten for den seneste kรธrsel.
Trin 3) Double-klik index.html at รฅbne den indeni Eclipses browser. Tryk pรฅ F5 for at opdatere efter fremtidige kรธrsel.
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.
Kรธr koden og รฅbn index.html. Klik Kronologisk oversigt.
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 udfรธrer @Test-annotationer fra den laveste prioritetsvรฆrdi til den hรธjeste. Prioritetsnumrene behรธver ikke at vรฆre fortlรธbende.
HTML-rapporten bekrรฆfter, at metoderne blev udfรธrt i stigende prioritetsrรฆkkefรธlge.
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)
@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.
@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.
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.
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.


































