Tutoriel TestNG: Qu'est-ce que, annotations & Cadre en sélénium

Table des matières:

Anonim

Qu'est-ce que TestNG?

TestNG est un cadre de test d'automatisation dans lequel NG signifie «Next Generation». TestNG est inspiré de JUnit qui utilise les annotations (@). TestNG surmonte les inconvénients de JUnit et est conçu pour faciliter les tests de bout en bout.

En utilisant TestNG, vous pouvez générer un rapport approprié et vous pouvez facilement savoir combien de cas de test sont réussis, échoués et ignorés. Vous pouvez exécuter les cas de test ayant échoué séparément.

Par exemple:

  • Supposons que vous ayez cinq cas de test, une méthode est écrite pour chaque cas de test (supposons que le programme soit écrit en utilisant la méthode principale sans utiliser testNG). Lorsque vous exécutez ce programme en premier, trois méthodes sont exécutées avec succès et la quatrième méthode échoue. Corrigez ensuite les erreurs présentes dans la quatrième méthode, vous ne voulez maintenant exécuter que la quatrième méthode car les trois premières méthodes sont de toute façon exécutées avec succès. Cela n'est pas possible sans utiliser TestNG.
  • Le TestNG dans Selenium fournit une option, c'est-à-dire un fichier testng-failed.xml dans le dossier test-output. Si vous souhaitez exécuter uniquement les cas de test ayant échoué, vous exécutez ce fichier XML. Il n'exécutera que les cas de test ayant échoué.

En plus du concept ci-dessus, vous en apprendrez plus sur TestNG, comme quels sont les avantages de TestNG, comment créer des méthodes de test à l'aide des annotations @test, comment convertir ces classes en fichier de suite de tests et les exécuter via l'éclipse ainsi qu'à partir de la ligne de commande .

Dans ce tutoriel TestNG, vous apprendrez

  • Pourquoi utiliser TestNG avec Selenium?
  • Avantages de TestNG par rapport à JUnit
  • Créer un scénario de test à l'aide d'annotations TestNG
  • Comment créer un nouveau fichier de test TestNG
    • Codage de notre premier exemple de cas de test TestNG
    • Exécution du test
  • Vérification des rapports créés par TestNG
  • Annotations utilisées dans TestNG
  • Cas de test multiples
  • Paramètres
    • Paramètres multiples
    • Résumé des annotations TestNG

Pourquoi utiliser TestNG avec Selenium?

Les tests Selenium par défaut ne génèrent pas un format approprié pour les résultats des tests. En utilisant TestNG dans Selenium, nous pouvons générer des résultats de test.

La plupart des utilisateurs de Selenium l'utilisent plus que Junit en raison de ses avantages. Il y a tellement de fonctionnalités de TestNG, mais nous nous concentrerons uniquement sur les plus importantes que nous pouvons utiliser dans Selenium. Voici les principales caractéristiques de Selenium TestNG:

  • Générez le rapport dans un format approprié comprenant un certain nombre d'exécutions de cas de test, le nombre de cas de test réussis, le nombre de cas de test ayant échoué et le nombre de scénarios de test ignorés.
  • Plusieurs cas de test peuvent être regroupés plus facilement en les convertissant en fichier testng.xml. Dans lequel vous pouvez définir des priorités, quel cas de test doit être exécuté en premier.
  • Le même scénario de test peut être exécuté plusieurs fois sans boucles simplement en utilisant le mot clé appelé «nombre d'appels».
  • En utilisant testng, vous pouvez exécuter plusieurs cas de test sur plusieurs navigateurs, c'est-à-dire des tests entre navigateurs.
  • Le framework TestNG peut être facilement intégré avec des outils tels que TestNG Maven, Jenkins, etc.
  • Les annotations utilisées dans les tests sont très faciles à comprendre, ex: @BeforeMethod, @AfterMethod, @BeforeTest, @AfterTest
  • WebDriver n'a pas de mécanisme natif pour générer des rapports. TestNG peut générer le rapport dans un format lisible comme celui illustré ci-dessous.
  • TestNG simplifie la façon dont les tests sont codés. Il n'y a plus besoin d'une méthode principale statique dans nos tests. La séquence d'actions est régie par des annotations faciles à comprendre qui ne nécessitent pas que les méthodes soient statiques.
  • Les exceptions non interceptées sont automatiquement gérées par TestNG sans interrompre le test prématurément. Ces exceptions sont signalées comme des étapes ayant échoué dans le rapport.

Avantages de TestNG par rapport à JUnit

Il existe trois avantages majeurs de TestNG par rapport à JUnit:

  • Les annotations sont plus faciles à comprendre
  • Les cas de test peuvent être regroupés plus facilement
  • Des tests parallèles sont possibles

Les annotations dans TestNG sont des lignes de code qui peuvent contrôler la manière dont la méthode ci-dessous sera exécutée . Ils sont toujours précédés du symbole @. Un exemple de TestNG très précoce et rapide est celui présenté ci-dessous.

Les annotations seront discutées plus tard dans la section intitulée «Annotations utilisées dans TestNG», donc c'est parfaitement normal si vous ne comprenez pas encore l'exemple de TestNG ci-dessus. Il est juste important de noter pour l'instant que les annotations dans TestNG sont plus faciles à coder et à comprendre que dans JUnit.

La possibilité d'exécuter des tests en parallèle est disponible dans TestNG mais pas dans JUnit, de sorte que le framework TestNG est plus préféré des testeurs utilisant Selenium Grid.

Créer un scénario de test à l'aide d'annotations TestNG

Nous allons maintenant apprendre à créer notre premier cas de test à l'aide des annotations TestNG dans Selenium:

Avant de créer un cas de test, nous devons d'abord configurer un nouveau projet TestNG dans Eclipse et le nommer "FirstTestNGProject".

Mettre en place un nouveau projet TestNG

Étape 1: cliquez sur Fichier> Nouveau> Projet Java

Étape 2: Tapez «FirstTestNGProject» comme nom de projet, puis cliquez sur Suivant.

Étape 3: Nous allons maintenant commencer à importer les bibliothèques TestNG dans notre projet. Cliquez sur l'onglet "Bibliothèques", puis sur "Ajouter une bibliothèque

… "

Étape 4: Dans la boîte de dialogue Ajouter une bibliothèque, choisissez "TestNG" et cliquez sur Suivant.

Étape 5: Cliquez sur Terminer.

Vous devriez remarquer que TestNG est inclus dans la liste des bibliothèques.

Étape 6: Nous allons maintenant ajouter les fichiers JAR qui contiennent l'API Selenium. Ces fichiers se trouvent dans le pilote client Java que nous avons téléchargé depuis http://docs.seleniumhq.org/download/ lorsque nous installions Selenium et Eclipse dans les chapitres précédents.

Ensuite, accédez à l'emplacement où vous avez placé les fichiers JAR Selenium.

Après avoir ajouté les fichiers JAR externes, votre écran devrait ressembler à ceci.

Étape 7: Cliquez sur Terminer et vérifiez que notre FirstTestNGProject est visible dans la fenêtre de l'Explorateur de packages d'Eclipse.

Comment créer un nouveau fichier de test TestNG

Maintenant que nous avons terminé la configuration de notre projet dans ce tutoriel TestNG, créons un nouveau fichier TestNG.

Étape 1: Faites un clic droit sur le dossier du package "src" puis choisissez Nouveau> Autre

Étape 2: Cliquez sur le dossier TestNG et sélectionnez l'option "Classe TestNG". Cliquez sur Suivant.

Étape 3: Tapez les valeurs indiquées ci-dessous dans les zones de saisie appropriées et cliquez sur Terminer. Notez que nous avons nommé notre fichier Java comme "FirstTestNGFile".

Eclipse devrait créer automatiquement le modèle pour notre fichier TestNG ci-dessous.

Codage de notre premier exemple de cas de test TestNG

Créons maintenant notre premier cas de test qui vérifiera si la page d'accueil de Mercury Tours est correcte. Tapez votre code comme indiqué dans l'exemple TestNG ci-dessous:

