Gruppen in TestNG
โก Intelligente Zusammenfassung
Gruppen in TestNG Sie kรถnnen Testmethoden mit logischen Bezeichnungen versehen und diese anschlieรend รผber eine XML-Suite ein- oder ausschlieรen. Dieser Ansatz vereinfacht Smoke-, Regressions- und abhรคngigkeitsgesteuerte Tests, ohne dass Code neu geschrieben werden muss. Java Code.
TestNG ist ein Testframework, das Unit-, Funktions-, End-to-End-, UI- und Integrationstests abdeckt fรผr Java Projekte.
Sie kรถnnen ein einzelnes Paket oder mehrere Pakete ausfรผhren (ein Paket kapselt zusammengehรถrige Klassen in einem definierten Verzeichnislayout), indem Sie eine XML-Suite erstellen und diese รผber Maven auslรถsen.
TestNG Gruppen mit Beispiel
Sie verwenden Gruppen in TestNG wann:
- Man mรถchte Testmethoden nicht รผber viele Klassen verteilen, die ausschlieรlich nach Funktionsbereichen unterteilt sind, und
- Sie mรถchten ausgewรคhlte Testfรคlle รผberspringen (nicht ausfรผhren), als ob sie im Quellcode nicht vorhanden wรคren.
- Um beide Ziele zu erreichen, ordnet man die Methoden logischen Gruppen zu. TestNG Anschlieรend werden die in der XML-Suite deklarierten โincludeโ- und โexcludeโ-Filter berรผcksichtigt.
Der folgende Codeausschnitt zeigt die Syntax fรผr die Gruppenkennzeichnung, die in einer Testmethode verwendet wird.
Hier werden zwei Gruppennamen verwendet, nรคmlich bonding und strong_tiesDies sind logische Bezeichnungen, die Sie an Ihr Projekt anpassen kรถnnen.
Das <groups> Das Tag markiert den Beginn von Gruppenfiltern innerhalb der XML-Suite.
Anschlieรend passen Sie das XML an, um eine gewรผnschte Gruppe aus den getaggten Klassen auszuwรคhlen. Das folgende Beispiel zeigt die Syntax der Gruppendeklaration.
<Lauf>
<das Name=โBindungโ />
</Lauf>
</Gruppen>
Angenommen, eine einzelne Klasse enthรคlt 10 Testmethoden.
Aus diesen Methoden:
- 6 Methoden tragen die
bondingGruppe und - 4 Methoden tragen die
strong_tiesGruppe.
Als nรคchstes richten Sie Maven ein und Java Pfade und verwenden Sie die Eclipse IDE zur Demonstration der Gruppennutzung anhand von XML-Dateien innerhalb eines Java-basiertes Maven-Projekt.
Erstellen Sie XML fรผr TestNG mit Anhรคngen
- Die XML-Datei (Extensible Markup Language) im Maven-Framework speichert die Konfiguration fรผr einen oder mehrere Tests, die innerhalb der Datei deklariert sind. -Tag.
- Jeder Testeintrag ist in einem Etikett und kann ein oder mehrere TestNG Klassen.
- A Java Klasse mit einem oder mehreren @Prรผfung Anmerkungen zu seinen Methoden werden als eine TestNG Klasse.
Mehrere Tags erscheinen nacheinander, um eine funktionierende testng.xml-Datei zu erstellen, nรคmlich , , Und Die
- Das Das Tag enthรคlt den Namen der Suite, der in TestNG Berichte fรผr Ausfรผhrungszusammenfassungen.
- Das <test name=โGuru 99 Smoke Test Demoโ> Das Tag enthรคlt einen logischen Testnamen; der Bericht verwendet ihn fรผr die Anzahl der bestandenen, nicht bestandenen und รผbersprungenen Tests sowie fรผr die Gesamtausfรผhrungszeit und Gruppenmetadaten.
- Das Das Tag verweist auf die Testklasse, wo
com.group.guru99ist das Paket undTC_Class1ist der Klassenname.
<!DOCTYPE Suite SYSTEM โhttp://testng.org/testng-1.0.dtdโ>
<Suite Name="Suite">
<Test Name="Guru 99 Rauchtest-Demoโ>
<Gruppen>
<Lauf>
<das Name=โstarke Bindungenโ />
</Lauf>
</Gruppen>
<Unterricht>
<Klasse Name=โcom.group.guru99.TC_Class1โ />
</Unterricht>
</Test>
</Suite>
Diese XML-Konfiguration wird in den Video-Anleitungen in den nรคchsten Abschnitten erwรคhnt.
โausschlieรenโ oder โeinschlieรenโ im Test-XML
Falls Ihnen der Gruppenmechanismus fรผr einen kleinen Filter zu umstรคndlich erscheint, kรถnnen Sie mit der testng.xml-Suite auch einzelne Testmethoden anhand ihres Namens ein- oder ausschlieรen.
Tag einbindenSyntax fรผr das Include-Tagdas Name=โ${TEST_CASE_NAME}โ />
Hinweis: Sie kรถnnen in einem einzigen Durchlauf mehrere Testfรคlle ein- oder ausschlieรen, und die gleiche Syntax gilt fรผr Gruppenfilter.
Verwendung von dependsOnGroups fรผr die geordnete Ausfรผhrung
รber die bloรe Inklusion hinaus, TestNG ermรถglicht es einer Gruppe, von einer anderen abhรคngig zu sein, indem sie dependsOnGroups Das Attribut. Der Runner stellt sicher, dass jede Methode in der รผbergeordneten Gruppe abgeschlossen ist, bevor eine abhรคngige Methode startet, wodurch die Vorbedingungen zuverlรคssig bleiben.
- Zuerst anmelden, dann Transaktionen durchfรผhren: Tag-Anmeldemethoden mit
group = "auth"und Tag-Transfer-Tests mitdependsOnGroups = {"auth"}Die รbertragungstests werden erst nach erfolgreicher Anmeldung ausgefรผhrt. - Bei Fehler รผberspringen: Wenn eine Methode in der รผbergeordneten Gruppe fehlschlรคgt, TestNG Die abhรคngigen Methoden werden als รผbersprungen markiert, anstatt sie direkt als fehlgeschlagen zu kennzeichnen, wodurch die Berichte korrekt bleiben.
- Kombinieren Sie dies mit alwaysRun: Aufrรคummethoden sollten festlegen
alwaysRun = trueDer Abbauvorgang lรคuft also auch dann noch, wenn eine vorgelagerte Gruppe ausfรคllt.
Dieses Muster ist typisch fรผr End-to-End-Testumgebungen, bei denen die API-Einrichtung abgeschlossen sein muss, bevor die UI-Assertions starten.
Fรผhren Sie TestNG Code gruppieren, einschlieรen, ausschlieรen (Video-Demo)
Nachfolgend finden Sie eine Schritt-fรผr-Schritt-Anleitung. Java Code und die XML-Suite, die den gruppieren, ausschlieรen und einschlieรen Verhalten.
Testszenario: Starten Sie die Guru99 Demo-Banking-Website: รberprรผfen Sie einige Elemente auf der Anmeldeseite, geben Sie Ihre Zugangsdaten ein und รผberprรผfen Sie nach der Anmeldung erneut einige Elemente im Dashboard.
Hinweis: Jeder Schritt befindet sich in einer eigenen Methode, aber zur Laufzeit hรคngt die Reihenfolge von den Eintrรคgen in der XML-Suite ab.
- Methode 1: Initialisieren Sie den Browser und starten Sie die URL (
tc01LaunchURL()). - Methode 2: รberprรผfen Sie die รberschrift der Anmeldeseite (
tc02VerifyLaunchPage()). - Methode 3: Geben Sie Benutzernamen und Passwort im Anmeldeformular ein (
tc03EnterCredentials()). - Methode 4: รberprรผfen Sie, ob die Manager-ID im Benutzer-Dashboard vorhanden ist (
tc04VerifyLoggedInPage()). - Methode 5: รberprรผfen Sie zusรคtzliche Links im Benutzer-Dashboard (
tc05VerifyHyperlinks()).
Code fรผr das folgende Szenario:
importieren java.util.concurrent.TimeUnit;
importieren org.openqa.selenium.By;
importieren org.openqa.selenium.WebDriver;
importieren org.openqa.selenium.firefox.FirefoxTreiber;
importieren org.testng.Assert;
importieren org.testng.Anmerkungen.Test;
รffentliche Klasse TC_Klasse1 {
รถffentliches statisches Finale WebTreiber webDriver = neu FirefoxLED Treiber();
Schnur launchPageHeading = โ//h3[text()='Guru99 Bank']โ;
Finale Schnur userName_element = โ//input[@name='uid']โ, password_element = โ//input[@name='password']โ,
signIn_element = โ//input[@name='btnLogin']โ;
Finale Schnur Benutzername_Wert = โmngr28642โ, password_value = โydAnateโ;
Finale Schnur Manager-ID = โ//td[contains(text(),'Manager Id')]โ;
Finale Schnur neuerKunde = โ//a[@href='addcustomerpage.php']โ, fundTransfer = โ//a[@href='FundTransInput.php']โ;
/** Dieser Testfall initialisiert den WebDriver */
@Prรผfung(Gruppen = { โBindungโ, โstarke Bindungenโ })
รถffentliche Leere tc01LaunchURL() {
webDriver.manage().window().maximize();
webDriver.manage().timeouts().implicitlyWait(20, Zeiteinheit.SEKUNDEN);
webDriver.get(โhttps://www.demo.guru99.com/V4/โ);
}
/** Prรผft, ob die รberschrift auf der Anmeldeseite vorhanden ist */
@Prรผfung(Gruppen = { โBindungโ })
รถffentliche Leere tc02VerifyLaunchPage() {
Assert.assertTrue(webDriver.findElement(By.xpath(launchPageHeading)).isDisplayed(),
โDie รberschrift der Startseite wird nicht angezeigt.โ);
System.out.println(โStartseitenรผberschrift wird angezeigtโ);
}
/** Gibt Benutzername und Passwort ein und klickt dann auf Anmelden */
@Prรผfung(Gruppen = { โBindungโ, โstarke Bindungenโ })
รถffentliche Leere 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();
}
/** รberprรผft die Manager-ID im Dashboard */
@Prรผfung(Gruppen = { โstarke Bindungenโ })
รถffentliche Leere tc04VerifyLoggedInPage() {
Assert.assertTrue(webDriver.findElement(By.xpath(managerID)).isDisplayed(),
โManager-ID-Etikett wird nicht angezeigtโ);
System.out.println(โManager-ID-Etikett wird angezeigtโ);
}
/** รberprรผft den Link fรผr Neukunden und den Link fรผr Geldtransfers im Dashboard */
@Prรผfung(Gruppen = { โBindungโ })
รถffentliche Leere tc05VerifyHyperlinks() {
Assert.assertTrue(webDriver.findElement(By.xpath(newCustomer)).isEnabled(),
โDer Hyperlink fรผr Neukunden wird nicht angezeigt.โ);
System.out.println(โNeukunden-Hyperlink wird angezeigtโ);
Assert.assertTrue(webDriver.findElement(By.xpath(fundTransfer)).isEnabled(),
Der Link zur Geldรผberweisung wird nicht angezeigt.);
System.out.println(โDer Hyperlink zur Geldรผberweisung wird angezeigt.โ);
}
}
Bitte beachten Sie: Die Demo-Banking-Zugangsdaten bleiben etwa 20 Tage lang gรผltig. Daher kann es bei einem lokalen Testlauf nach Ablauf dieses Zeitraums zu einem Fehler wegen ungรผltiger Zugangsdaten kommen.
Erklรคrung des Codes:
Fรผnf Testmethoden, eine pro Aktion, jede trรคgt eine groups Attribut auf dem @Test Anmerkung.
Die beiden logischen Gruppenbezeichnungen sind strong_ties und bonding.
- Die erste und die dritte Methode beinhalten beides
bondingundstrong_tiesSie werden also immer dann ausgefรผhrt, wenn eine der beiden Gruppen in der Suite enthalten ist. Dies ist ein gรคngiges Muster fรผr gemeinsam genutzte Testfall Schritte. - Die zweite Methode ist nur mit einem Tag versehen
bondingEs lรคuft also nur, wennbondingDie Gruppe ist eingeschlossen. - Die vierte Methode ist nur mit einem Tag versehen
strong_tiesEs lรคuft also nur, wenn diese Gruppe einbezogen ist. - Die fรผnfte Methode ist nur mit gekennzeichnet
bondingEs lรคuft also nur, wennbondingDie Gruppe ist eingeschlossen.
Es folgen vier Ausfรผhrungsszenarien:
Szenario 1: Fรผhre alle Testmethoden unabhรคngig von der Gruppe aus. Entferne die <groups> Blockierung des laufenden XML-Codes.
Szenario 2: Fรผhren Sie nur Methoden aus, die einer ausgewรคhlten Gruppe zugeordnet sind, nรคmlich strong_ties or bondingBitte sehen Sie sich das untenstehende Video an.
- Im ersten Teil des Videos,
<groups>Der Block ist auskommentiert, daher wird jede Testmethode ausgefรผhrt. - Im zweiten Teil wird der Gruppenfilter wiederhergestellt, und es werden nur die passenden Methoden ausgefรผhrt.
Szenario 3: Wenden Sie den Ausschlussfilter an, um ausgewรคhlte Testfรคlle zu รผberspringen. Bitte sehen Sie sich das Video an.
- Die Demo schlieรt Folgendes aus
tc02durch den Namen im laufenden XML-Code, und der Ergebnisbericht bestรคtigt, dass die ausgeschlossene Methode nicht ausgefรผhrt wird.
Szenario 4: Wenden Sie den Include-Filter an, um nur auszufรผhren tc01LaunchURL, tc03EnterCredentials und tc05VerifyHyperlinksBitte schauen Sie sich das Video an.
Bei diesem Durchlauf werden nur die im Include-Filter aufgefรผhrten Methoden genau wie konfiguriert ausgefรผhrt.
Laden Sie das Beispielprojekt รผber den unten stehenden Link herunter.
Fazit
Gruppen in TestNG Struktur in groรe Strukturen bringen Selenium und Unit-Suites durch Ersetzen einmaliger Klassenaufteilungen durch deklarative XML-Filter.
Kennzeichnen Sie Ihre Methoden mit @Test(groups = {...}), dann benutze <include>, <exclude> und dependsOnGroups um Smoke-, Regressions- und End-to-End-Tests aus demselben Maven-Projekt heraus zu steuern TestNG 7.x.


