Tutoriel TestNG : Qu'est-ce que les annotations et le framework dans Selenium

Qu'est-ce que TestNG?

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

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

Par exemple :

  • Supposons que vous ayez cinq scénarios de test, une méthode est écrite pour chaque scénario de test (supposons que le programme soit écrit en utilisant la méthode principale sans utiliser testNG). Lorsque vous exécutez ce programme pour la première fois, 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 souhaitez maintenant exécuter uniquement 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 le 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 exécutera uniquement les cas de test ayant échoué.

Outre le concept ci-dessus, vous en apprendrez davantage 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 le eclipse ainsi qu'à partir de la ligne de commande.

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 tests.

La plupart des utilisateurs de Selenium l'utilisent plus de Junite 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. Suivrewing sont les principales caractéristiques de Selenium TestNG :

  • Générez le rapport dans un format approprié comprenant un certain nombre d'exécutions de scénarios de test, le nombre de scénarios de test réussis, le nombre de scénarios 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 établir des priorités quel scénario 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 cross test du navigateur.
  • Le framework TestNG peut être facilement intégré à des outils comme TestNG Maven, Jenkins, etc.
  • Les annotations utilisées dans les tests sont très faciles à comprendre, ex : @BeforeMethod, @AfterMethod, @BeforeTest, @AfterTest
  • WebDriver ne dispose d'aucun mécanisme natif pour générer des rapports. TestNG peut générer le rapport dans un format lisible comme celui présenté ci-dessous.
  • Utiliser TestNG avec Selenium

  • 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égulée par des annotations faciles à comprendre qui ne nécessitent pas que les méthodes soient statiques.
  • Utiliser TestNG avec Selenium

    Utiliser TestNG avec Selenium

  • Les exceptions non interceptées sont automatiquement gérées par TestNG sans mettre fin prématurément au test. Ces exceptions sont signalées comme étapes ayant échoué dans le rapport.

Avantages de TestNG par rapport à JUnit

Il y a 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

Qu’est-ce que l’annotation dans TestNG ?

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

Annotations dans TestNG

Les annotations seront discutées later dans la section intitulée « Annotations utilisées dans TestNG », ce n'est donc pas grave si vous ne comprenez pas encore l'exemple TestNG ci-dessus. Il est simplement 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, le framework TestNG est donc préférable pour les testeurs utilisant Selenium Grid.

Comment écrire des cas de test dans TestNG ?

Étape 1) Écrivez votre logique métier et insérez les annotations TestNG dans votre code.
Étape 2) Ajoutez plus d'informations telles que le nom de la classe, le nom du groupe, le nom du package, etc.
Étape 3) Exécutez le TestNG.

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

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

Avant de créer un scénario de test, nous devons d'abord configurer un nouveau projet TestNG dans Eclipse et nommez-le « FirstTestNGProject ».

Mise en place d'un nouveau projet TestNG

Étape 1: Cliquez sur Fichier > Nouveau > Java Le projet NetPoulSafe

Mise en place d'un nouveau projet TestNG

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

Mise en place d'un nouveau projet TestNG

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

Mise en place d'un nouveau projet TestNG

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

Mise en place d'un nouveau projet TestNG

Étape 5: Cliquez sur Terminer.

Mise en place d'un nouveau projet TestNG

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

Mise en place d'un nouveau projet TestNG

É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é à partir de https://www.selenium.dev/downloads/ lorsque nous installions Selenium et Eclipse dans les chapitres précédents.

Mise en place d'un nouveau projet TestNG

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

Mise en place d'un nouveau projet TestNG

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

Mise en place d'un nouveau projet TestNG

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

Mise en place d'un nouveau projet TestNG

Comment créer un nouveau fichier de test TestNG

Maintenant que nous avons fini de configurer notre projet dans ce didacticiel TestNG, créons un nouveau fichier TestNG.

Étape 1: Cliquez sur 'src' et choisissez autre.
Faites un clic droit sur le dossier du package « src » puis choisissez Nouveau > Autre…

Créer un nouveau fichier de test TestNG

