TestNG @Testpriorität in Selenium

TestNG ist eine Testen Framework, das verschiedene Arten von Testdesigns abdeckt, wie Unit-Test, Funktionstest, End-to-End-Test, UI-Test und Integrationstest.

Sie können einen einzelnen oder mehrere Testfälle in Ihrem ausführen Testng Code.

Wenn die Testpriorität beim Ausführen mehrerer Testfälle nicht definiert ist, TestNG weist allen @Test eine Priorität von Null(0) zu.

Jetzt beim Laufen; Niedrigere Prioritäten werden zuerst geplant.

Demo von TestNG Code ohne Priorität

Nehmen wir ein Szenario, in dem eine Sequenzierung erforderlich ist, um alle Testfälle zu bestehen:

Szenario: Generieren Sie einen Code, bei dem Sie aufgefordert werden, eine Google-Suche mit einem bestimmten Schlüsselwort, beispielsweise „Facebook“, durchzuführen. Überprüfen Sie nun, ob der Browsertitel in „Facebook – Google-Suche“ geändert wurde.

Hinweis: Jeder Schritt, den Sie codieren, sollte in separaten Methoden erfolgen

Methode 1: Öffnen Sie den Browser Firefox (Browser öffnen())

Methode 2: Google.com starten (launchGoogle())

Methode 3: Führen Sie eine Suche mit „Facebook“ durch (performSearchAndClick1stLink())