package firsttestngpackage;import org.openqa.selenium. *;import org.openqa.selenium.firefox.FirefoxDriver;import org.testng.Assert;import org.testng.annotations. *;public class firsttestngfile {public String baseUrl = "http://demo.guru99.com/test/newtours/";String driverPath = "C: \\ geckodriver.exe";pilote WebDriver public;@Testpublic void verifyHomepageTitle () {System.out.println ("lancement du navigateur Firefox");System.setProperty ("webdriver.gecko.driver", driverPath);pilote = nouveau FirefoxDriver ();driver.get (baseUrl);String expectedTitle = "Bienvenue: Mercury Tours";String actualTitle = driver.getTitle ();Assert.assertEquals (titre actuel, titre attendu);driver.close ();}}

Notez ce qui suit.

  • TestNG ne nécessite pas que vous ayez une méthode main ().
  • Les méthodes n'ont pas besoin d'être statiques.
  • Nous avons utilisé l'annotation @Test. @Test est utilisé pour indiquer que la méthode en dessous est un cas de test . Dans ce cas, nous avons défini la méthode verifyHomepageTitle () comme notre cas de test, nous avons donc placé une annotation «@Test» au-dessus.
  • Puisque nous utilisons des annotations dans TestNG, nous devions importer le package org.testng.annotations. *.
  • Nous avons utilisé la classe Assert. La classe Assert est utilisée pour effectuer des opérations de vérification dans TestNG . Pour l'utiliser, nous devons importer le package org.testng.Assert.

Vous pouvez avoir plusieurs cas de test (par conséquent, plusieurs annotations @Test) dans un seul fichier TestNG. Cela sera abordé plus en détail plus loin dans la section «Annotations utilisées dans TestNG».

Exécution du test

Pour exécuter le test, exécutez simplement le fichier dans Eclipse comme vous le faites normalement. Eclipse fournira deux sorties - une dans la fenêtre de la console et l'autre dans la fenêtre des résultats de TestNG.

Vérification des rapports créés par TestNG

La fenêtre Console d'Eclipse donne un rapport textuel des résultats de notre cas de test tandis que la fenêtre Résultats de TestNG nous en donne un graphique.

Générer des rapports HTML

TestNG a la capacité de générer des rapports au format HTML.

Étape 1: Après avoir exécuté notre FirstTestNGFile que nous avons créé dans la section précédente, cliquez avec le bouton droit sur le nom du projet (FirstTestNGProject) dans la fenêtre de l'Explorateur de projet puis cliquez sur l'option "Actualiser".

Étape 2: Notez qu'un dossier "test-output" a été créé. Développez-le et recherchez un fichier index.html. Ce fichier HTML est un rapport des résultats du test le plus récent.

Étape 3: Double-cliquez sur ce fichier index.html pour l'ouvrir dans le navigateur Web intégré d'Eclipse. Vous pouvez actualiser cette page à tout moment après avoir réexécuté votre test en appuyant simplement sur F5, comme dans les navigateurs Web ordinaires.

Annotations utilisées dans TestNG

Dans la section précédente, vous avez découvert l'annotation @Test. Nous allons maintenant étudier les annotations plus avancées et leurs usages.

Cas de test multiples

Nous pouvons utiliser plusieurs annotations @Test dans un seul fichier TestNG. Par défaut, les méthodes annotées par @Test sont exécutées par ordre alphabétique. Voir le code ci-dessous. Bien que les méthodes c_test, a_test et b_test ne soient pas classées par ordre alphabétique dans le code, elles seront exécutées comme telles.

Exécutez ce code et sur la page index.html générée, cliquez sur "Vue chronologique".

Paramètres

Si vous souhaitez que les méthodes soient exécutées dans un ordre différent, utilisez le paramètre "priority". Les paramètres sont des mots-clés qui modifient la fonction de l'annotation .

  • Les paramètres nécessitent que vous leur attribuiez une valeur. Vous faites cela en plaçant un à côté d'eux, puis suivi de la valeur.
  • Les paramètres sont entourés d'une paire de parenthèses qui sont placées juste après l'annotation comme l'extrait de code illustré ci-dessous.

TestNG exécutera l'annotation @Test avec la valeur de priorité la plus basse jusqu'à la plus grande. Il n'est pas nécessaire que vos valeurs de priorité soient consécutives.

