TestNG @Test Prioritet u Selenium

TestNG je Ispitivanje okvir koji pokriva različite vrste testnih dizajna kao što su jedinični test, funkcionalni test, end-to-end test, UI test i integracijski test.

Možete pokrenuti jedan ili više testnih slučajeva u svom Testng kodirati.

Ako prioritet testa nije definiran tijekom izvođenja više testnih slučajeva, TestNG dodjeljuje svim @Test prioritet kao nula(0).

Sada, dok trčite; niži prioriteti bit će prvi raspoređeni.

Demo od TestNG kod bez prioriteta

Uzmimo scenarij u kojem će biti potrebno sekvenciranje kako bi se prošli svi testni slučajevi:

Scenarij: Generirajte kod gdje se od vas traži da izvršite Google pretraživanje s određenom ključnom riječi, recimo "Facebook". Sada provjerite je li naslov preglednika promijenjen u "Facebook – Google Search".

Napomena: Svaki korak koji kodirate trebao bi biti u zasebnim metodama

Metoda 1: Otvorite preglednik recimo Firefox (openBrowser())

Metoda 2: Pokrenite Google.com (launchGoogle())

Metoda 3: Izvršite pretraživanje koristeći “Facebook” (performSearchAndClick1stLink())

Metoda 4: Provjerite naslov Google stranice za pretraživanje (FaceBookPageTitleVerification())

Kod za naš scenarij:

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

Objašnjenje koda

Kao što je gore spomenuto, stvorili smo 4 testna slučaja za izvođenje svake radnje u neovisnim metodama.

  • Prva metoda (otvoreni preglednik) stanja za inicijalizaciju Firefox preglednik.
  • Druga metoda (pokreni Google) navodi da je pokretanje Google.com u inicijaliziranom pregledniku.
  • Treća metoda (peformSeachAndClick1stLink)stanja koja izvode pretraživanje u okviru za pretraživanje (s xpath (“.//*[@title='Traži']”) s pojmom za pretraživanje kao Facebook i
  • Četvrta i posljednja metoda (FaceBookPageTitleVerification) navodi da kliknete ikonu pretraživanja Googlea i potvrdite da je naslov preglednika promijenjen u Facebook – Google pretraga.

Sada pokrenite ovaj kod koristeći testNG kao što je prikazano u videu i pronaći ćete sve Testni slučaj ne uspijevaju. Razlog neuspjeha: kako postoji ovisnost o prolasku prethodnog testnog slučaja, proći će se samo trenutni testni slučaj.

U ovom slučaju,

  • Prva metoda koja se izvodi je openBrowser(). Prošlo ga je jer nema nikakve ovisnosti.
  • Druga izvedena metoda je FaceBookPageTitleVerification(); ne uspijeva jer pokušavamo kliknuti gumb za pretraživanje i provjera naslova preglednika.
  • Možete vidjeti kako se bilo koji drugi korak može proći ako se aktivnost pretraživanja ne obrađuje. Stoga je to razlog zašto moji testni slučajevi ne uspijevaju.
PASSED: openBrowser
FAILED: FaceBookPageTitleVerification
FAILED: launchGoogle
FAILED: peformSeachAndClick1stLink

Demo od TestNG kod bez prioriteta u abecednom redu

Ako ne spomenemo nikakav prioritet, testng će izvršiti metode @Test na temelju abecednog reda njihovih naziva metoda bez obzira na mjesto implementacije u kodu.

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

}

Izlaz

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 

Iako smo metode definirali na slučajan način (c, b, a, e, d), testng je izvršio metode na temelju njihovih naziva metoda uzimajući u obzir abecedni red, a isto se odrazilo i na izlaz.

Kako postaviti Prioritet u TestNG

Kao što ste vidjeli u prethodnom primjeru da je sekvenciranje potrebno da bi se prošao ovaj scenarij, tako da ćemo modificirati prethodni dio koda s Parametar prioriteta tako da se svaki test treba izvoditi prema prioritetu koji im je dodijeljen.

Sada, kao što vidite, dodijelili smo Prioritet svakom testu, što znači da će testni slučaj s nižom prioritetnom vrijednošću biti prvi izvršen.

Prioritet u testNG na djelu

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

Objašnjenje koda

Nakon dodjele prioriteta svakom testu, pokrenite gornji kod koristeći testNG kao što je prikazano u Video-2 navedenom u nastavku.

Ovdje možete vidjeti da su testni slučajevi prioritetni. Testni slučajevi nižeg prioriteta izvršavaju se prvi, tj. sada postoji sekvencijalno izvršavanje prema prioritetu u testnim slučajevima. Dakle, svi testni slučajevi sada prolaze.

Obratite pažnju na konzolu eclipse:

Izlaz :

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

Broj 0 ima najveći prioritet (prvo će se izvršiti), a prioritet se nastavlja na temelju zadanog broja, tj. 0 ima najveći prioritet od 1. 1 ima najveći prioritet od 2 i tako dalje.

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

}

Izlaz

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

Ovdje smo dali prioritete kao 0,1,3,6,9. Dakle, prvo se izvršava metoda s prioritetom 0, a zatim metoda s prioritetom 1 i tako dalje. Ovdje se naziv metode abecednim redoslijedom neće uzeti u obzir jer smo dali prioritete

Metode s istim prioritetom

Možda postoji mogućnost da metode imaju isti prioritet. U tim slučajevima testng uzima u obzir abecedni red naziva metoda čiji je prioritet isti.

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

}

Izlaz

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 

Ovdje se 'e' i 'd' izvršavaju na temelju njihovih vrijednosti prioriteta. Ali metode 'a' i 'c' sadrže istu vrijednost prioriteta(6). Dakle, ovdje testng uzima u obzir abecedni red 'a' i 'c' i izvršava ih u skladu s tim.

Kombinacija prioritetnih (s istim prioritetom) i neprioritetnih metoda

U ovom slučaju, pokrit ćemo dva slučaja u jednoj testng klasi.

  1. Metode imaju istu vrijednost prioriteta.
  2. Više od jedne metode bez prioriteta.
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");
	}
}

Izlaz:

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

Objašnjenje:

Prva preferencija: Metode bez prioriteta: 'c' i 'b': Na temelju abecednog reda prvo je izvršeno 'b', a zatim 'c'.

Druga preferencija: Metode s prioritetom: 'a', 'e' i 'd': 'e' je izvršena prva jer je imala najviši prioritet (0). Kako je prioritet metoda 'a' i 'd' bio isti, testng je uzeo u obzir abecedni red naziva njihovih metoda. Dakle, između njih je prvo izvršeno 'a', a zatim 'd'.

Razlikuje velika i mala slova TestNG

Samo za vašu informaciju postoji standardna sintaksa za definiranje prioriteta u testNG-u, tj @Test (prioritet=4), pretpostavimo da ga definirate u nekoj drugoj sintaksi, recimo @Test (PRIORITY=1) tada će vaš IDE to prikazati kao pogrešku kompilacije. Pogledajte sliku ispod:

Razlikuje velika i mala slova TestNG

Zaključak

Kao što ste vidjeli, ako postoji zahtjev za izvođenjem skupa testnih slučajeva u određenom nizu, to se može jednostavno učiniti korištenjem Prioritet koristeći testNG kao alat za pokretanje.

Ovaj vodič je omogućen zahvaljujući doprinosima Ramandeepa Singha i Rame Krishna Gadde