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.

  • ๐Ÿงฑ Kernkader: TestNG strekt JUnit ideeรซn met annotaties, groeppingen parallelle testuitvoering voor Selenium vervolg.
  • ???? ๏ธ Annotaties sturen de workflow: @Test, @BeforeMethod, @AfterMethod, @BeforeTest en @AfterTest sequentie-setup, test en teardown.
  • ๐Ÿ—‚๏ธ Eclipse Setup: Bouw een TestNG project, voeg de TestNG bibliotheek en Selenium Download de JAR-bestanden en genereer vervolgens testklassen met behulp van de wizard.
  • ๐Ÿ“Š Rapportage: TestNG Produceert tekst-, grafische en HTML-rapporten in de map test-output, inclusief chronologische weergaven.
  • โš™๏ธ parameters: Gebruik priority, alwaysRun en dataProvider om de uitvoeringsvolgorde te bepalen en gegevens aan tests te leveren.
  • ๐Ÿค– AI-boost: AI-codeerassistenten versnellen het codeerproces TestNG Klassegeneratie, locatorupdates en dataProvider-structuur.

TestNG Tutorial

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.xml bestand in de test-output map. 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.xml bestand, 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 HTML-rapportvoorbeeld voor Selenium testen

  • TestNG Vereenvoudigt testcode. Je hebt geen statische main-methode meer nodig; annotaties bepalen wat er wanneer wordt uitgevoerd.

gebruikelijk Java testklassestructuur met hoofdmethode

TestNG Testklassestructuur met behulp van annotaties

  • 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.

Voorbeeld TestNG annotatie boven een Java methode

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:

  1. Schrijf je bedrijfslogica op en plaats deze TestNG Annotaties boven elke methode.
  2. Voeg metadata toe zoals klassenaam, groepsnaam en pakketnaam.
  3. 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.

Eclipse menu om een โ€‹โ€‹nieuwe te maken Java project

Stap 2) Enter Voornaam*TestNGProject als projectnaam en klik Volgende.

Nieuwe Java projectwizard met de naam FirstTestNGProject

Stap 3) Importeer de TestNG bibliotheken. Klik op de Bibliotheken tab en dan Bibliotheek toevoegenโ€ฆ.

Tabblad Bibliotheken met de optie Bibliotheek toevoegen in Eclipse

Stap 4) In de Bibliotheek toevoegen dialoogvenster, kies TestNG en klik op Volgende.

Selecteren TestNG in het dialoogvenster Bibliotheek toevoegen

Stap 5) Klik Finish.

Het voltooien van de wizard 'Bibliotheek toevoegen'

TestNG Het zou nu in de lijst met bibliotheken moeten verschijnen.

TestNG zichtbaar in de lijst met bibliotheken

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.

Dialoogvenster Externe JAR-bestanden toevoegen in Eclipse

Navigeer naar de map waar de Selenium JAR-bestanden worden opgeslagen.

Selecteren Selenium JAR-bestanden voor het buildpad

Na het toevoegen van de externe JAR-bestanden zou het scherm er zo uit moeten zien.

Selenium JAR-bestanden toegevoegd aan de bibliotheeklijst.

Stap 7) Klik Finish. De nieuwe Voornaam*TestNGProject verschijnt in de pakketverkenner.

Voornaam*TestNGProject zichtbaar in Package Explorer

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โ€ฆ.

Nieuw menu 'Overig' uit de map 'src' in Eclipse

Stap 2) Vouw de TestNG map, selecteer TestNG klasseen klik Volgende.

TestNG Klasse-optie in de nieuwe wizard

Stap 3) Voer de onderstaande waarden in en klik. Finish. De Java bestand wordt genoemd Voornaam*TestNGDien in.

TestNG tovenaar van de eerste klasseTestNGBestandswaarden

Stap 4) Eclipse genereert de TestNG Het onderstaande sjabloon wordt weergegeven.

Vernieuwd TestNG klassjabloon in Eclipse editor

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.Assert drijfverificaties.

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.

TestNG Resultatenvenster met testuitkomst

Eclipse Consolevenster met TestNG tekstuitvoer

Rapporten controleren die zijn gemaakt door TestNG

Het consolevenster biedt een tekstuele samenvatting, terwijl het TestNG Het resultatenvenster toont een grafische weergave.

Tekst versus afbeelding TestNG resultaatvergelijking

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.

Vernieuwingsoptie voor de TestNG project in Eclipse

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.

test-output map met index.html gemarkeerd

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.

TestNG HTML-indexrapport weergegeven in Eclipse

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.

Meerdere @Test-methoden in รฉรฉn TestNG klasse

Voer de code uit en open het bestand. index.html. Klikken Chronologisch overzicht.

Chronologisch overzicht van meerdere TestNG methoden

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 annotatie met parameter- en waardesyntaxis

TestNG Voert @Test-annotaties uit van de laagste naar de hoogste prioriteitswaarde. De prioriteitsnummers hoeven niet opeenvolgend te zijn.

Volledige code met @Test prioriteitsparameters

Het HTML-rapport bevestigt dat de methoden in oplopende prioriteitsvolgorde zijn uitgevoerd.

TestNG Rapport met een overzicht van de uitgevoerde methoden, gesorteerd op prioriteit.

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)

Voorbeeld van meerdere parameters binnen een @Test-annotatie

@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.

TestNG Resultaat bevestigt de volgorde ondanks de verwarde annotaties.

@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.

Drie links van Mercury Homepagina van rondleidingen

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.

TestNG rapporteer de volgorde met behulp van BeforeMethod en AfterMethod

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.

Veelgestelde vragen

JUnit 5 gemoderniseerd JUnit met de Jupiter API en het uitbreidingsmodel. TestNG blijft toonaangevend op het gebied van parallelle uitvoering, suite-niveau groeperingping, dependsOn en DataProvider. Veel Selenium teams kiezen TestNG voor complete suites en JUnit 5 voor unit tests.

Voeg parallel=โ€methodsโ€ of parallel=โ€classesโ€ toe, samen met een thread-count attribuut. tag in testng.xml. TestNG verdeelt vervolgens testmethoden over threads, ideaal voor Selenium Grid- of cloudgebaseerde, cross-browser-functionaliteit.

@DataProvider voert meerdere datasets in รฉรฉn enkele @Test-methode. Elke rij in de provider staat voor รฉรฉn uitvoering. Dit is het standaardpatroon voor data-driven testen. Selenium Tests worden uitgevoerd op formulieren, zoekvelden of inlogschermen.

Ja. AI codeerassistenten genereren TestNG Het genereren van templates, het annoteren van @Test-methoden, het bouwen van Page Object-klassen en het opstellen van DataProvider-arrays op basis van voorbeeld-CSV's, waardoor de tijd die nodig is voor het genereren van de template aanzienlijk wordt verkort.

Generatieve AI verwerkt testng-results.xml en Surefire-logs, groepeert vergelijkbare fouten, suggereert mogelijke oorzaken en maakt Jira-tickets aan. Dit verkort de triage van onbetrouwbare tests en helpt QA-managers bij het prioriteren van CI-fixes.

Vat dit bericht samen met: