TestNG @Testprioriteit in Selenium

TestNG is een Testen raamwerk, dat verschillende soorten testontwerpen omvat, zoals een unit-test, functionele test, end-to-end-test, UI-test en integratietest.

U kunt een enkele of meerdere testgevallen uitvoeren in uw Testng code.

Als de testprioriteit niet is gedefinieerd tijdens het uitvoeren van meerdere testgevallen, wijst TestNG alle @Test een prioriteit toe als nul (0).

Nu, tijdens het rennen; lagere prioriteiten worden eerst gepland.

Demo van TestNG-code zonder prioriteit

Laten we een scenario nemen waarin sequentiebepaling vereist is om alle testgevallen te doorstaan:

Scenario: Genereer een code waarbij u een Google-zoekopdracht moet uitvoeren met een specifiek trefwoord, bijvoorbeeld 'Facebook'. Controleer nu of de browsertitel is gewijzigd in "Facebook - Google Zoeken".

Opmerking: elke stap die u codeert, moet in afzonderlijke methoden plaatsvinden

Methode 1: Browser openen, zeg maar Firefox (Open browser())

Methode 2: Start Google.com (startGoogle())

Methode 3: Voer een zoekopdracht uit met behulp van “Facebook” (performSearchAndClick1stLink())

Methode 4: Controleer de titel van de Google-zoekpagina (FaceBookPageTitleVerification())

Codeer voor ons 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);				
	    }		
	}		

Verklaring van code

Zoals hierboven vermeld hebben we 4 testgevallen gemaakt voor het uitvoeren van elke actie op een onafhankelijke manier.

  • De eerste methode (Open browser) staten om te initialiseren Firefox browser.
  • De tweede methode (start Google) geeft aan dat het starten van Google.com in de geïnitialiseerde browser plaatsvindt.
  • De derde methode (voervormZoekenAndKlik1stLink)staten die een zoekopdracht uitvoeren in de zoekopdracht box (met xpad (“.//*[@title='Zoeken']”) met een zoekterm als Facebook en
  • De vierde en laatste methode (FaceBookPageTitleVerificatie) staten die op het zoekpictogram van Google klikken en verifiëren dat de browsertitel is gewijzigd in Facebook – Google Zoeken.

Voer nu deze code uit met behulp van testNG, zoals weergegeven in de video, u vindt alle Testgeval zijn aan het falen. De reden voor het mislukken: aangezien er een afhankelijkheid is van de eerdere testcase om te slagen, zal alleen de huidige lopende testcase slagen.

In dit geval,

  • De eerste methode die wordt uitgevoerd is Open browser(). Het werd aangenomen omdat het geen enkele afhankelijkheid heeft.
  • De tweede uitgevoerde methode is FaceBookPaginaTitelVerificatie(); het mislukt omdat we proberen op de zoekknop te klikken en de browsertitel te verifiëren.
  • U kunt zien dat als de zoekactiviteit niet wordt verwerkt, elke andere stap kan worden doorgegeven. Dit is dan ook de reden dat mijn testgevallen mislukken.
PASSED: openBrowser
FAILED: FaceBookPageTitleVerification
FAILED: launchGoogle
FAILED: peformSeachAndClick1stLink

Demo van TestNG-code zonder prioriteit in alfabetische volgorde

Als we geen prioriteit vermelden, zal testng de @Test-methoden uitvoeren op basis van alfabetische volgorde van hun methodenamen, ongeacht hun implementatieplaats in de 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");
}

}

uitgang

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 

Hoewel we de methoden op een willekeurige manier definieerden (c, b, a, e, d), voerde testng de methoden uit op basis van hun methodenamen door rekening te houden met de alfabetische volgorde, en hetzelfde werd ook weerspiegeld in de uitvoer.

Prioriteit instellen in TestNG

