TestNG @Testprioritet i Selenium

TestNG er en Test ramme, der dรฆkker forskellige typer testdesign som en enhedstest, funktionstest, ende-til-ende-test, UI-test og integrationstest.

Du kan kรธre en enkelt eller flere testcases i din Testng kode.

Hvis testprioritet ikke er defineret, mens du kรธrer flere testcases, TestNG tildeler alle @Test en prioritet som nul(0).

Nu, mens du lรธber; lavere prioriteter vil blive planlagt fรธrst.

Demo af TestNG kode uden prioritet

Lad os tage et scenario, hvor sekventering vil vรฆre pรฅkrรฆvet for at bestรฅ alle testcases:

Scenario: Generer en kode, hvor du skal udfรธre en Google sรธg med et specifikt sรธgeord, f.eks. "Facebook". Kontroller nu, at browsertitlen er รฆndret til "Facebook โ€“ Google Sรธge".

Bemรฆrk: Hvert trin, som du koder, skal vรฆre i separate metoder

Metode 1: ร…bn Browser sig Firefox (openBrowser())

Metode 2: Lancering Google.com (lanceringGoogle())

Metode 3: Udfรธr en sรธgning ved hjรฆlp af "Facebook" (performSearchAndClick1stLink())

Metode 4Bekrรฆft Google sรธgesidetitel (FaceBookPageTitleVerification())

Code for vores scenarie:

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

Forklaring af Code

Som nรฆvnt ovenfor har vi lavet 4 testcases til at udfรธre hver handling i en uafhรฆngig metode.

  • Den fรธrste metode (รฅben browser) tilstande for at initialisere Firefox browser.
  • Den anden metode (lanceringGoogle) stater, der lancerer Google.com er i den initialiserede browser.
  • Den tredje metode (peformSeachAndClick1stLink)stater, der udfรธrer en sรธgning i sรธgefeltet (med xpath (".//*[@title='Sรธg']") med et sรธgeord som Facebook og
  • Den fjerde og sidste metode (FaceBookPageTitleVerification) stater, der klikker pรฅ sรธgeikonet for Google og bekrรฆft at browsertitlen er รฆndret til Facebook - Google Sรธg.

Kรธr nu denne kode ved hjรฆlp af testNG som vist i videoen, du vil finde alle Test sag fejler. ร…rsagen til fejlen: da der er en afhรฆngighed af tidligere testcase for at bestรฅ, vil kun den aktuelle kรธrende testcase blive bestรฅet.

I dette tilfรฆlde,

  • Den fรธrste metode, der udfรธres, er openBrowser(). Det blev bestรฅet, fordi det ikke har nogen afhรฆngighed.
  • Den anden udfรธrte metode er FaceBookPageTitleVerification(); det mislykkes, fordi vi forsรธger at klikke pรฅ sรธgeknappen og bekrรฆfte browsertitlen.
  • Du kan se, at hvis sรธgeaktivitet ikke behandles, hvordan ethvert andet trin kan bestรฅes. Derfor er dette grunden til, at mine testsager fejler.
PASSED: openBrowser
FAILED: FaceBookPageTitleVerification
FAILED: launchGoogle
FAILED: peformSeachAndClick1stLink

Demo af TestNG kode uden prioritet i alfabetisk rรฆkkefรธlge

Hvis vi ikke nรฆvner nogen prioritet, vil testng udfรธre @Test-metoderne baseret pรฅ alfabetisk rรฆkkefรธlge af deres metodenavne, uanset deres implementeringssted 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 

Selvom vi definerede metoderne pรฅ en tilfรฆldig mรฅde (c, b, a, e, d), udfรธrte testng metoderne baseret pรฅ deres metodenavne ved at overveje alfabetisk rรฆkkefรธlge, og det samme blev ogsรฅ afspejlet i outputtet.

Sรฅdan indstilles prioritet i TestNG

Som du har set i det foregรฅende eksempel, krรฆvede sekventering for at bestรฅ dette scenarie, sรฅ vi vil รฆndre det forrige stykke kode med Prioritetsparameter sรฅ hver test skal kรธre imod den prioritet, de er tildelt.

Nu, som du kan se, har vi tildelt prioritet til hver testcase, hvilket betyder, at testcase vil den lavere prioritetsvรฆrdi blive udfรธrt 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);				
    }		
}

