TestNG @Test Priorité dans Selenium
TestNG est une Contrôle de qualité 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 scénarios 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 de TestNG code 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 navigateur.
- 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 zone de recherche (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 de TestNG code 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 d'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.
- Méthodes ayant la même valeur de priorité.
- 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 :
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 Gaddé