TestNG @Test Priorité dans Selenium

TestNG est un Essais framework, qui couvre différents types de conceptions de tests comme un test unitaire, un test fonctionnel, un test de bout en bout, un test d'interface utilisateur et un test d'intégration.

Vous pouvez exécuter un ou plusieurs scénarios de test dans votre Tester code.

Si la priorité des tests n'est pas définie lors de l'exécution de plusieurs cas de test, TestNG attribue à tous les @Test une priorité égale à zéro (0).

Maintenant, en courant ; les priorités inférieures seront programmées en premier.

Démo du code TestNG sans priorité

Prenons un scénario dans lequel un séquençage sera nécessaire pour réussir tous les cas de test :

Scénario: Générez un code dans lequel vous devez effectuer une recherche Google avec un mot-clé spécifique, par exemple « Facebook ». Maintenant, vérifiez que le titre du navigateur est remplacé par « Facebook – Recherche Google ».

Remarque : Chaque étape que vous codez doit être dans des méthodes distinctes

Méthode 1 : Ouvrez le navigateur, dites Firefox (Navigateur ouvert())

Méthode 2 : Lancez Google.com (lancementGoogle())

Méthode 3: Effectuez une recherche en utilisant « Facebook » (performSearchAndClick1stLink())

Méthode 4: Vérifiez le titre de la page de recherche Google (FaceBookPageTitleVerification())

Code pour notre scénario:

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

Explication du code

Comme mentionné ci-dessus, nous avons créé 4 cas de test pour effectuer chaque action de manière indépendante.

  • La première méthode (Navigateur ouvert) états à initialiser Firefox browser.
  • La deuxième méthode (lancer Google) indique que le lancement de Google.com se fait dans le navigateur initialisé.
  • La troisième méthode (effectuerRechercheEtClick1stLink)états qui effectuent une recherche dans la recherche box (avec XPath (« .//*[@title='Search'] ») avec un terme de recherche comme Facebook et
  • La quatrième et dernière méthode (Vérification du titre de la page Facebook) déclare cliquer sur l'icône de recherche de Google et vérifier que le titre du navigateur a été modifié en Facebook – Recherche Google.

Exécutez maintenant ce code en utilisant testNG comme indiqué dans la vidéo, vous trouverez tous les Cas de test sont en échec. La raison de l'échec : comme il existe une dépendance au scénario de test précédent, seul le scénario de test en cours d'exécution sera réussi.

Dans ce cas,

  • La première méthode exécutée est Navigateur ouvert(). Il a été adopté car il n’a aucune dépendance.
  • La deuxième méthode exécutée est FaceBookPageTitleVerification(); cela échoue parce que nous essayons de cliquer sur le bouton de recherche et de vérifier le titre du navigateur.
  • Vous pouvez voir que si l’activité de recherche n’est pas traitée, toute autre étape peut être franchie. C’est donc la raison pour laquelle mes cas de test échouent.
PASSED: openBrowser
FAILED: FaceBookPageTitleVerification
FAILED: launchGoogle
FAILED: peformSeachAndClick1stLink

Démo du code TestNG sans priorité par ordre alphabétique

Si nous ne mentionnons aucune priorité, testng exécutera les méthodes @Test en fonction de l'ordre alphabétique de leurs noms de méthodes quel que soit leur lieu d'implémentation dans le 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");
}

}

Sortie

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 

Bien que nous ayons défini les méthodes de manière aléatoire (c, b, a, e, d), testng a exécuté les méthodes en fonction de leurs noms de méthode en tenant compte de l'ordre alphabétique et cela s'est également reflété dans le résultat.

Comment définir la priorité dans TestNG

Comme vous l'avez vu dans l'exemple précédent, le séquençage est nécessaire pour réussir ce scénario, nous allons donc modifier le morceau de code précédent avec Paramètre de priorité afin que chaque test soit exécuté selon la priorité qui lui est assignée.

Maintenant, comme vous pouvez le voir, nous avons attribué la priorité à chaque scénario de test, ce qui signifie que le scénario de test dont la valeur de priorité la plus faible sera exécuté en premier.

Priorité dans testNG en action

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

Explication du code

Après avoir attribué la priorité à chaque cas de test, exécutez le code ci-dessus à l'aide de testNG comme indiqué dans la vidéo 2 mentionnée ci-dessous.

Ici, vous pouvez voir que les cas de test sont prioritaires. Les cas de test ayant une priorité inférieure sont exécutés en premier, c'est-à-dire qu'il y a maintenant une exécution séquentielle selon la priorité dans les cas de test. Par conséquent, tous les cas de test réussissent désormais.

Notez la console de eclipse:

Sortie :

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

Le numéro 0 a la priorité la plus élevée (il sera exécuté en premier) et la priorité continue en fonction du nombre donné, c'est-à-dire que 0 a la priorité la plus élevée que 1. 1 a la priorité la plus élevée que 2 et ainsi de suite.

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

}

Sortie

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

Ici, nous avons fourni les priorités comme 0,1,3,6,9. Ainsi, la méthode ayant 0 comme priorité est exécutée en premier, puis la méthode ayant la priorité 1 et ainsi de suite. Ici, le nom de la méthode par ordre alphabétique ne sera pas pris en compte car nous avons fourni les priorités

Méthodes avec la même priorité

Il est possible que les méthodes contiennent la même priorité. Dans ces cas, testng considère l'ordre alphabétique des noms de méthodes dont la priorité est la même.

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

}

Sortie

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 

Ici, « e » et « d » sont exécutés en fonction de leurs valeurs de priorité. Mais les méthodes 'a' et 'c' contiennent la même valeur de priorité (6). Ainsi, testng considère ici l'ordre alphabétique de « a » et « c » et les exécute en conséquence.

Combinant des méthodes prioritaires (ayant la même priorité) et non prioritaires

Dans ce cas, nous couvrirons deux cas dans une seule classe de test.

  1. Méthodes ayant la même valeur de priorité.
  2. Plus d’une méthode non prioritaire.
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");
	}
}

Sortie :

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

Explication:

Première préférence: Méthodes non prioritaires : « c » et « b » : selon l'ordre alphabétique, « b » a été exécuté en premier, puis « c ».

Deuxième préférence: Méthodes priorisées : 'a', 'e' et 'd' : 'e' a été exécuté en premier car il avait la priorité la plus élevée (0). Comme la priorité des méthodes « a » et « d » était la même, les tests ont pris en compte l'ordre alphabétique des noms de leurs méthodes. Ainsi, entre eux, « a » a été exécuté en premier, puis « d ».

Sensible à la casse dans TestNG

Juste pour votre information, il existe une syntaxe standard pour définir la priorité dans testNG, c'est-à-dire @Test (priorité=4), supposons que vous le définissiez dans une autre syntaxe, par exemple @Test (PRIORITÉ=1) alors votre IDE l'affichera comme une erreur de compilation. Reportez-vous à l'image ci-dessous :

Sensible à la casse dans TestNG

Conclusion

Comme vous l'avez vu, s'il est nécessaire d'exécuter un ensemble de cas de test dans un ordre spécifique, cela peut être facilement fait en utilisant Priorité en utilisant testNG comme outil d'exécution.

Ce tutoriel est rendu possible grâce aux contributions de Ramandeep Singh et Rama Krishna Gadde