Forklaring af Code

Efter at have tildelt prioritet til hver testcase, kรธr ovenstรฅende kode ved hjรฆlp af testNG som vist i Video-2 nรฆvnt nedenfor.

Her kan du se, at testcases prioriteres. Testcase med lavere prioritet udfรธres fรธrst, dvs. nu er der en sekventiel udfรธrelse i henhold til prioritet i testcaserne. Derfor bestรฅr alle testsager nu.

Bemรฆrk formรธrkelseskonsollen:

Produktion :

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

Nummer 0 har den hรธjeste prioritet (det vil blive udfรธrt fรธrst), og prioriteten fortsรฆtter baseret pรฅ det givne tal, dvs. 0 har den hรธjeste prioritet end 1. 1 har den hรธjeste prioritet end 2 og sรฅ videre.

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

Her har vi givet prioriteterne som 0,1,3,6,9. Sรฅ metode med 0 som prioritet udfรธres fรธrst og derefter metode med prioritet-1 og sรฅ videre. Her vil metodenavnet i alfabetisk rรฆkkefรธlge ikke blive taget i betragtning, da vi har givet prioriteterne

Metoder med samme prioritet

Der kan vรฆre en chance for, at metoder kan have samme prioritet. I disse tilfรฆlde overvejer testng den alfabetiske rรฆkkefรธlge af metodenavnene, hvis prioritet er den samme.

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 

Her udfรธres 'e' og 'd' baseret pรฅ deres prioritetsvรฆrdier. Men metoderne 'a' og 'c' indeholder den samme prioritetsvรฆrdi(6). Sรฅ her overvejer testng den alfabetiske rรฆkkefรธlge af 'a' og 'c' og udfรธrer dem i overensstemmelse hermed.

Kombinerer bรฅde prioriterede (har samme prioritet) og ikke-prioriterede metoder

I dette tilfรฆlde vil vi dรฆkke to tilfรฆlde i en testng-klasse.

  1. Metoder med samme prioritetsvรฆrdi.
  2. Mere end รฉn ikke-prioriteret metode.
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");
	}
}

Output:

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

Forklaring:

Fรธrste prรฆference: Ikke-prioriterede metoder: 'c' og 'b': Baseret pรฅ alfabetisk rรฆkkefรธlge blev 'b' udfรธrt fรธrst og derefter 'c'.

Anden prรฆference: Prioriterede metoder: 'a', 'e' og 'd': 'e' blev udfรธrt fรธrst, da det havde hรธjeste prioritet(0). Da prioriteringen af โ€‹โ€‹'a' og 'd' metoder var den samme, overvejede testng den alfabetiske rรฆkkefรธlge af deres metodenavne. Sรฅ mellem dem blev 'a' henrettet fรธrst og derefter 'd'.

Der skelnes mellem store og smรฅ bogstaver i TestNG

Bare til din information er der en standardsyntaks til at definere prioritet i testNG dvs @Test (prioritet=4), antag at du definerer det i en anden syntaks siger @Test (PRIORITET=1) sรฅ vil din IDE vise det som en kompileringsfejl. Se billedet nedenfor:

Der skelnes mellem store og smรฅ bogstaver i TestNG

Konklusion

Som du har set, at hvis der er et krav om at kรธre et sรฆt test-case i en bestemt rรฆkkefรธlge, kan det nemt gรธres ved at bruge Prioritet ved at bruge testNG som et kรธrselsvรฆrktรธj.

Denne tutorial er gjort mulig pรฅ grund af bidrag fra Ramandeep Singh og Rama Krishna Gadde

Opsummer dette indlรฆg med: