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.

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.xmlfil itest-outputmappe. Å 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.xmlfil, 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 forenkler testkoden. Du trenger ikke lenger en statisk hovedmetode; annoteringer bestemmer hva som kjøres og når.
- 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.
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:
- Skriv forretningslogikken din og plasser den TestNG merknader over hver metode.
- Legg til metadata som klassenavn, gruppenavn og pakkenavn.
- 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.
Trinn 2) Enter FørstTestNGProsjekt som prosjektnavnet og klikk neste.
Trinn 3) Importer TestNG biblioteker. Klikk på Bibliotekene kategorien og deretter Legg til bibliotek….
Trinn 4) på Legg til bibliotek dialog, velg TestNG og klikk neste.
Trinn 5) Klikk Finish.
TestNG skal nå vises i biblioteklisten.
Trinn 6) Legg til JAR-filene som inneholder Selenium API. Disse kommer fra Java klientdriveren lastet ned fra selenium.dev/nedlastinger.
Naviger til mappen der Selenium JAR-filer lagres.
Etter at du har lagt til de eksterne JAR-filene, skal skjermen se slik ut.
Trinn 7) Klikk Finish. Den nye FørstTestNGProsjekt vises i pakkeutforskeren.
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….
Trinn 2) Utvid TestNG mappe, velg TestNG klasse, og klikk neste.
Trinn 3) Skriv inn verdiene som vises nedenfor, og klikk Finish. De Java filen er navngitt FørstTestNGfilet.
Trinn 4) Eclipse genererer TestNG malen vist nedenfor.
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.Assertdriververifiseringer.
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.
Sjekker rapporter opprettet av TestNG
Konsollvinduet gir et tekstbasert sammendrag mens TestNG Resultatvinduet viser en grafisk visning.
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.
Trinn 2) A testutgang mappen vises. Utvid den og finn den index.html — HTML-rapporten for den siste kjøringen.
Trinn 3) Double-klikk index.html å åpne den inni Eclipses nettleser. Trykk F5 for å oppdatere etter fremtidige kjøringer.
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.
Kjør koden og åpne index.html. Klikk Kronologisk visning.
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 kjører @Test-annoteringer fra den laveste prioritetsverdien til den høyeste. Prioritetsnumrene trenger ikke å være sammenhengende.
HTML-rapporten bekrefter at metodene ble utført i stigende prioritetsrekkefølge.
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)
@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.
@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.
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.
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.

































