Groepen in TestNG
โก Slimme samenvatting
Groepen in TestNG Hiermee kunt u testmethoden taggen met logische labels en ze vervolgens via een XML-suite opnemen of uitsluiten. Deze aanpak vereenvoudigt rooktests, regressietests en afhankelijkheidstests zonder dat u de code hoeft te herschrijven. Java code.
TestNG is een testframework dat unit-, functionele, end-to-end-, UI- en integratietests omvat voor Java projecten.
Je kunt รฉรฉn pakket of meerdere pakketten (een pakket bevat gerelateerde klassen in een gedefinieerde mapstructuur) uitvoeren door een XML-suite te maken en deze via Maven te activeren.
TestNG Groepen met voorbeeld
Je gebruikt groepen in TestNG wanneer:
- Je wilt testmethoden niet over veel klassen verspreiden puur op basis van functioneel gebied, en
- Je wilt bepaalde testgevallen overslaan (niet uitvoeren) alsof ze niet in de codebase voorkomen.
- Om beide doelen te bereiken, groepeert u methoden in logische categorieรซn. TestNG Vervolgens worden de "include"- en "exclude"-filters die in de XML-suite zijn gedeclareerd, gerespecteerd.
Het onderstaande codefragment toont de syntaxis voor het groeperen van tags die wordt gebruikt in een testmethode.
Hier worden twee groepsnamen gebruikt, namelijk bonding en strong_tiesDit zijn logische labels die u kunt hernoemen zodat ze beter bij uw project passen.
De <groups> De tag markeert het begin van groepsfilters binnen de XML-suite.
Vervolgens pas je de XML aan om een โโspecifieke groep uit de getagde klassen te selecteren. Het onderstaande voorbeeld laat de syntaxis voor de groepsdeclaratie zien.
<lopen>
<omvatten naam=โverbindingโ />
</lopen>
</groepen>
Stel dat รฉรฉn klasse 10 testmethoden bevat.
Van die methoden:
- 6 methoden voeren de
bondinggroep, en - 4 methoden voeren de
strong_tiesgroep.
Vervolgens configureert u Maven en Java paden en gebruik de Eclipse IDE om groepsgebruik te demonstreren via XML-bestanden binnen een Java-gebaseerd Maven-project.
XML maken voor TestNG met labels
- Het XML-bestand (Extensible Markup Language) in het Maven-framework slaat de configuratie op voor een of meer tests, die binnen de test zijn gedeclareerd. label.
- Elke testinzending is omwikkeld met een label en kan รฉรฉn of meer bevatten TestNG klassen.
- A Java klas met een of meer @Toets annotaties over de methoden worden behandeld als een TestNG klasse.
Meerdere tags verschijnen achter elkaar om een โโwerkend testng.xml-bestand te vormen, namelijk , , En .
- De De tag bevat de naam op suite-niveau die wordt gebruikt in TestNG rapporten voor uitvoeringssamenvattingen.
- De <test name=โGuru 99 Rooktestdemonstratieโ> De tag bevat een logische testnaam; het rapport gebruikt deze voor het tellen van geslaagde, mislukte en overgeslagen tests, evenals de totale uitvoeringstijd en groepsmetadata.
- De tag verwijst naar de testklasse, waar
com.group.guru99is het pakket enTC_Class1is de klassenaam.
<!DOCTYPE suite SYSTEM โhttp://testng.org/testng-1.0.dtdโ>
<suite naam="Suite">
<proef naam="Guru 99 Rooktestdemonstratieโ>
<groepen>
<lopen>
<omvatten naam=โsterke bandenโ />
</lopen>
</groepen>
<klassen>
<klasse naam=โcom.group.guru99.TC_Class1โ />
</klassen>
</proef>
</suite>
Deze XML-configuratie wordt in de video-tutorials in de volgende secties als referentie gebruikt.
โuitsluitenโ of โopnemenโ in test-XML
Als het groeperingsmechanisme te complex is voor een klein filter, kunt u met de testng.xml-suite ook individuele testmethoden op naam uitsluiten of opnemen.
Tag toevoegen: Syntaxis voor include-tagomvatten naam=โ${TEST_CASE_NAME}โ />
Let op: Je kunt in รฉรฉn run meerdere testgevallen opnemen of uitsluiten, en dezelfde syntax is van toepassing op groepsfilters.
Het gebruik van dependsOnGroups voor geordende uitvoering
Naast eenvoudige inclusie, TestNG maakt het mogelijk dat de ene groep afhankelijk is van de andere door gebruik te maken van de dependsOnGroups attribuut. De runner zorgt ervoor dat elke methode in de bovenliggende groep is voltooid voordat een afhankelijke methode begint, waardoor de betrouwbaarheid van de voorwaarden gewaarborgd blijft.
- Eerst inloggen, dan transacties: Tag inlogmethoden met
group = "auth"en tag-overdrachtstests metdependsOnGroups = {"auth"}De overdrachtstests worden pas uitgevoerd nadat de aanmelding is geslaagd. - Overslaan bij fout: Als een methode in de bovenliggende groep mislukt, TestNG Hierdoor worden de afhankelijke methoden als overgeslagen gemarkeerd in plaats van direct als mislukt, wat de rapportage betrouwbaar houdt.
- Combineer met alwaysRun: Opruimmethoden moeten worden ingesteld
alwaysRun = trueHet opruimproces blijft dus doorgaan, zelfs als een upstream-groep uitvalt.
Dit patroon komt vaak voor bij end-to-end testsuites waarbij de API-configuratie voltooid moet zijn voordat de UI-asserties van start gaan.
lopen TestNG Code groeperen, opnemen, uitsluiten (videodemo)
Hieronder volgt een stapsgewijze handleiding. Java code en de XML-suite die de aansturing ervan mogelijk maken groeperen, uitsluiten en insluiten gedrag.
Testscenario: Start de GuruOp de demo-bankwebsite van 99 moet je een paar elementen op de inlogpagina verifiรซren, je inloggegevens invoeren en na het inloggen een paar items op het dashboard opnieuw verifiรซren.
Let op: Elke stap bevindt zich in een eigen methode, maar de uitvoeringsvolgorde hangt af van de items in de XML-suite.
- Methode 1: Initialiseer de browser en start de URL (
tc01LaunchURL()). - Methode 2: Controleer de koptekst van de inlogpagina (
tc02VerifyLaunchPage()). - Methode 3: Voer uw gebruikersnaam en wachtwoord in op het inlogformulier (
tc03EnterCredentials()). - Methode 4: Controleer of de manager-ID op het gebruikersdashboard aanwezig is (
tc04VerifyLoggedInPage()). - Methode 5: Controleer de extra links op het gebruikersdashboard (
tc05VerifyHyperlinks()).
Code voor het scenario:
importeren java.util.concurrent.TimeUnit;
importeren org.openqa.selenium.Door;
importeren org.openqa.selenium.WebDriver;
importeren org.openqa.selenium.firefox.FirefoxChauffeurs;
importeren org.testng.Assert;
importeren org.testng.annotaties.Test;
openbare klasse TC_Class1 {
openbare statische finale webdriver webDriver = nieuwe Firefoxbestuurder();
Draad launchPageHeading = โ//h3[text()='Guru99 Bank']โ;
finale Draad gebruikersnaam_element = โ//input[@name='uid']โ, wachtwoordelement = โ//input[@name='password']โ,
signIn_element = โ//input[@name='btnLogin']โ;
finale Draad gebruikersnaam_waarde = โmngr28642โ, wachtwoord_waarde = โydAnateโ;
finale Draad managerID = โ//td[contains(text(),'Manager Id')]โ;
finale Draad nieuweKlant = โ//a[@href='addcustomerpage.php']โ, fondsoverdracht = โ//a[@href='FundTransInput.php']โ;
/** Deze testcase initialiseert de webDriver */
@Toets(groepen = { โverbindingโ, โsterke bandenโ })
openbare leegte tc01LaunchURL() {
webDriver.manage().window().maximize();
webDriver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
webDriver.get(โhttps://www.demo.guru99.com/V4/โ);
}
/** Controleert of de koptekst op de inlogpagina aanwezig is */
@Toets(groepen = { โverbindingโ })
openbare leegte tc02VerifyLaunchPage() {
Assert.assertTrue(webDriver.findElement(By.xpath(launchPageHeading)).isDisplayed(),
De koptekst van de homepage wordt niet weergegeven.);
Systeem.uit.println(โDe kop van de homepage wordt weergegevenโ);
}
/** Voert gebruikersnaam en wachtwoord in en klikt vervolgens op 'Inloggen' */
@Toets(groepen = { โverbindingโ, โsterke bandenโ })
openbare leegte tc03EnterCredentials() {
webDriver.findElement(By.xpath(userName_element)).sendKeys(userName_value);
webDriver.findElement(By.xpath(password_element)).sendKeys(password_value);
webDriver.findElement(By.xpath(signIn_element)).click();
}
/** Controleert de manager-ID op het dashboard */
@Toets(groepen = { โsterke bandenโ })
openbare leegte tc04VerifyLoggedInPage() {
Assert.assertTrue(webDriver.findElement(By.xpath(managerID)).isDisplayed(),
Het label 'Manager-ID' wordt niet weergegeven.);
Systeem.uit.println(โHet label โManager IDโ wordt weergegevenโ);
}
/** Controleert de link 'Nieuwe klant' en de link 'Geld overmaken' op het dashboard */
@Toets(groepen = { โverbindingโ })
openbare leegte tc05VerifyHyperlinks() {
Assert.assertTrue(webDriver.findElement(By.xpath(newCustomer)).isEnabled(),
De hyperlink voor nieuwe klanten wordt niet weergegeven.);
Systeem.uit.println(โDe hyperlink voor nieuwe klanten wordt weergegevenโ);
Assert.assertTrue(webDriver.findElement(By.xpath(fundTransfer)).isEnabled(),
De hyperlink voor geldoverdracht wordt niet weergegeven.);
Systeem.uit.println(โDe hyperlink voor geldoverdracht wordt weergegevenโ);
}
}
Let op: de demo-bankgegevens blijven ongeveer 20 dagen geldig. Bij een lokale test kan er na die periode een foutmelding verschijnen dat de gegevens ongeldig zijn.
Uitleg van de code:
Vijf testmethoden, รฉรฉn per actie, elk met een groups attribuut op het @Test annotatie.
De twee logische groepslabels zijn strong_ties en bonding.
- De eerste en derde methode voeren beide uit.
bondingenstrong_tiesZe worden dus uitgevoerd zodra een van beide groepen in de suite is opgenomen. Dit is een veelvoorkomend patroon voor gedeelde applicaties. testcase stappen. - De tweede methode is alleen gelabeld met
bonding, dus het werkt alleen wanneer debondingDe groep is inbegrepen. - De vierde methode is alleen gelabeld met
strong_tiesHet programma wordt dus alleen uitgevoerd als die groep is opgenomen. - De vijfde methode is alleen gelabeld met
bonding, dus het werkt alleen wanneer debondingDe groep is inbegrepen.
Hieronder volgen vier uitvoeringsscenario's:
Scenario 1: Voer elke testmethode uit, ongeacht de groep. Verwijder de <groups> blokkering van de actieve XML.
Scenario 2: Voer alleen methoden uit die gekoppeld zijn aan een gekozen groep, namelijk strong_ties or bondingZie onderstaande video.
- In het eerste deel van de video, de
<groups>Het codeblok is uitgeschakeld door middel van commentaar, waardoor elke testmethode wordt uitgevoerd. - In het tweede deel wordt het groepsfilter hersteld en worden alleen de overeenkomende methoden uitgevoerd.
Scenario 3: Gebruik het uitsluitingsfilter om bepaalde testgevallen over te slaan. Raadpleeg de video voor meer informatie.
- De demo sluit uit
tc02op naam in de actieve XML, en het resultatenrapport bevestigt dat de uitgesloten methode niet wordt uitgevoerd.
Scenario 4: Pas het inclusiefilter toe om alleen de uitvoering uit te voeren. tc01LaunchURL, tc03EnterCredentialsen tc05VerifyHyperlinksRaadpleeg de video.
Tijdens deze uitvoering worden alleen de methoden uitgevoerd die in het include-filter zijn opgenomen, precies zoals geconfigureerd.
Download het voorbeeldproject via de onderstaande link.
Download het bovenstaande Code
Conclusie
Groepen in TestNG structuur aanbrengen in grote Selenium en unit suites door eenmalige klassesplitsingen te vervangen door declaratieve XML-filters.
Label je methoden met @Test(groups = {...}), gebruik dan <include>, <exclude>en dependsOnGroups om rook-, regressie- en end-to-end-runs vanuit hetzelfde Maven-project uit te voeren op TestNG 7.x.