Étape 2: Sélectionnez la classe TestNG.
Cliquez sur le dossier TestNG et sélectionnez l’option « Classe TestNG ». Cliquez sur Suivant.

Créer un nouveau fichier de test TestNG

Étape 3: Tapez les valeurs.
Tapez les valeurs indiquées ci-dessous sur l'entrée appropriée boxes et cliquez sur Terminer. Notez que nous avons nommé notre fichier Java « FirstTestNGFile ».

Créer un nouveau fichier de test TestNG

Étape 4: Modèle créé.
Eclipse devrait créer automatiquement le modèle pour notre fichier TestNG présenté ci-dessous.

Créer un nouveau fichier de test TestNG

Codage de notre premier exemple de cas de test TestNG

Créons maintenant notre premier Cas de test cela 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";
    public WebDriver driver ; 
     
  @Test
  public void verifyHomepageTitle() {
       
      System.out.println("launching firefox browser"); 
      System.setProperty("webdriver.gecko.driver", driverPath);
      driver = new FirefoxDriver();
      driver.get(baseUrl);
      String expectedTitle = "Welcome: Mercury Tours";
      String actualTitle = driver.getTitle();
      Assert.assertEquals(actualTitle, expectedTitle);
      driver.close();
  }
}

Remarquez ce qui suitwing.

  • TestNG ne nécessite pas que vous ayez une méthode main().
  • Les méthodes ne doivent pas nécessairement être statiques.
  • Nous avons utilisé l'annotation @Test. @Test est utilisé pour indiquer que la méthode en dessous est un scénario de test. Dans ce cas, nous avons défini la méthode verifyHomepageTitle() comme notre scénario 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 (donc plusieurs annotations @Test) dans un seul fichier TestNG. Ceci sera abordé plus en détail later 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 Console et l’autre dans la fenêtre Résultats TestNG.

Exécution du test

Exécution du test

Vérification des rapports créés par TestNG

La fenêtre Console dans Eclipse donne un rapport textuel des résultats de nos scénarios de test tandis que la fenêtre TestNG Results nous en donne un graphique.

Vérification des rapports créés par TestNG

Génération de 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 ».

Génération de rapports HTML

É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.

Génération de rapports HTML

Étape 3: Double-cliquez sur ce fichier index.html pour l'ouvrir à l'intérieur EclipseLe navigateur Web intégré de. 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.

Génération de rapports HTML

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 utilisations.

Plusieurs cas de test

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 telles quelles.

Annotations utilisées dans TestNG

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

Annotations utilisées dans TestNG

Paramètres

Si vous souhaitez que les méthodes soient exécutées dans un ordre différent, utilisez le paramètre « priorité ». 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. Pour ce faire, placez un « = » à côté d'eux, puis suivi de la valeur.
  • Les paramètres sont entourés d'une paire de parenthèses placées juste après l'annotation, comme l'extrait de code illustré ci-dessous.

Paramètres

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.

Paramètres

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

Paramètres

Paramètres multiples

Outre la « priorité », @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 seule annotation, séparez-les par une virgule comme celui présenté ci-dessous.

@Test(priority = 0, alwaysRun = true)

Paramètres multiples

@BeforeTest et @AfterTest

@AvantTest les méthodes sous cette annotation seront exécutées avant le premier scénario de test dans le fichier TestNG.
@AprèsTest les méthodes sous cette annotation seront exécutées une fois que tous les cas de test du fichier TestNG sont exécutés.

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";
    public WebDriver driver ; 
     
     @BeforeTest
      public void launchBrowser() {
          System.out.println("launching firefox browser"); 
          System.setProperty("webdriver.gecko.driver", driverPath);
          driver = new FirefoxDriver();
          driver.get(baseUrl);
      }
      @Test
      public void verifyHomepageTitle() {
          String expectedTitle = "Welcome: Mercury Tours";
          String actualTitle = driver.getTitle();
          Assert.assertEquals(actualTitle, expectedTitle);
     }
      @AfterTest
      public 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 :

  • 1st – lancerBrowser()
  • 2nd – verifyHomepageTitle()
  • 3rd – terminer le navigateur()

