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.

  • ๐Ÿท๏ธ Annotationssyntax: Arbeiten jederzeit weiterbearbeiten kรถnnen. Jede Prรคsentation und jeder KI-Avatar, den Sie von Grund auf neu erstellen oder hochladen, @Test(groups = {"smoke","regression"}) Eine beliebige Methode mit einem oder mehreren logischen Gruppennamen kennzeichnen.
  • ๐Ÿ“œ XML-Steuerung: Das <groups><run><include> und <exclude> Tags innerhalb der testng.xml-Datei entscheiden darรผber, welche markierten Methoden tatsรคchlich ausgefรผhrt werden.
  • ๐Ÿ”— Abhรคngigkeiten: Das dependsOnGroups Das Attribut erzwingt eine bestimmte Reihenfolge, sodass die Voraussetzungsgruppen immer abgeschlossen sind, bevor die abhรคngigen Tests beginnen.
  • ๐Ÿค– KI-Auswahl: KI-gestรผtzte Tools zur Testwirkungsanalyse ordnen Codeรคnderungen relevanten Gruppen zu, sodass bei jedem Commit nur die betroffenen Testreihen ausgefรผhrt werden.
  • ๐Ÿงช TestNG 7.x: In den aktuellen Versionen bleiben Gruppen vollstรคndig kompatibel mit paralleler Ausfรผhrung, Listenern und Maven Surefire-Pipelines.

Gruppen in TestNG

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.

@Prรผfung (Gruppen = { โ€žBindungโ€œ, โ€žstarke Bindungenโ€œ })

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.

<Gruppen>
<Lauf>
<das Name=โ€žBindungโ€œ />
</Lauf>
</Gruppen>

Angenommen, eine einzelne Klasse enthรคlt 10 Testmethoden.

Aus diesen Methoden:

  • 6 Methoden tragen die bonding Gruppe und
  • 4 Methoden tragen die strong_ties Gruppe.

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.guru99 ist das Paket und TC_Class1 ist 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.

Ausschluss-TagSyntax fรผr das Ausschluss-TagausschlieรŸen Name=โ€œ${TEST_CASE_NAME}โ€ />
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 mit dependsOnGroups = {"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 = true Der 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.

Fรผhren Sie TestNG Gruppieren, EinschlieรŸen, AusschlieรŸen Code

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:

Paket com.group.guru99;

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 bonding und strong_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, wenn bonding Die 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, wenn bonding Die 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 tc02 durch 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.

Laden Sie das obige Code

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.

Hรคufig gestellte Fragen

Eine Gruppe ist eine logische Bezeichnung, die einer Testmethode รผber die groups Attribut auf @TestDie XML-Suite wรคhlt dann Gruppen mithilfe von Einschluss- und Ausschlussfiltern aus, sodass Sie zur Laufzeit entscheiden, welche markierten Methoden ausgefรผhrt werden.

innen <groups><run>, hat das <include name="..."> Tags Whitelist-Gruppen fรผr den Lauf, und <exclude name="..."> blockiert sie. TestNG Die Ausnahmen werden nach den Einschlรผssen angewendet, sodass eine ausgeschlossene Gruppe immer รผbersprungen wird, selbst wenn sie auch in den Einschlรผssen aufgefรผhrt ist.

Das dependsOnGroups Attribut auf @Test Streitkrรคfte TestNG Alle Methoden der aufgelisteten Gruppe sollen vor dem Start der abhรคngigen Methode ausgefรผhrt werden. Falls eine der Voraussetzungen fehlschlรคgt, TestNG kennzeichnet die abhรคngige Methode als รผbersprungen anstatt als fehlgeschlagen.

Ja. Die groups Das Attribut akzeptiert ein Array, also @Test(groups = {"smoke", "regression"}) ordnet eine Methode beiden Gruppen zu. TestNG Diese Methode wird immer dann ausgefรผhrt, wenn eine der beiden Gruppen in der Suite enthalten ist, wodurch die gemeinsamen Schritte DRY bleiben.

TestNG 7.x ist die unterstรผtzte Produktlinie, mit Releases unter der org.testng:testng Maven Coordinate sorgt dafรผr, dass Gruppen, parallele Ausfรผhrung und Listener vollstรคndig kompatibel mit modernen Systemen sind. Selenium 4- und JDK 17-Projekte.

KI-gestรผtzte Tools zur Testauswirkungsanalyse analysieren Code-Diffs und ordnen geรคnderte Klassen den entsprechenden Gruppen zu. Die Pipeline fรผhrt bei jedem Pull Request nur die markierten Gruppen aus, wodurch die Feedbackzeit verkรผrzt und gleichzeitig die Effizienz erhalten bleibt.ping Risikopfade werden getestet.

Ja. KI-Clustering-Algorithmen lesen historische Fehlerprotokolle, kennzeichnen fehlerhafte Tests und schlagen eine stabile Teilmenge vor, die als solche gekennzeichnet ist. regressionDie Ingenieure genehmigen die Liste, dann TestNG Diese Gruppe leitet jede Nacht das Team, wodurch die Suite engmaschig bleibt, ohne dass die Abdeckung verloren geht.

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: