TestNG ist ein Testframework, das verschiedene Arten von Testdesigns abdeckt, z. B. Unit-Test, Funktionstest, End-to-End-Test, UI-Test und Integrationstest.
Sie können einen einzelnen oder mehrere Testfälle in Ihrem Testng-Code ausführen.
Wenn während der Ausführung mehrerer Testfälle keine Testpriorität definiert ist, weist TestNG allen @Test eine Priorität als Null (0) zu.
Jetzt beim Laufen; niedrigere Prioritäten werden zuerst geplant.
In diesem Tutorial lernen Sie -
- Demo des TestNG-Codes ohne Priorität
- Demo des TestNG-Codes ohne Priorität in alphabetischer Reihenfolge
- So legen Sie die Priorität in TestNG fest
- Methoden mit gleicher Priorität
- Kombination von priorisierten (mit derselben Priorität) und nicht priorisierten Methoden
Demo des TestNG-Codes ohne Priorität
Nehmen wir ein Szenario, in dem eine Sequenzierung erforderlich ist, um alle Testfälle zu bestehen:
Szenario: Generieren Sie einen Code, in dem Sie eine Google-Suche mit einem bestimmten Schlüsselwort durchführen müssen, z. B. "Facebook". Stellen Sie nun sicher, dass der Browsertitel in "Facebook - Google Search" geändert wurde.
Hinweis: Jeder Schritt, den Sie codieren, sollte in separaten Methoden ausgeführt werden
Methode 1 : Öffnen Sie den Browser, sagen Sie Firefox (openBrowser ())
Methode 2 : Starten Sie Google.com (launchGoogle ())
Methode 3 : Führen Sie eine Suche mit "Facebook" durch (performSearchAndClick1stLink ())
Methode 4 : Überprüfen Sie den Titel der Google-Suchseite (FaceBookPageTitleVerification ()).
Code für unser Szenario :
import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.firefox.FirefoxDriver;import org.testng.Assert;import org.testng.annotations.Test;öffentliche Klasse Priority_In_testNG {WebDriver-Treiber;// Methode 1: Öffnen Sie Brower, sagen Sie Firefox@Prüfungpublic void openBrowser () {Treiber = neuer FirefoxDriver ();}}// Methode 2: Starten Sie Google.com@Prüfungpublic void launchGoogle () {driver.get ("http://www.google.co.in");}}// Methode 3: Führe eine Suche mit "Facebook" durch@Prüfungpublic void peformSeachAndClick1stLink () {driver.findElement (By.xpath (".//*[@ title = 'Search']")). sendKeys ("Facebook");}}// Methode 4: Überprüfen Sie den Titel der Google-Suchseite.@Prüfungpublic void FaceBookPageTitleVerification () löst eine Ausnahme aus {driver.findElement (By.xpath (".//*[@ value = 'Search']")). click ();Thread.sleep (3000);Assert.assertEquals (driver.getTitle (). Enthält ("Facebook - Google Search"), true);}}}}
Erklärung des Codes
Wie oben erwähnt, haben wir 4 Testfälle erstellt, um jede Aktion in einer unabhängigen Methode auszuführen.
- Die erste Methode (openBrowser) gibt an, den Firefox-Browser zu initialisieren.
- Die zweite Methode (launchGoogle) gibt an, dass sich das Starten von Google.com im initialisierten Browser befindet.
- Die dritte Methode (peformSeachAndClick1stLink) gibt an, dass eine Suche im Suchfeld (mit xpath (".//*[@title='Search ']") mit einem Suchbegriff wie Facebook und durchgeführt wird
- Die vierte und letzte Methode (FaceBookPageTitleVerification) besagt, dass Sie auf das Suchsymbol von Google klicken und überprüfen, ob der Browsertitel in Facebook - Google Search geändert wurde .
Führen Sie diesen Code nun mit testNG aus, wie im Video gezeigt. Sie werden feststellen, dass alle Testfälle fehlschlagen. Der Grund für den Fehler: Da die Abhängigkeit des vorherigen Testfalls besteht, wird nur der aktuell ausgeführte Testfall bestanden.
In diesem Fall,
- Die erste Methode, die ausgeführt wird, ist openBrowser (). Es wurde bestanden, weil es keine Abhängigkeit hat.
- Die zweite ausgeführte Methode ist FaceBookPageTitleVerification (); Dies schlägt fehl, weil wir versuchen, auf die Schaltfläche "Suchen" zu klicken und den Browsertitel zu überprüfen.
- Sie können sehen, dass, wenn die Suchaktivität nicht verarbeitet wird, jeder andere Schritt bestanden werden kann. Daher ist dies der Grund, warum meine Testfälle fehlschlagen.
PASSED: openBrowserFEHLGESCHLAGEN: FaceBookPageTitleVerificationFEHLGESCHLAGEN: launchGoogleFEHLGESCHLAGEN: peformSeachAndClick1stLink
Demo des TestNG-Codes ohne Priorität in alphabetischer Reihenfolge
Wenn wir keine Priorität erwähnen, führt testng die @ Test-Methoden basierend auf der alphabetischen Reihenfolge ihrer Methodennamen aus, unabhängig von ihrem Implementierungsort im Code.
Paket com.guru.testngannotations;import org.testng.annotations.Test;öffentliche Klasse TestNG_Priority_Annotations {@Prüfungpublic void c_method () {System.out.println ("Ich bin in Methode C");}}@Prüfungpublic void b_method () {System.out.println ("Ich bin in Methode B");}}@Prüfungpublic void a_method () {System.out.println ("Ich bin in Methode A");}}@Prüfungpublic void e_method () {System.out.println ("Ich bin in Methode E");}}@Prüfungpublic void d_method () {System.out.println ("Ich bin in Methode D");}}}}
Ausgabe
Ich bin in Methode A.Ich bin in Methode B.Ich bin in Methode C.Ich bin in Methode D.Ich bin in Methode E.
Obwohl wir die Methoden zufällig definiert haben (c, b, a, e, d), führte testng die Methoden basierend auf ihren Methodennamen unter Berücksichtigung der alphabetischen Reihenfolge aus, und dies spiegelte sich auch in der Ausgabe wider.
So legen Sie die Priorität in TestNG fest
Wie Sie im vorherigen Beispiel gesehen haben, ist eine Sequenzierung erforderlich, um dieses Szenario zu bestehen. Daher werden wir den vorherigen Code mit dem Prioritätsparameter so ändern , dass jeder Test mit der ihnen zugewiesenen Priorität ausgeführt wird.
Wie Sie sehen, haben wir jedem Testfall die Priorität zugewiesen. Dies bedeutet, dass im Testfall zuerst der Wert mit der niedrigeren Priorität ausgeführt wird.
Priorität in testNG in Aktion
import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.firefox.FirefoxDriver;import org.testng.Assert;import org.testng.annotations.Test;öffentliche Klasse Priority_In_testNG {WebDriver-Treiber;// Methode 1: Öffnen Sie den Browser, sagen Sie Firefox@ Test (Priorität = 1)public void openBrowser () {Treiber = neuer FirefoxDriver ();}}// Methode 2: Starten Sie Google.com@ Test (Priorität = 2)public void launchGoogle () {driver.get ("http://www.google.co.in");}}// Methode 3: Führe eine Suche mit "Facebook" durch@ Test (Priorität = 3)public void peformSeachAndClick1stLink () {driver.findElement (By.xpath (".//*[@ title = 'Search']")). sendKeys ("Facebook");}}// Methode 4: Überprüfen Sie den Titel der Google-Suchseite.@ Test (Priorität = 4)public void FaceBookPageTitleVerification () löst eine Ausnahme aus {driver.findElement (By.xpath (".//*[@ value = 'Search']")). click ();Thread.sleep (3000);Assert.assertEquals (driver.getTitle (). Enthält ("Facebook - Google Search"), true);}}}}
Erklärung des Codes
Führen Sie nach dem Zuweisen der Priorität zu jedem Testfall den obigen Code mit testNG aus, wie in Video 2 unten gezeigt.
Hier sehen Sie, dass Testfälle priorisiert werden. Testfälle mit niedrigerer Priorität werden zuerst ausgeführt, dh jetzt erfolgt eine sequentielle Ausführung gemäß der Priorität in den Testfällen. Daher bestehen jetzt alle Testfälle.
Beachten Sie die Konsole von Eclipse:
Ausgabe :
PASSED: openBrowserPASSED: launchGooglePASSED: peformSearchAndClick1stLinkPASSED: FaceBookPageTitleVerification
Nummer 0 hat die höchste Priorität (sie wird zuerst ausgeführt) und die Priorität wird basierend auf der angegebenen Nummer fortgesetzt, dh 0 hat die höchste Priorität als 1. 1 hat die höchste Priorität als 2 und so weiter.
Paket com.guru.testngannotations;import org.testng.annotations.Test;öffentliche Klasse TestNG_Priority_Annotations {@ Test (Priorität = 6)public void c_method () {System.out.println ("Ich bin in Methode C");}}@ Test (Priorität = 9)public void b_method () {System.out.println ("Ich bin in Methode B");}}@ Test (Priorität = 1)public void a_method () {System.out.println ("Ich bin in Methode A");}}@ Test (Priorität = 0)public void e_method () {System.out.println ("Ich bin in Methode E");}}@ Test (Priorität = 3)public void d_method () {System.out.println ("Ich bin in Methode D");}}}}
Ausgabe
Ich bin in Methode E.Ich bin in Methode A.Ich bin in Methode D.Ich bin in Methode C.Ich bin in Methode B.
Hier haben wir die Prioritäten als 0,1,3,6,9 angegeben. Daher wird zuerst eine Methode mit 0 als Priorität und dann eine Methode mit Priorität 1 usw. ausgeführt. Hier wird der Name der alphabetischen Reihenfolge nicht berücksichtigt, da wir die Prioritäten angegeben haben
Methoden mit gleicher Priorität:
Es besteht die Möglichkeit, dass Methoden dieselbe Priorität haben. In diesen Fällen berücksichtigt testng die alphabetische Reihenfolge der Methodennamen, deren Priorität gleich ist.
Paket com.guru.testngannotations;import org.testng.annotations.Test;öffentliche Klasse TestNG_Priority_Annotations {@ Test (Priorität = 6)public void c_method () {System.out.println ("Ich bin in Methode C");}}@ Test (Priorität = 9)public void b_method () {System.out.println ("Ich bin in Methode B");}}@ Test (Priorität = 6)public void a_method () {System.out.println ("Ich bin in Methode A");}}@ Test (Priorität = 0)public void e_method () {System.out.println ("Ich bin in Methode E");}}@ Test (Priorität = 3)public void d_method () {System.out.println ("Ich bin in Methode D");}}}}
Ausgabe
Ich bin in Methode E.Ich bin in Methode D.Ich bin in Methode A.Ich bin in Methode C.Ich bin in Methode B.
Hier werden 'e' und 'd' basierend auf ihren Prioritätswerten ausgeführt. Die Methoden 'a' und 'c' enthalten jedoch den gleichen Prioritätswert (6). Hier berücksichtigt testng also die alphabetische Reihenfolge von 'a' und 'c' und führt sie entsprechend aus.
Kombination von priorisierten (mit derselben Priorität) und nicht priorisierten Methoden:
In diesem Fall werden zwei Fälle in einer Testklasse behandelt.
- Methoden mit gleichem Prioritätswert.
- Mehr als eine nicht priorisierte Methode.
Paket com.guru.testngannotations;import org.testng.annotations.Test;öffentliche Klasse TestNG_Priority_Annotations {@Prüfung()public void c_method () {System.out.println ("Ich bin in Methode C");}}@Prüfung()public void b_method () {System.out.println ("Ich bin in Methode B");}}@ Test (Priorität = 6)public void a_method () {System.out.println ("Ich bin in Methode A");}}@ Test (Priorität = 0)public void e_method () {System.out.println ("Ich bin in Methode E");}}@ Test (Priorität = 6)public void d_method () {System.out.println ("Ich bin in Methode D");}}}}
Ausgabe:
Ich bin in Methode B.Ich bin in Methode C.Ich bin in Methode E.Ich bin in Methode A.Ich bin in Methode D.
PASSED: b_methodPASSED: c_methodPASSED: e_methodPASSED: a_methodPASSED: d_method
Erläuterung:
Erste Präferenz: Nicht priorisierte Methoden: 'c' und 'b': Basierend auf der alphabetischen Reihenfolge wurde zuerst 'b' und dann 'c' ausgeführt.
Zweite Präferenz: Priorisierte Methoden: 'a', 'e' und 'd': 'e' wurde zuerst ausgeführt, da es die höchste Priorität hatte (0). Da die Priorität der Methoden 'a' und 'd' gleich war, berücksichtigte testng die alphabetische Reihenfolge ihrer Methodennamen. Also wurde zwischen ihnen zuerst 'a' und dann 'd' ausgeführt.
In TestNG wird zwischen Groß- und Kleinschreibung unterschieden
Nur zu Ihrer Information gibt es eine Standardsyntax zum Definieren der Priorität in testNG, dh @Test (Priorität = 4) . Angenommen, Sie definieren sie in einer anderen Syntax, z. B. @Test (PRIORITY = 1). Ihre IDE zeigt sie dann als Kompilierungsfehler an . Siehe Bild unten:
Fazit:
Wie Sie gesehen haben, kann die Ausführung einer Reihe von Testfällen in einer bestimmten Reihenfolge problemlos mit Priority unter Verwendung von testNG als Ausführungswerkzeug durchgeführt werden.
Dieses Tutorial wird durch Beiträge von Ramandeep Singh und Rama Krishna Gadde ermöglicht