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.
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.xmlfil itest-outputmapp. 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.xmlfil, 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 fรถrenklar testkoden. Du behรถver inte lรคngre en statisk huvudmetod; annoteringar avgรถr vad som kรถrs och nรคr.
- 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.
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:
- Skriv din affรคrslogik och placera den TestNG anteckningar ovanfรถr varje metod.
- Lรคgg till metadata som klassnamn, gruppnamn och paketnamn.
- 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.
Steg 2) ange FรถrnamnTestNGProjekt som projektnamn och klicka pรฅ Nรคsta.
Steg 3) Importera TestNG bibliotek. Klicka pรฅ bibliotek fliken och sedan Lรคgg till bibliotekโฆ.
Steg 4) I Lรคgg till bibliotek dialog, vรคlj TestNG och klicka Nรคsta.
Steg 5) Klicka Finish.
TestNG borde nu visas 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.
Navigera till mappen dรคr Selenium JAR-filer lagras.
Efter att du har lagt till de externa JAR-filerna bรถr skรคrmen se ut sรฅ hรคr.
Steg 7) Klicka Finish. Den nya FรถrnamnTestNGProjekt visas 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โฆ.
Steg 2) Expandera TestNG mapp, vรคlj TestNG klass, och klicka Nรคsta.
Steg 3) Ange vรคrdena som visas nedan och klicka Finish. De Java filen heter FรถrnamnTestNGFil.
Steg 4) Eclipse genererar TestNG mallen som visas nedan.
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.Assertdriver 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.
Kontrollera rapporter skapade av TestNG
Konsolfรถnstret visar en textbaserad sammanfattning medan TestNG Resultatfรถnstret visar en grafisk vy.
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.
Steg 2) A testutdata mappen visas. Expandera den och leta reda pรฅ index.html โ HTML-rapporten fรถr den senaste kรถrningen.
Steg 3) Double-klick index.html att รถppna den inuti Eclipses webblรคsare. Tryck F5 fรถr att uppdatera efter framtida kรถrningar.
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.
Kรถr koden och รถppna index.html. Klicka Kronologisk vy.
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 kรถr @Test-annoteringar frรฅn det lรคgsta prioritetsvรคrdet till det hรถgsta. Prioritetsnumren behรถver inte vara i fรถljd.
HTML-rapporten bekrรคftar att metoderna kรถrdes i stigande prioritetsordning.
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)
@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.
@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.
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.
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.


