Le rapport HTML TestNG confirmera que les méthodes ont été exécutées en fonction de la valeur croissante de la priorité.

Paramètres multiples

Outre "priority", @Test a un autre paramètre appelé "alwaysRun" qui ne peut être défini que sur "true" ou "false". Pour utiliser deux paramètres ou plus dans une même annotation, séparez-les par une virgule telle que celle illustrée ci-dessous.

@Test (priorité = 0, alwaysRun = true)

@BeforeTest et @AfterTest

@BeforeTest

Les méthodes sous cette annotation seront exécutées avant le premier cas de test dans le fichier TestNG .

@AfterTest

Les méthodes sous cette annotation seront exécutées après l' exécution de tous les cas de test du fichier TestNG .

Considérez le code ci-dessous.

package firsttestngpackage;import org.openqa.selenium. *;import org.openqa.selenium.firefox.FirefoxDriver;import org.testng.Assert;import org.testng.annotations. *;public class firsttestngfile {public String baseUrl = "http://demo.guru99.com/test/newtours/";String driverPath = "C: \\ geckodriver.exe";pilote WebDriver public;@BeforeTestpublic void launchBrowser () {System.out.println ("lancement du navigateur Firefox");System.setProperty ("webdriver.gecko.driver", driverPath);pilote = nouveau FirefoxDriver ();driver.get (baseUrl);}@Testpublic void verifyHomepageTitle () {String expectedTitle = "Bienvenue: Mercury Tours";String actualTitle = driver.getTitle ();Assert.assertEquals (titre actuel, titre attendu);}@AfterTestpublic void terminateBrowser () {driver.close ();}}

En appliquant la logique présentée par le tableau et le code ci-dessus, nous pouvons prédire que la séquence par laquelle les méthodes seront exécutées est:

  • 1 er - LaunchBrowser ()
  • 2 ème - verifyHomepageTitle ()
  • 3 rd - terminateBrowser ()

Le placement des blocs d'annotation peut être interchangé sans affecter l'ordre chronologique dans lequel ils seront exécutés . Comprenons avec un exemple TestNG et essayez de réorganiser les blocs d'annotation de sorte que votre code ressemble à celui ci-dessous.

