TestNG @Testprioritet i Selenium

TestNG är en Testning ramverk, som täcker olika typer av testdesigner som ett enhetstest, funktionstest, end-to-end-test, UI-test och integrationstest.

Du kan köra ett eller flera testfall i din Testng koda.

Om testprioritet inte definieras när du kör flera testfall, TestNG tilldelar alla @Test en prioritet som noll(0).

Nu, medan du springer; lägre prioriteringar kommer att planeras först.

Demo av TestNG kod utan prioritet

Låt oss ta ett scenario där sekvensering kommer att krävas för att klara alla testfall:

Scenario: Generera en kod där du måste utföra en Google-sökning med ett specifikt sökord, säg "Facebook". Kontrollera nu att webbläsarens titel har ändrats till "Facebook – Google Sök".

Obs: Varje steg som du kodar bör vara i separata metoder

Förfarande 1: Öppna webbläsaren säg Firefox (openBrowser())

Förfarande 2: Starta Google.com (launchGoogle())

Förfarande 3: Utför en sökning med "Facebook" (performSearchAndClick1stLink())

Förfarande 4: Verifiera Googles söksidas titel (FaceBookPageTitleVerification())

Kod för vårt scenario:

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);				
	    }		
	}		

Förklaring av koden

Som nämnts ovan har vi skapat 4 testfall för att utföra varje åtgärd i en oberoende metod.

  • Den första metoden (openBrowser) tillstånd att initiera Firefox webbläsare.
  • Den andra metoden (starta Google) anger att start av Google.com är i den initierade webbläsaren.
  • Den tredje metoden (peformSeachAndClick1stLink)stater som utför en sökning i sökrutan (med xpath (“.//*[@title='Sök']”) med en sökterm som Facebook och
  • Den fjärde och sista metoden (FaceBookPageTitleVerification) anger att klicka på sökikonen för Google och verifiera att webbläsarens titel har ändrats till Facebook – Google Sök.

Kör nu den här koden med testNG som visas i videon du hittar alla Testfall misslyckas. Orsaken till misslyckandet: eftersom det finns ett beroende av tidigare testfall för att godkännas, kommer endast det aktuella testfallet att godkännas.

I det här fallet,

  • Den första metoden som exekveras är openBrowser(). Det godkändes eftersom det inte har något beroende.
  • Den andra metoden som exekveras är FaceBookPageTitleVerification(); det misslyckas eftersom vi försöker klicka på sökknappen och verifiera webbläsarens titel.
  • Du kan se att om sökaktiviteten inte bearbetas, hur kan något annat steg passeras. Därför är detta anledningen till att mina testfall misslyckas.
PASSED: openBrowser
FAILED: FaceBookPageTitleVerification
FAILED: launchGoogle
FAILED: peformSeachAndClick1stLink

Demo av TestNG kod utan prioritet i alfabetisk ordning

Om vi ​​inte nämner någon prioritet, kommer testng att exekvera @Test-metoderna baserat på alfabetisk ordning av deras metodnamn, oavsett var de är implementerade i koden.

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");
}

}

Produktion

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 

Även om vi definierade metoderna på ett slumpmässigt sätt (c, b, a, e, d), exekverade testng metoderna baserat på deras metodnamn genom att överväga alfabetisk ordning och detsamma återspeglades också i utdata.

Hur man ställer in prioritet i TestNG

Som du har sett i det föregående exemplet att sekvensering krävs för att klara detta scenario, så kommer vi att modifiera den föregående kodbiten med Prioritetsparameter så att varje test ska köras mot den prioritet som tilldelats dem.

Nu som du kan se har vi tilldelat prioritet till varje testfall betyder att testfall kommer att exekveras det lägre prioritetsvärdet först.

Prioritet i testNG i 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);				
    }		
}

Förklaring av koden

Efter att ha tilldelat prioritet till varje testfall, kör ovanstående kod med testNG som visas i Video-2 som nämns nedan.

Här kan du se att testfall är prioriterade. Testfall med lägre prioritet exekveras först, dvs nu sker en sekventiell exekvering enligt prioritet i testfallen. Därför passerar alla testfall nu.

Notera konsolen av förmörkelse:

Produktion :

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

Nummer 0 har högsta prioritet (det kommer att köras först) och prioriteten fortsätter baserat på det givna numret, dvs 0 har högsta prioritet än 1. 1 har högsta prioritet än 2 och så vidare.

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");
    }

}

Produktion

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

Här har vi angett prioriteringarna som 0,1,3,6,9. Så, metod med 0 som prioritet exekveras först och sedan metod med prioritet-1 och så vidare. Här kommer inte metodnamnet i alfabetisk ordning att beaktas eftersom vi angav prioriteringarna

Metoder med samma prioritet

Det kan finnas en chans att metoder kan ha samma prioritet. I dessa fall tar testng hänsyn till den alfabetiska ordningen för metodnamnen vars prioritet är samma.

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");
    }

}

Produktion

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 

Här exekveras 'e' och 'd' baserat på deras prioritetsvärden. Men metoderna 'a' och 'c' innehåller samma prioritetsvärde(6). Så här tar testng hänsyn till den alfabetiska ordningen för 'a' och 'c' och utför dem därefter.

Kombinera både prioriterade (har samma prioritet) och oprioriterade metoder

I det här fallet kommer vi att täcka två fall i en testklass.

  1. Metoder med samma prioritetsvärde.
  2. Mer än en oprioriterad metod.
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");
	}
}

Produktion:

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

Förklaring:

Första preferens: Icke-prioriterade metoder: 'c' och 'b': Baserat på alfabetisk ordning kördes 'b' först och sedan 'c'.

Andra preferens: Prioriterade metoder: 'a', 'e' och 'd': 'e' kördes först eftersom det hade högsta prioritet(0). Eftersom prioriteringen av 'a'- och 'd'-metoderna var samma, tog testng hänsyn till den alfabetiska ordningen för deras metodnamn. Så mellan dem utfördes 'a' först och sedan 'd'.

Skiftlägeskänslig i TestNG

Bara för din information finns det en standardsyntax för att definiera prioritet i testNG dvs @Test (prioritet=4), anta att du definierar det i någon annan syntax @Test (PRIORITET=1) då kommer din IDE att visa det som ett kompileringsfel. Se bilden nedan:

Skiftlägeskänslig i TestNG

Slutsats

Som du har sett att om det finns ett krav på att köra en uppsättning testfall i en specifik sekvens så kan det enkelt göras med Budget använder testNG som ett körverktyg.

Denna handledning är möjlig tack vare bidrag från Ramandeep Singh och Rama Krishna Gadde