TestNG Tutorial
โก Slimme samenvatting
TestNG is een volgende generatie Java testframework dat samenwerkt met Selenium voor gestructureerde automatisering, uitgebreide rapportage en parallelle uitvoering. Deze handleiding behandelt de belangrijkste annotaties en de projectconfiguratie. EclipseHet schrijven van de eerste testcase, HTML-rapporten en geavanceerd parametergebruik.
Wat is TestNG?
TestNG is een framework voor geautomatiseerd testen, waarbij "NG" staat voor "Next Generation". TestNG is geรฏnspireerd door JUnit en gebruikt Java annotaties (@) om de teststroom te controleren. Het lost het probleem op. JUnitde eerdere beperkingen van en is ontworpen om te maken end-to-end testen makkelijker.
Met TestNG Je kunt een gedetailleerd rapport genereren en direct zien hoeveel tests geslaagd, mislukt of overgeslagen zijn. Je kunt ook alleen de mislukte tests opnieuw uitvoeren.
Bijvoorbeeld:
- Stel dat je vijf testgevallen hebt, elk in een eigen methode, geschreven zonder TestNGDrie pogingen slagen; de vierde mislukt. Nadat je de vierde hebt opgelost, wil je alleen die ene opnieuw uitvoeren, omdat de eerste drie al geslaagd zijn. Dit is lastig te doen met gewone main()-methode code.
- TestNG biedt
testng-failed.xmlbestand in detest-outputmap. Door die XML opnieuw uit te voeren, worden alleen de mislukte gevallen opnieuw uitgevoerd.
Daarnaast leer je de voordelen van TestNGHoe schrijf je testmethoden met @Test-annotaties en hoe zet je je klassen om in een testsuite die vanuit die methode kan worden uitgevoerd? Eclipse of via de commandoregel.
Waarom gebruiken TestNG with Selenium?
Standaard Selenium Tests leveren geen mooi opgemaakte resultaten op. Met TestNG Eenmaal aangesloten, genereert de testrunner een gestructureerd rapport dat u met het team kunt delen.
De meeste Selenium gebruikers geven de voorkeur TestNG over JUnit vanwege de bredere functionaliteit. De belangrijkste kenmerken voor Selenium zijn:
- Rapporten met daarin het aantal uitgevoerde, geslaagde, mislukte en overgeslagen testgevallen.
- Gemakkelijke groepping testgevallen via een
testng.xmlbestand, met uitvoeringsprioriteiten. - Herhaal een test meerdere keren zonder lussen.
invocationCount. - Voer meerdere tests uit in meerdere browsers โ cross-browser testen Ondersteunen.
- Vlotte integratie met Maven. Jenkinsen andere CI-tools.
- Readable annotaties โ bijvoorbeeld @BeforeMethod, @AfterMethod, @BeforeTest, @AfterTest.
- Selenium WebDriver heeft geen ingebouwde rapportagefunctie; TestNG vult die leemte op met een overzichtelijk HTML-rapport zoals het onderstaande.
- TestNG Vereenvoudigt testcode. Je hebt geen statische main-methode meer nodig; annotaties bepalen wat er wanneer wordt uitgevoerd.
- Niet-afgevangen uitzonderingen worden op een elegante manier afgehandeld door TestNGZe worden gerapporteerd als mislukte stappen zonder dat de hele uitvoering wordt beรซindigd.
Voordelen TestNG over JUnit
TestNG biedt drie belangrijke voordelen ten opzichte van JUnit:
- Annotaties zijn gemakkelijker te begrijpen en te gebruiken.
- Testgevallen kunnen met minder moeite worden gegroepeerd en geprioriteerd.
- Parallelle testuitvoering wordt standaard ondersteund.
Wat is een annotatie in TestNG?
Annotaties erin TestNG Dit zijn regels code die boven een methode worden geplaatst om te bepalen hoe deze wordt uitgevoerd. Ze beginnen altijd met het @-symbool. Een eenvoudig voorbeeld wordt hieronder weergegeven.
Annotaties worden in detail behandeld in de betreffende sectie. โAnnotaties gebruikt in TestNG" Later in deze handleiding komen we hierop terug, dus het bovenstaande voorbeeld dient alleen ter illustratie. TestNG Annotaties zijn gemakkelijker te coderen en te lezen dan de JUnit equivalenten, en ze zijn essentieel bij het uitvoeren van tests op Selenium Raster waarbij parallelle uitvoering van belang is.
Hoe u testgevallen schrijft TestNG
Een .... schrijven TestNG De testcase bestaat uit drie stappen:
- Schrijf je bedrijfslogica op en plaats deze TestNG Annotaties boven elke methode.
- Voeg metadata toe zoals klassenaam, groepsnaam en pakketnaam.
- Voer de ... uit TestNG klasse vanuit je IDE of de commandoregel.
Maak een testcase met behulp van TestNG Annotaties
Nu gaan we onze eerste testcase maken met behulp van TestNG annotaties in SeleniumVoordat je de test schrijft, maak je een nieuwe aan. TestNG project in Eclipse en noem het Voornaam*TestNGProject.
Een nieuwe instellen TestNG Project
Stap 1) Klik Bestand > Nieuw > Java Project.
Stap 2) Enter Voornaam*TestNGProject als projectnaam en klik Volgende.
Stap 3) Importeer de TestNG bibliotheken. Klik op de Bibliotheken tab en dan Bibliotheek toevoegenโฆ.
Stap 4) In de Bibliotheek toevoegen dialoogvenster, kies TestNG en klik op Volgende.
Stap 5) Klik Finish.
TestNG Het zou nu in de lijst met bibliotheken moeten verschijnen.
Stap 6) Voeg de JAR-bestanden toe die de volgende inhoud bevatten: Selenium API. Deze komen van de Java clientstuurprogramma gedownload van selenium.dev/downloads.
Navigeer naar de map waar de Selenium JAR-bestanden worden opgeslagen.
Na het toevoegen van de externe JAR-bestanden zou het scherm er zo uit moeten zien.
Stap 7) Klik Finish. De nieuwe Voornaam*TestNGProject verschijnt in de pakketverkenner.
Hoe maak je een nieuwe TestNG Testbestand
Zodra het project klaar is, maak je een nieuwe aan. TestNG bestand.
Stap 1) Klik met de rechtermuisknop op de src map en kies Nieuw > Overigโฆ.
Stap 2) Vouw de TestNG map, selecteer TestNG klasseen klik Volgende.
Stap 3) Voer de onderstaande waarden in en klik. Finish. De Java bestand wordt genoemd Voornaam*TestNGDien in.
Stap 4) Eclipse genereert de TestNG Het onderstaande sjabloon wordt weergegeven.
Je eerste code schrijven TestNG Testgeval
Maak de eerste testcase dat de titel van de verifieert Mercury Homepagina van rondleidingen.
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();
}
}
Waar u op moet letten:
- TestNG heeft geen
main()methode. - Methoden hoeven niet statisch te zijn.
- De @Toets annotatiemarkeringen
verifyHomepageTitle()als testgeval. - Annotaties bevinden zich in de
org.testng.annotations.*pakket. - De Beweren klas van
org.testng.Assertdrijfverificaties.
Je kunt meerdere @Test-annotaties in รฉรฉn document hebben. TestNG bestand. We behandelen dat in het bestand. โAnnotaties gebruikt in TestNG" pagina.
De test uitvoeren
Klik met de rechtermuisknop op het bestand en voer het uit als een TestNG test. Eclipse produceert twee uitvoerwaarden: een tekstresultaat in het consolevenster en een grafisch resultaat in het TestNG Resultatenvenster.
Rapporten controleren die zijn gemaakt door TestNG
Het consolevenster biedt een tekstuele samenvatting, terwijl het TestNG Het resultatenvenster toont een grafische weergave.
HTML-rapporten genereren
TestNG Kan ook volledige HTML-rapporten genereren.
Stap 1) Na het rennen Voornaam*TestNGDien inKlik met de rechtermuisknop op het project en kies verversen.
Stap 2) A test-uitvoer Er verschijnt een map. Vouw deze uit en zoek de gewenste locatie. index.html โ het HTML-rapport voor de meest recente run.
Stap 3) Double-Klik index.html om het van binnenuit te openen EclipseDe browser van 's. Druk op F5 om de pagina te vernieuwen na volgende keren uitvoeren.
Annotaties gebruikt in TestNG
Je hebt de @Test-annotatie al gezien. De rest van dit gedeelte behandelt de meest nuttige geavanceerde annotaties.
Meerdere testgevallen
Een TestNG Een bestand kan meerdere `@Test`-annotaties bevatten. Standaard worden methoden die zijn geannoteerd met `@Test` in alfabetische volgorde uitgevoerd. In de onderstaande code worden methoden c_test, a_testen b_test Voer de bestanden alfabetisch uit, ongeacht de volgorde van de bronbestanden.
Voer de code uit en open het bestand. index.html. Klikken Chronologisch overzicht.
Kenmerken
Om de standaard sorteervolgorde te overschrijven, gebruikt u de priority parameter. Parameters zijn trefwoorden die het gedrag van een annotatie wijzigen.
- Wijs een waarde toe met
=. - Plaats parameters tussen haakjes direct na de annotatie, zoals hieronder weergegeven.
TestNG Voert @Test-annotaties uit van de laagste naar de hoogste prioriteitswaarde. De prioriteitsnummers hoeven niet opeenvolgend te zijn.
Het HTML-rapport bevestigt dat de methoden in oplopende prioriteitsvolgorde zijn uitgevoerd.
Meerdere parameters
Behalve priority@Test accepteert de alwaysRun parameter (waar of onwaar). Om twee of meer parameters in รฉรฉn annotatie te gebruiken, scheidt u ze met een komma:
@Test(priority = 0, alwaysRun = true)
@BeforeTest en @AfterTest
| @VoorTest | Methoden onder deze annotatie worden uitgevoerd vรณรณr de eerste testcase in de TestNG filet. |
| @AfterTest | Methoden onder deze annotatie worden uitgevoerd na alle testgevallen in de TestNG bestand voltooien. |
Beschouw de onderstaande code.
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();
}
}
Aan de hand van de tabel en de code kunnen we voorspellen dat de volgorde als volgt zal zijn:
- 1e โ
launchBrowser() - 2e โ
verifyHomepageTitle() - 3e โ
terminateBrowser()
De plaatsing van annotatieblokken in het bronbestand heeft geen invloed op hun uitvoeringsvolgorde. Probeer de methoden eens te herschikken zoals hieronder weergegeven.
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);
}
}
Voer de code uit en controleer het resultaat.
@BeforeMethod en @AfterMethod
| @Weerplaza | Methoden onder deze annotatie worden uitgevoerd vรณรณr elke testmethode. |
| @AfterMethode | Methoden onder deze annotatie worden uitgevoerd na elke testmethode. |
In Mercury Stel, we willen de titels van twee doelpagina's controleren die vanaf de homepage bereikbaar zijn.
Het verloop van de test is als volgt:
- Open de homepage en controleer de titel.
- Klik op REGISTREREN en verifieer de titel van de doelpagina.
- Ga terug naar de homepage en controleer de titel.
- Klik op ONDERSTEUNING en verifieer de titel van de doelpagina.
- Ga terug naar de homepage en controleer de titel nogmaals.
De onderstaande code laat zien hoe @BeforeMethod en @AfterMethod de herhaalde stappen afhandelen.
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();
}
}
Na het uitvoeren van de test, TestNG rapporteert de onderstaande reeks.
Kortom: plaats de installatiestappen binnenin @Weerplaza en opruimen of navigatie resetten binnenin @AfterMethode Elke testcase begint en eindigt dus in een bekende toestand.
Samenvatting TestNG Annotaties
- @BeforeSuite: Deze test wordt uitgevoerd vรณรณr alle andere tests in de suite.
- @AfterSuite: wordt uitgevoerd na alle tests in de suite.
- @VoorTest: wordt uitgevoerd vรณรณr elke testmethode die behoort tot de klassen binnen een label.
- @NaTest: wordt uitgevoerd nadat alle testmethoden van de klassen binnen een zijn uitgevoerd. label.
- @VoorGroepen: wordt uitgevoerd kort voor de eerste testmethode die tot een van de vermelde groepen behoort.
- @AfterGroups: wordt uitgevoerd kort na de laatste testmethode die tot een van de vermelde groepen behoort.
- @VoorDeLes: wordt uitgevoerd vรณรณr de eerste testmethode in de huidige klasse.
- @NaDeLes: Deze methode wordt uitgevoerd nadat alle testmethoden in de huidige klasse zijn voltooid.
- @BeforeMethod: wordt uitgevoerd vรณรณr elke testmethode.
- @AfterMethod: wordt uitgevoerd na elke testmethode.
- @Test: markeert de methode als een testgeval.


