L'emplacement 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 essayons de réorganiser les blocs d'annotation de telle 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";
    public WebDriver driver ; 
     @AfterTest                            //Jumbled
      public void terminateBrowser(){
          driver.close();
      }
     @BeforeTest                            //Jumbled
      public void launchBrowser() {
          System.out.println("launching firefox browser"); 
          System.setProperty("webdriver.gecko.driver", driverPath);
          driver = new FirefoxDriver();
          driver.get(baseUrl);
      }
      @Test                                //Jumbled
      public void verifyHomepageTitle() {
          String expectedTitle = "Welcome: Mercury Tours";
          String actualTitle = driver.getTitle();
          Assert.assertEquals(actualTitle, expectedTitle);
     }
      
}

Exécutez le code ci-dessus et remarquez que

Paramètres multiples

@BeforeMethod et @AfterMethod

@AvantMéthode les méthodes sous cette annotation seront exécutées avant chaque méthode dans chaque cas de test.
@AprèsMéthode 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.

Paramètres multiples

Le déroulement de notre test serait :

  • Accédez à la page d'accueil et vérifiez son titre.
  • Cliquez sur S'INSCRIRE 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.*;
@Test
public class firsttestngfile {
    public String baseUrl = "http://demo.guru99.com/test/newtours/";
    String driverPath = "C:\\geckodriver.exe";
    public WebDriver driver; 
    public String expected = null;
    public String actual = null;
        @BeforeTest
      public void launchBrowser() {
          System.out.println("launching firefox browser"); 
          System.setProperty("webdriver.gecko.driver", driverPath);
          driver= new FirefoxDriver();
          driver.get(baseUrl);
      }
      
      @BeforeMethod
      public void verifyHomepageTitle() {
          String expectedTitle = "Welcome: Mercury Tours";
          String actualTitle = driver.getTitle();
          Assert.assertEquals(actualTitle, expectedTitle);
      }
          @Test(priority = 0)
      public void register(){
          driver.findElement(By.linkText("REGISTER")).click() ;
          expected = "Register: Mercury Tours";
          actual = driver.getTitle();
          Assert.assertEquals(actual, expected);
      }
          @Test(priority = 1)
      public void support() {
            driver.findElement(By.linkText("SUPPORT")).click() ;
            expected = "Under Construction: Mercury Tours";
            actual = driver.getTitle();
            Assert.assertEquals(actual, expected);
      }
      @AfterMethod
      public void goBackToHomepage ( ) {
            driver.findElement(By.linkText("Home")).click() ;
      }
       
      @AfterTest
      public void terminateBrowser(){
          driver.close();
      }
}

Après avoir exécuté ce test, votre TestNG devrait signaler ce qui suitwing séquence.

Paramètres multiples

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

Résumé des annotations TestNG

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

@AprèsSuite: La méthode annotée sera exécutée une fois tous les tests de cette suite exécutés.

@AvantTest: 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.

@AprèsTest: 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.

@AvantGroupes: La liste des groupes que cette méthode de configuration exécutera avant. L'exécution de cette méthode est garantie peu de temps avant l'appel de la première méthode de test appartenant à l'un de ces groupes.

@AfterGroups: La liste des groupes après lesquels cette méthode de configuration sera exécutée. Il est garanti que cette méthode s'exécutera peu de temps après l'appel de la dernière méthode de test appartenant à l'un de ces groupes.

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

@Après les cours: 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.

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

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

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

Conclusion

  • TestNG est un vers les tests framework 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 suivantswing.
    • Les annotations sont plus faciles à utiliser et à comprendre.
    • Les cas de test peuvent être regroupés plus facilement.
    • TestNG nous permet de créer tests parallèles.
  • La fenêtre Console dans Eclipse génère un résultat textuel 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 éléments significatifs.tails telles que:
    • Temps d'exécution 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 tout comme les méthodes Java TestNG habituelles.
  • TestNG Dataprovider est un moyen de transmettre des paramètres à la fonction de test qui transmet différentes valeurs dans les cas de test en une seule exécution.