Zoals je in het vorige voorbeeld hebt gezien, is sequencing vereist om dit scenario te doorstaan, dus zullen we het vorige stuk code aanpassen met Prioriteitsparameter zodat elke test moet worden uitgevoerd in overeenstemming met de prioriteit die eraan is toegewezen.

Zoals u kunt zien, hebben we aan elk testgeval een prioriteit toegewezen. Dit betekent dat het testgeval eerst met de lagere prioriteitswaarde wordt uitgevoerd.

Prioriteit in testNG in actie

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

Verklaring van code

Nadat u prioriteit aan elke testcase heeft toegewezen, voert u de bovenstaande code uit met testNG, zoals weergegeven in de onderstaande Video-2.

Hier kunt u zien dat testgevallen prioriteit krijgen. Testgevallen met een lagere prioriteit worden als eerste uitgevoerd, dwz nu is er een sequentiële uitvoering volgens prioriteit in de testgevallen. Daarom zijn alle testgevallen nu geslaagd.

Let op de console van eclipse:

uitgang :

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

Nummer 0 heeft de hoogste prioriteit (het wordt als eerste uitgevoerd) en de prioriteit gaat verder op basis van het opgegeven nummer, dwz 0 heeft de hoogste prioriteit dan 1. 1 heeft de hoogste prioriteit dan 2, enzovoort.

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

}

uitgang

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 hebben we de prioriteiten opgegeven als 0,1,3,6,9. De methode met prioriteit 0 wordt dus eerst uitgevoerd en vervolgens de methode met prioriteit 1, enzovoort. Hier wordt geen rekening gehouden met de alfabetische volgorde van de methodenaam, omdat we de prioriteiten hebben opgegeven

Methoden met dezelfde prioriteit

Er bestaat een kans dat methoden dezelfde prioriteit hebben. In die gevallen houdt testng rekening met de alfabetische volgorde van de methodenamen waarvan de prioriteit dezelfde is.

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

}

uitgang

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 worden 'e' en 'd' uitgevoerd op basis van hun prioriteitswaarden. Maar de methoden 'a' en 'c' bevatten dezelfde prioriteitswaarde(6). Testng houdt hier dus rekening met de alfabetische volgorde van 'a' en 'c' en voert deze dienovereenkomstig uit.

Het combineren van zowel geprioriteerde (met dezelfde prioriteit) als niet-geprioriteerde methoden

In dit geval behandelen we twee gevallen in één testklasse.

  1. Methoden met dezelfde prioriteitswaarde.
  2. Meer dan één niet-geprioriteerde 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");
	}
}

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

Uitleg:

Eerste voorkeur: Methoden zonder prioriteit: 'c' en 'b': op basis van alfabetische volgorde werd 'b' eerst uitgevoerd en daarna 'c'.

Tweede voorkeur: Geprioriteerde methoden: 'a', 'e' en 'd': 'e' werd als eerste uitgevoerd omdat het de hoogste prioriteit had (0). Omdat de prioriteit van de methoden 'a' en 'd' hetzelfde was, werd bij het testen rekening gehouden met de alfabetische volgorde van de namen van hun methoden. Dus tussen hen werd eerst 'a' geëxecuteerd en daarna 'd'.

Hoofdlettergevoelig in TestNG

Ter informatie: er is een standaardsyntaxis voor het definiëren van prioriteit in testNG, dwz @Test (prioriteit=4), stel dat je het in een andere syntaxis definieert, bijvoorbeeld @Test (PRIORITEIT=1) dan zal uw IDE het weergeven als een compilatiefout. Zie onderstaande afbeelding:

Hoofdlettergevoelig in TestNG

Conclusie

Zoals u hebt gezien, kunt u, als er een vereiste is om een ​​set testgevallen in een specifieke volgorde uit te voeren, dit eenvoudig doen met behulp van Prioriteit gebruik testNG als runtool.

Deze tutorial wordt mogelijk gemaakt door bijdragen van Ramandeep Singh en Rama Krishna Gadde