package firsttestngpackage;import org.openqa.selenium. *;import org.openqa.selenium.firefox.FirefoxDriver;import org.testng.Assert;import org.testng.annotations. *;public class firsttestngfile {public String baseUrl = "http://demo.guru99.com/test/newtours/";String driverPath = "C: \\ geckodriver.exe";pilote WebDriver public;@AfterTest // Jumbledpublic void terminateBrowser () {driver.close ();}@BeforeTest // Jumbledpublic void launchBrowser () {System.out.println ("lancement du navigateur Firefox");System.setProperty ("webdriver.gecko.driver", driverPath);pilote = nouveau FirefoxDriver ();driver.get (baseUrl);}@Test // Jumbledpublic void verifyHomepageTitle () {String expectedTitle = "Bienvenue: Mercury Tours";String actualTitle = driver.getTitle ();Assert.assertEquals (titre actuel, titre attendu);}}

Exécutez le code ci-dessus et notez que

@BeforeMethod et @AfterMethod

@BeforeMethod

les méthodes sous cette annotation seront exécutées avant chaque méthode dans chaque cas de test .

@AfterMethod

Les méthodes sous cette annotation seront exécutées après chaque méthode dans chaque cas de test.

Dans Mercury Tours, supposons que nous aimions vérifier les titres des pages cibles des deux liens ci-dessous.

Le déroulement de notre test serait:

  • Accédez à la page d'accueil et vérifiez son titre.
  • Cliquez sur ENREGISTRER et vérifiez le titre de sa page cible.
  • Revenez à la page d'accueil et vérifiez si le titre est toujours correct.
  • Cliquez sur SUPPORT et vérifiez le titre de sa page cible.
  • Revenez à la page d'accueil et vérifiez si le titre est toujours correct.

Le code ci-dessous illustre comment @BeforeMethod et @AfterMethod sont utilisés pour exécuter efficacement le scénario mentionné ci-dessus.

package firsttestngpackage;import org.openqa.selenium. *;import org.openqa.selenium.firefox.FirefoxDriver;import org.testng.Assert;import org.testng.annotations. *;@Testpublic class firsttestngfile {public String baseUrl = "http://demo.guru99.com/test/newtours/";String driverPath = "C: \\ geckodriver.exe";pilote WebDriver public;public String attendu = null;public String actual = null;@BeforeTestpublic void launchBrowser () {System.out.println ("lancement du navigateur Firefox");System.setProperty ("webdriver.gecko.driver", driverPath);pilote = nouveau FirefoxDriver ();driver.get (baseUrl);}@BeforeMethodpublic void verifyHomepageTitle () {String expectedTitle = "Bienvenue: Mercury Tours";String actualTitle = driver.getTitle ();Assert.assertEquals (titre actuel, titre attendu);}@Test (priorité = 0)registre public void () {driver.findElement (By.linkText ("ENREGISTRER")). click ();attendu = "S'inscrire: Mercury Tours";réel = driver.getTitle ();Assert.assertEquals (réel, attendu);}@Test (priorité = 1)support public void () {driver.findElement (By.linkText ("SUPPORT")). click ();attendu = "En construction: Mercury Tours";réel = driver.getTitle ();Assert.assertEquals (réel, attendu);}@AfterMethodpublic void goBackToHomepage () {driver.findElement (By.linkText ("Accueil")). click ();}@AfterTestpublic void terminateBrowser () {driver.close ();}}

Après avoir exécuté ce test, votre TestNG doit signaler la séquence suivante.

En termes simples, @BeforeMethod doit contenir des méthodes que vous devez exécuter avant chaque cas de test, tandis que @AfterMethod doit contenir des méthodes que vous devez exécuter après chaque cas de test.

Résumé des annotations TestNG

@BeforeSuite : La méthode annotée sera exécutée avant que tous les tests de cette suite ne soient exécutés.

@AfterSuite : La méthode annotée sera exécutée après l'exécution de tous les tests de cette suite.

@BeforeTest : La méthode annotée sera exécutée avant l'exécution de toute méthode de test appartenant aux classes à l'intérieur de la balise.

@AfterTest : La méthode annotée sera exécutée après l'exécution de toutes les méthodes de test appartenant aux classes à l'intérieur de la balise.

@BeforeGroups : La liste des groupes que cette méthode de configuration exécutera avant. Il est garanti que cette méthode s'exécutera peu de temps avant que la première méthode de test appartenant à l'un de ces groupes ne soit appelée.

@AfterGroups : la liste des groupes après lesquels cette méthode de configuration s'exécutera. Cette méthode est garantie de s'exécuter peu de temps après que la dernière méthode de test appartenant à l'un de ces groupes a été appelée.

@BeforeClass : La méthode annotée sera exécutée avant que la première méthode de test de la classe actuelle ne soit appelée.

@AfterClass : La méthode annotée sera exécutée une fois que toutes les méthodes de test de la classe actuelle auront été exécutées.

@BeforeMethod : La méthode annotée sera exécutée avant chaque méthode de test.

@AfterMethod : La méthode annotée sera exécutée après chaque méthode de test.

@Test : La méthode annotée fait partie d'un cas de test

Conclusion

  • TestNG est un framework de test capable de rendre les tests Selenium plus faciles à comprendre et de générer des rapports faciles à comprendre.
  • Les principaux avantages de TestNG par rapport à JUnit sont les suivants.
    • Les annotations sont plus faciles à utiliser et à comprendre.
    • Les cas de test peuvent être regroupés plus facilement.
    • TestNG nous permet de créer des tests parallèles.
  • La fenêtre Console dans Eclipse génère un résultat basé sur du texte tandis que la fenêtre TestNG est plus utile car elle nous donne une sortie graphique du résultat du test ainsi que d'autres détails significatifs tels que:
    • Runtimes de chaque méthode.
    • L'ordre chronologique selon lequel les méthodes ont été exécutées
  • TestNG est capable de générer des rapports HTML.
  • Les annotations peuvent utiliser des paramètres comme les méthodes Java TestNG habituelles.
  • TestNG Dataprovider est un moyen de passer des paramètres dans la fonction de test qui transmet différentes valeurs dans des cas de test en une seule exécution.