Methode 4: Titel der Google-Suchseite überprüfen (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;			

public class Priority_In_testNG {		
    WebDriver driver;			

	    // Method 1: Open Brower say Firefox			
	    @Test		
	    public void openBrowser() {				
	        driver = new FirefoxDriver();				
	    }		

	    // Method 2: Launch Google.com			
	    @Test		
	    public void launchGoogle() {				
	        driver.get("http://www.google.co.in");						
	    }		
        
	    // Method 3: Perform a search using "Facebook"			
	    @Test		
	    public void peformSeachAndClick1stLink() {				
	        driver.findElement(By.xpath(".//*[@title='Search']")).sendKeys("Facebook");								
	    }		

	    // Method 4: Verify Google search page title.			
	    @Test		
	    public void FaceBookPageTitleVerification() throws Exception {				
	        driver.findElement(By.xpath(".//*[@value='Search']")).click();						
	        Thread.sleep(3000);		
	        Assert.assertEquals(driver.getTitle().contains("Facebook - Google Search"), true);				
	    }		
	}		

Erklärung des Codes

Wie oben erwähnt haben wir 4 Testfälle erstellt, um jede Aktion in unabhängigen Methoden auszuführen.

  • Die erste Methode (Browser öffnen) Zustände, die initialisiert werden sollen Firefox Browser.
  • Die zweite Methode (Google starten) gibt an, dass der Start von Google.com im initialisierten Browser erfolgt.
  • Die dritte Methode (peformSeachAndClick1stLink)gibt an, dass eine Suche im Suchfeld durchgeführt wird (mit xpath („.//*[@title='Suchen']“) mit einem Suchbegriff als Facebook und
  • Die vierte und letzte Methode (FaceBookPageTitleVerification) besagt, dass Sie auf das Suchsymbol von Google klicken und überprüfen, ob der Browsertitel in geändert wurde Facebook – Google-Suche.

Führen Sie nun diesen Code mit testNG aus, wie im Video gezeigt. Sie finden alle Testfall scheitern. Der Grund für das Scheitern: Da es eine Abhängigkeit vom vorherigen Testfall zum Bestehen gibt, wird nur der aktuell laufende Testfall bestanden.

In diesem Fall

  • Die erste Methode, die ausgeführt wird, ist Browser öffnen(). Es wurde übergeben, da keine Abhängigkeit besteht.
  • Die zweite ausgeführte Methode ist FaceBookPageTitleVerification(); Es schlägt fehl, weil wir versuchen, auf die Suchschaltfläche zu klicken und den Browsertitel zu überprüfen.
  • Sie können sehen, dass jeder andere Schritt bestanden werden kann, wenn die Suchaktivität nicht verarbeitet wird. Dies ist also der Grund, warum meine Testfälle fehlschlagen.
PASSED: openBrowser
FAILED: FaceBookPageTitleVerification
FAILED: launchGoogle
FAILED: peformSeachAndClick1stLink

Demo von TestNG Code ohne Priorität in alphabetischer Reihenfolge

Wenn wir keine Priorität angeben, führt testng die @Test-Methoden in der alphabetischen Reihenfolge ihrer Methodennamen aus, unabhängig von ihrem Implementierungsort im Code.

package com.guru.testngannotations;

import org.testng.annotations.Test;

public class TestNG_Priority_Annotations {

@Test
public void c_method(){
System.out.println("I'm in method C");
}
@Test
public void b_method(){
System.out.println("I'm in method B");
}
@Test
public void a_method(){
System.out.println("I'm in method A");
}
@Test
public void e_method(){
System.out.println("I'm in method E");
}
@Test
public void d_method(){
System.out.println("I'm in method D");
}

}

Ausgang

I'm in method A 
I'm in method B 
I'm in method C 
I'm in method D 
I'm in method E 

Obwohl wir die Methoden in zufälliger Reihenfolge definiert haben (c, b, a, e, d), hat testng die Methoden basierend auf ihren Methodennamen unter Berücksichtigung der alphabetischen Reihenfolge ausgeführt, und das Gleiche wurde auch in der Ausgabe widergespiegelt.

So legen Sie die Priorität fest TestNG

Wie Sie im vorherigen Beispiel gesehen haben, ist eine Sequenzierung erforderlich, um dieses Szenario zu bestehen. Daher werden wir den vorherigen Codeabschnitt mit ändern Prioritätsparameter sodass jeder Test mit der ihm zugewiesenen Priorität ausgeführt werden sollte.

Wie Sie nun sehen können, haben wir jedem Testfall die Priorität zugewiesen, was bedeutet, dass der Testfall mit dem niedrigeren Prioritätswert zuerst 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;			

public class Priority_In_testNG {		
    WebDriver driver;			

    // Method 1: Open Browser say Firefox			
    @Test (priority=1)		
    public void openBrowser() {				
        driver = new FirefoxDriver();				
    }		

    // Method 2: Launch Google.com			
    @Test (priority=2)		
    public void launchGoogle() {				
        driver.get("http://www.google.co.in");						
    }		

    // Method 3: Perform a search using "Facebook"			
    @Test (priority=3)		
    public void peformSeachAndClick1stLink() {				
        driver.findElement(By.xpath(".//*[@title='Search']")).sendKeys("Facebook");								
    }		

    // Method 4: Verify Google search page title.			
    @Test (priority=4)		
    public void FaceBookPageTitleVerification() throws Exception {				
        driver.findElement(By.xpath(".//*[@value='Search']")).click();						
        Thread.sleep(3000);		
        Assert.assertEquals(driver.getTitle().contains("Facebook - Google Search"), true);				
    }		
}

Erklärung des Codes

Nachdem Sie jedem Testfall eine Priorität zugewiesen haben, führen Sie den obigen Code mit testNG aus, wie im unten aufgeführten Video 2 gezeigt.

Hier sehen Sie, dass Testfälle priorisiert werden. Testfälle mit niedrigerer Priorität werden zuerst ausgeführt, d. h. es erfolgt nun eine sequenzielle Ausführung entsprechend der Priorität in den Testfällen. Daher werden jetzt alle Testfälle bestanden.

Beachten Sie die Konsole von Eclipse:

Ausgang :

PASSED: openBrowser
PASSED: launchGoogle
PASSED: peformSearchAndClick1stLink
PASSED: FaceBookPageTitleVerification

Nummer 0 hat die höchste Priorität (sie wird zuerst ausgeführt) und die Priorität geht basierend auf der angegebenen Nummer weiter, dh 0 hat die höchste Priorität als 1. 1 hat die höchste Priorität als 2 und so weiter.

package com.guru.testngannotations;
import org.testng.annotations.Test;

public class TestNG_Priority_Annotations {

    @Test(priority=6)
    public void c_method(){
    System.out.println("I'm in method C");
    }
    @Test(priority=9)
    public void b_method(){
    System.out.println("I'm in method B");
    }
    @Test(priority=1)
    public void a_method(){
    System.out.println("I'm in method A");
    }
    @Test(priority=0)
    public void e_method(){
    System.out.println("I'm in method E");
    }
    @Test(priority=3)
    public void d_method(){
    System.out.println("I'm in method D");
    }

}

Ausgang

I'm in method E 
I'm in method A 
I'm in method D 
I'm in method C 
I'm in method B

Hier haben wir die Prioritäten als 0,1,3,6,9 angegeben. Daher wird zuerst die Methode mit der Priorität 0 ausgeführt, dann die Methode mit der Priorität 1 und so weiter. Hier wird der Methodenname in alphabetischer 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 mit derselben Priorität.

package com.guru.testngannotations;
import org.testng.annotations.Test;

public class TestNG_Priority_Annotations {

    @Test(priority=6)
    public void c_method(){
    System.out.println("I'm in method C");
    }
    @Test(priority=9)
    public void b_method(){
    System.out.println("I'm in method B");
    }
    @Test(priority=6)
    public void a_method(){
    System.out.println("I'm in method A");
    }
    @Test(priority=0)
    public void e_method(){
    System.out.println("I'm in method E");
    }
    @Test(priority=3)
    public void d_method(){
    System.out.println("I'm in method D");
    }

}

Ausgang

I'm in method E 
I'm in method D 
I'm in method A 
I'm in method C 
I'm in method B 

Hier werden „e“ und „d“ basierend auf ihren Prioritätswerten ausgeführt. Aber die Methoden „a“ und „c“ enthalten denselben Prioritätswert (6). Daher berücksichtigt testng hier die alphabetische Reihenfolge von „a“ und „c“ und führt sie entsprechend aus.

Kombination sowohl priorisierter (mit gleicher Priorität) als auch nicht priorisierter Methoden

In diesem Fall behandeln wir zwei Fälle in einer Testklasse.

  1. Methoden mit demselben Prioritätswert.
  2. Mehr als eine nicht priorisierte Methode.
package com.guru.testngannotations;

import org.testng.annotations.Test;

public class TestNG_Priority_Annotations {

	@Test()
	public void c_method(){
		System.out.println("I'm in method C");
	}
	@Test()
	public void b_method(){
		System.out.println("I'm in method B");
	}
	@Test(priority=6)
	public void a_method(){
		System.out.println("I'm in method A");
	}
	@Test(priority=0)
	public void e_method(){
		System.out.println("I'm in method E");
	}
	@Test(priority=6)
	public void d_method(){
		System.out.println("I'm in method D");
	}
}

Ausgang:

I'm in method B 
I'm in method C 
I'm in method E 
I'm in method A 
I'm in method D
PASSED: b_method 
PASSED: c_method 
PASSED: e_method 
PASSED: a_method 
PASSED: 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 (0) hatte. Da die Priorität der Methoden „a“ und „d“ gleich war, berücksichtigte testng die alphabetische Reihenfolge ihrer Methodennamen. Daher wurde „a“ zuerst ausgeführt und dann „d“.

Groß-/Kleinschreibung beachten TestNG

Nur zu Ihrer Information: Es gibt eine Standardsyntax zum Definieren der Priorität in testNG, d. h. @Test (Priorität=4)Angenommen, Sie definieren es beispielsweise in einer anderen Syntax @Test (PRIORITÄT=1) dann zeigt Ihre IDE es als Kompilierungsfehler an. Siehe Bild unten:

Groß-/Kleinschreibung beachten TestNG

Fazit

Wie Sie gesehen haben, kann die Anforderung, eine Reihe von Testfällen in einer bestimmten Reihenfolge auszuführen, problemlos mithilfe von erledigt werden Priorität Verwenden von testNG als Ausführungstool.

Dieses Tutorial wurde durch die Beiträge von Ramandeep Singh und Rama ermöglicht Krishna Gadd