TestNG Tutoriel

โšก Rรฉsumรฉ intelligent

TestNG est une nouvelle gรฉnรฉration Java framework de test qui s'associe ร  Selenium pour une automatisation structurรฉe, des rapports dรฉtaillรฉs et une exรฉcution parallรจle. Ce tutoriel couvre les annotations de base et la configuration du projet. Eclipse, la rรฉdaction du premier cas de test, les rapports HTML et l'utilisation avancรฉe des paramรจtres.

  • ๐Ÿงฑ Cadre de base : TestNG S'รฉtend JUnit idรฉes avec annotations, groupepinget l'exรฉcution parallรจle des tests pour Selenium suites
  • ๐Ÿท๏ธ Les annotations dynamisent le flux : @Test, @BeforeMethod, @AfterMethod, @BeforeTest et @AfterTest : configuration, test et dรฉmontage de la sรฉquence.
  • ๐Ÿ‡ง๐Ÿ‡ท Eclipse Installer: Construire un TestNG projet, ajoutez le TestNG bibliothรจque et Selenium Les fichiers JAR, puis gรฉnรจrent les classes de test ร  partir de l'assistant.
  • (I.e. Reporting: TestNG Gรฉnรจre des rapports textuels, graphiques et HTML dans le dossier test-output, y compris des vues chronologiques.
  • โš™๏ธ Paramรจtres: Utilisez priority, alwaysRun et dataProvider pour contrรดler l'ordre d'exรฉcution et alimenter les tests en donnรฉes.
  • ๐Ÿค– Boost IA : Les assistants de codage IA accรฉlรจrent TestNG Gรฉnรฉration de classes, mises ร  jour des localisateurs et รฉchafaudage du fournisseur de donnรฉes.

TestNG Tutoriel

Qu'est-ce que le TestNG?

TestNG est un framework de tests d'automatisation oรน ยซ NG ยป signifie ยซ Next Generation ยป. TestNG est inspirรฉ par JUnit et utilise Java Les annotations (@) permettent de contrรดler le flux des tests. Cela permet de surmonter JUnitLes limitations antรฉrieures de et est conรงu pour rendre tests de bout en bout Plus facile.

Avec TestNG Vous pouvez gรฉnรฉrer un rapport dรฉtaillรฉ et voir immรฉdiatement le nombre de tests rรฉussis, รฉchouรฉs ou ignorรฉs. Vous pouvez รฉgalement relancer uniquement les tests ayant รฉchouรฉ.

Par exemple :

  • Supposons que vous ayez cinq cas de test, chacun dans sa propre mรฉthode, รฉcrits sans TestNGTrois tests rรฉussissent ; le quatriรจme รฉchoue. Aprรจs avoir corrigรฉ le quatriรจme, vous souhaitez relancer uniquement celui-ci, puisque les trois premiers ont dรฉjร  rรฉussi. Ceci est difficile ร  rรฉaliser avec une simple fonction main().
  • TestNG fournit une testng-failed.xml dรฉposer dans le test-output dossier. L'exรฉcution de ce fichier XML ne rรฉexรฉcute que les cas ayant รฉchouรฉ.

De plus, vous dรฉcouvrirez les avantages de TestNG, comment รฉcrire des mรฉthodes de test avec des annotations @Test, et comment convertir vos classes en une suite de tests exรฉcutable ร  partir de Eclipse ou la ligne de commande.

Pourquoi utiliser TestNG au Selenium?

Par dรฉfaut, Selenium Les tests ne produisent pas de rรฉsultats bien formatรฉs. TestNG Une fois connectรฉ, l'outil de test gรฉnรจre un rapport structurรฉ que vous pouvez partager avec l'รฉquipe.

pont Selenium les utilisateurs prรฉfรจrent TestNG plus de JUnit en raison de son ensemble de fonctionnalitรฉs plus รฉtendu. Les principales caractรฉristiques pour Selenium sont:

  • Des rapports indiquant le nombre de cas de test exรฉcutรฉs, rรฉussis, รฉchouรฉs et ignorรฉs.
  • Groupe facileping de cas de test via un testng.xml fichier, avec prioritรฉs d'exรฉcution.
  • Rรฉpรฉter un test plusieurs fois sans boucles en utilisant invocationCount.
  • Exรฉcuter plusieurs tests sur plusieurs navigateurs โ€” cross-test du navigateur soutien.
  • Intรฉgration fluide avec Maven, Jenkinset d'autres outils d'intรฉgration continue.
  • Readable annotations โ€” par exemple, @BeforeMethod, @AfterMethod, @BeforeTest, @AfterTest.
  • Selenium WebDriver ne dispose d'aucune fonctionnalitรฉ de reporting native ; TestNG comble cette lacune avec un rapport HTML clair comme celui ci-dessous.

TestNG Exemple de rapport HTML pour Selenium tests

  • TestNG Cela simplifie le code de test. Plus besoin de mรฉthode main statique ; les annotations dรฉterminent ce qui sโ€™exรฉcute et quand.

Habituel Java structure de classe de test avec mรฉthode principale

TestNG structure de classe de test utilisant des annotations

  • Les exceptions non interceptรฉes sont gรฉrรฉes avec รฉlรฉgance par TestNGCes รฉtapes sont signalรฉes comme ayant รฉchouรฉ sans pour autant interrompre l'exรฉcution complรจte.

Avantages de TestNG plus de JUnit

TestNG offre trois avantages majeurs par rapport ร  JUnit:

  • Les annotations sont plus faciles ร  comprendre et ร  utiliser.
  • Les cas de test peuvent รชtre regroupรฉs et priorisรฉs avec moins d'efforts.
  • L'exรฉcution parallรจle des tests est prise en charge nativement.

Qu'est-ce qu'une annotation dans TestNG?

Annotations dans TestNG Ce sont des lignes de code placรฉes au-dessus d'une mรฉthode pour contrรดler son exรฉcution. Elles commencent toujours par le symbole @. Un exemple simple est prรฉsentรฉ ci-dessous.

Exemple TestNG annotation au-dessus d'un Java mรฉthode

Les annotations sont traitรฉes en dรฉtail dans la section ยซ Annotations utilisรฉes dans TestNG ยป Plus tard dans ce tutoriel, nous aborderons ce sujet plus en dรฉtail ; l'exemple ci-dessus sert donc uniquement ร  dรฉfinir les attentes. TestNG Les annotations sont plus faciles ร  coder et ร  lire que les JUnit รฉquivalents, et ils sont essentiels lors de l'exรฉcution de tests sur Selenium Grille lร  oรน l'exรฉcution parallรจle est importante.

Comment rรฉdiger des cas de test dans TestNG

Rรฉdaction d'un TestNG Le cas de test comporte trois รฉtapes :

  1. Rรฉdigez votre logique mรฉtier et placez-la TestNG annotations au-dessus de chaque mรฉthode.
  2. Ajoutez des mรฉtadonnรฉes telles que le nom de la classe, le nom du groupe et le nom du package.
  3. Exรฉcutez le TestNG classe depuis votre IDE ou la ligne de commande.

Crรฉer un cas de test en utilisant TestNG Annotations

Nous allons maintenant crรฉer notre premier cas de test en utilisant TestNG annotations dans SeleniumAvant de rรฉdiger le test, configurez un nouveau TestNG projet en Eclipse et appelez-le PrรฉnomTestNGProjet.

Crรฉation d'un nouveau TestNG Projet

ร‰tape 1) Cliquez ร  nouveau Fichier > Nouveau > Java Projet.

Eclipse menu pour crรฉer un nouveau Java Projet

ร‰tape 2) Entrer PrรฉnomTestNGProjet comme nom de projet et cliquez Suivant.

NOUVEAU Java Assistant de projet nommรฉ PremierTestNGProjet

ร‰tape 3) Importer le TestNG bibliothรจques. Cliquez sur Bibliothรจques onglet, puis Ajouter une bibliothรจqueโ€ฆ.

Onglet Bibliothรจques avec l'option Ajouter une bibliothรจque dans Eclipse

ร‰tape 4) Dans l' Ajouter une bibliothรจque dialogue, choisissez TestNG et cliquez sur Suivant.

Sรฉlection TestNG dans la boรฎte de dialogue Ajouter une bibliothรจque

ร‰tape 5) Cliquez ร  nouveau Finition.

Fin de l'assistant Ajout de bibliothรจque

TestNG devrait maintenant apparaรฎtre dans la liste des bibliothรจques.

TestNG visible dans la liste des bibliothรจques

ร‰tape 6) Ajoutez les fichiers JAR qui contiennent les Selenium Ces donnรฉes proviennent de l'API. Java pilote client tรฉlรฉchargรฉ depuis selenium.dev/tรฉlรฉchargements.

boรฎte de dialogue Ajouter des JAR externes dans Eclipse

Accรฉdez au dossier oรน se trouve le Selenium Les fichiers JAR sont stockรฉs.

Sรฉlection Selenium Fichiers JAR pour le chemin de construction

Aprรจs avoir ajoutรฉ les fichiers JAR externes, l'รฉcran devrait ressembler ร  ceci.

Selenium Fichiers JAR ajoutรฉs ร  la liste des bibliothรจques

ร‰tape 7) Cliquez ร  nouveau Finition. La nouvelle PrรฉnomTestNGProjet apparaรฎt dans l'explorateur de paquets.

PrรฉnomTestNGProjet visible dans l'explorateur de packages

Comment crรฉer un nouveau TestNG Fichier d'essai

Une fois le projet prรชt, crรฉez un nouveau TestNG fichier.

ร‰tape 1) Faites un clic droit sur le src dossier et choisissez Nouveau > Autresโ€ฆ.

Nouveau menu Autre du dossier src dans Eclipse

ร‰tape 2) ร‰largir la TestNG dossier, sรฉlectionnez TestNG classeEt cliquez Suivant.

TestNG option de classe dans le nouvel assistant

ร‰tape 3) Saisissez les valeurs indiquรฉes ci-dessous et cliquez FinitionLโ€™ Java le fichier est nommรฉ PrรฉnomTestNGFichier.

TestNG magicien de classe PremierTestNGValeurs du fichier

ร‰tape 4) Eclipse gรฉnรจre le TestNG Modรจle prรฉsentรฉ ci-dessous.

Crรฉation TestNG modรจle de classe dans Eclipse รฉditeur

Programmer votre premier TestNG Cas de test

Crรฉez le premier cas de test qui vรฉrifie le titre du Mercury Page d'accueil des visites.

package firsttestngpackage;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.Assert;
import org.testng.annotations.Test;

public class FirstTestNGFile {

    public String baseUrl = "https://demo.guru99.com/test/newtours/";
    public WebDriver driver;

    @Test
    public void verifyHomepageTitle() {
        System.out.println("launching firefox browser");
        // Selenium 4 ships Selenium Manager, so the driver path is no longer required.
        driver = new FirefoxDriver();
        driver.get(baseUrl);
        String expectedTitle = "Welcome: Mercury Tours";
        String actualTitle = driver.getTitle();
        Assert.assertEquals(actualTitle, expectedTitle);
        driver.quit();
    }
}

A noter :

  • TestNG n'a pas besoin d'un main() mรฉthode.
  • Les mรฉthodes n'ont pas besoin d'รชtre statiques.
  • Le @Tester marques d'annotation verifyHomepageTitle() comme cas test.
  • Les annotations rรฉsident dans le org.testng.annotations.* paquet.
  • Le Affirmer classe de org.testng.Assert vรฉrifications des pilotes.

Vous pouvez avoir plusieurs annotations @Test dans un seul TestNG Nous abordons ce sujet dans le dossier. ยซ Annotations utilisรฉes dans TestNG ยป .

Exรฉcution du test

Faites un clic droit sur le fichier et exรฉcutez-le en tant que TestNG test. Eclipse produit deux rรฉsultats : un rรฉsultat textuel dans la fenรชtre Console et un rรฉsultat graphique dans la TestNG Fenรชtre de rรฉsultats.

TestNG Fenรชtre de rรฉsultats avec le rรฉsultat du test

Eclipse Fenรชtre de console avec TestNG sortie de texte

Vรฉrification des rapports crรฉรฉs par TestNG

La fenรชtre Console fournit un rรฉsumรฉ textuel tandis que TestNG La fenรชtre de rรฉsultats affiche une vue graphique.

Texte vs graphique TestNG comparaison des rรฉsultats

Gรฉnรฉration de rapports HTML

TestNG peut รฉgalement gรฉnรฉrer des rapports HTML complets.

ร‰tape 1) Aprรจs avoir couru PrรฉnomTestNGFichier, cliquez avec le bouton droit sur le projet et choisissez Refresh.

Option d'actualisation pour le TestNG projet en Eclipse

ร‰tape 2) A sortie de test Le dossier apparaรฎt. Dรฉveloppez-le et localisez index.html โ€” le rapport HTML de la derniรจre exรฉcution.

Dossier de sortie de test avec index.html mis en รฉvidence

ร‰tape 3) Double-Cliquez sur index.html pour l'ouvrir ร  l'intรฉrieur EclipseNavigateur de . Appuyez sur F5 pour actualiser aprรจs les prochaines exรฉcutions.

TestNG rapport d'index HTML rendu dans Eclipse

Annotations utilisรฉes dans TestNG

Vous avez dรฉjร  vu l'annotation @Test. La suite de cette section prรฉsente les annotations avancรฉes les plus utiles.

Plusieurs cas de test

Un cรฉlibataire ou Individual TestNG Un fichier peut contenir plusieurs annotations @Test. Par dรฉfaut, les mรฉthodes annotรฉes avec @Test s'exรฉcutent par ordre alphabรฉtique. Dans le code ci-dessous, les mรฉthodes c_test, a_test et b_test exรฉcuter par ordre alphabรฉtique, indรฉpendamment de l'ordre des sources.

Plusieurs mรฉthodes @Test dans une seule TestNG classe

Exรฉcutez le code et ouvrez index.html. Cliquez sur Vue chronologique.

Vue chronologique de plusieurs TestNG mรฉthodes

Paramรจtres

Pour modifier l'ordre par dรฉfaut, utilisez priority paramรจtre. Les paramรจtres sont des mots-clรฉs qui modifient le comportement d'une annotation.

  • Attribuer une valeur avec =.
  • Encadrez les paramรจtres par des parenthรจses placรฉes immรฉdiatement aprรจs l'annotation, comme indiquรฉ ci-dessous.

TestNG annotation avec syntaxe de paramรจtre et de valeur

TestNG Exรฉcute les annotations @Test de la prioritรฉ la plus basse ร  la plus รฉlevรฉe. Les numรฉros de prioritรฉ ne doivent pas nรฉcessairement รชtre consรฉcutifs.

Code complet avec paramรจtres de prioritรฉ @Test

Le rapport HTML confirme que les mรฉthodes ont รฉtรฉ exรฉcutรฉes par ordre de prioritรฉ croissant.

TestNG rapport affichant les mรฉthodes exรฉcutรฉes par ordre de prioritรฉ croissante

Paramรจtres multiples

En outre priority, @Test accepte le alwaysRun paramรจtre (vrai ou faux). Pour utiliser deux paramรจtres ou plus dans une seule annotation, sรฉparez-les par une virgule :

@Test(priority = 0, alwaysRun = true)

Exemple de plusieurs paramรจtres dans une annotation @Test

@BeforeTest et @AfterTest

@AvantTest Les mรฉthodes annotรฉes s'exรฉcutent avant le premier cas test dans le TestNG filet.
@AprรจsTest Les mรฉthodes annotรฉes s'exรฉcutent aprรจs tous les cas de test dans le TestNG finition du fichier.

Considรฉrez le code ci-dessous.

package firsttestngpackage;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.Assert;
import org.testng.annotations.*;

public class FirstTestNGFile {

    public String baseUrl = "https://demo.guru99.com/test/newtours/";
    public WebDriver driver;

    @BeforeTest
    public void launchBrowser() {
        System.out.println("launching firefox browser");
        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.quit();
    }
}

D'aprรจs le tableau et le code, nous pouvons prรฉdire que la sรฉquence sera :

  • 1er โ€” launchBrowser()
  • 2e โ€” verifyHomepageTitle()
  • 3e โ€” terminateBrowser()

Le placement des blocs d'annotation dans le fichier source n'affecte pas leur ordre d'exรฉcution. Essayez de rรฉorganiser les mรฉthodes comme indiquรฉ ci-dessous.

package firsttestngpackage;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.Assert;
import org.testng.annotations.*;

public class FirstTestNGFile {

    public String baseUrl = "https://demo.guru99.com/test/newtours/";
    public WebDriver driver;

    @AfterTest                              // Jumbled
    public void terminateBrowser() {
        driver.quit();
    }

    @BeforeTest                             // Jumbled
    public void launchBrowser() {
        System.out.println("launching firefox browser");
        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 et vรฉrifiez le rรฉsultat.

TestNG Rรฉsultat confirmant l'ordre malgrรฉ des annotations confuses

@BeforeMethod et @AfterMethod

@AvantMรฉthode Les mรฉthodes annotรฉes s'exรฉcutent avant chaque mรฉthode de test.
@AprรจsMรฉthode Les mรฉthodes annotรฉes s'exรฉcutent aprรจs chaque mรฉthode de test.

In Mercury Prenons l'exemple de visites virtuelles : supposons que nous voulions vรฉrifier les titres de deux pages cibles accessibles depuis la page d'accueil.

Trois liens de Mercury Page d'accueil des visites

Le dรฉroulement du test est le suivant :

  • Ouvrez la page d'accueil et vรฉrifiez son titre.
  • Cliquez sur S'INSCRIRE et vรฉrifiez le titre de sa page cible.
  • Retournez ร  la page d'accueil et vรฉrifiez le titre.
  • Cliquez sur SUPPORT et vรฉrifiez le titre de sa page cible.
  • Retournez ร  la page d'accueil et vรฉrifiez ร  nouveau le titre.

Le code ci-dessous montre comment @BeforeMethod et @AfterMethod gรจrent les รฉtapes rรฉpรฉtรฉes.

package firsttestngpackage;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.Assert;
import org.testng.annotations.*;

public class FirstTestNGFile {

    public String baseUrl = "https://demo.guru99.com/test/newtours/";
    public WebDriver driver;
    public String expected = null;
    public String actual = null;

    @BeforeTest
    public void launchBrowser() {
        System.out.println("launching firefox browser");
        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.quit();
    }
}

Aprรจs avoir exรฉcutรฉ le test, TestNG signale la sรฉquence ci-dessous.

TestNG sรฉquence de rapport utilisant BeforeMethod et AfterMethod

En bref : placez les รฉtapes de configuration ร  l'intรฉrieur @AvantMรฉthode et nettoyage ou rรฉinitialisation de la navigation ร  l'intรฉrieur @AprรจsMรฉthode Ainsi, chaque cas de test commence et se termine dans un รฉtat connu.

Rรฉsumรฉ des TestNG Annotations

  • @BeforeSuite : s'exรฉcute avant tous les tests de la suite.
  • @AfterSuite : s'exรฉcute aprรจs tous les tests de la suite.
  • @AvantTest : s'exรฉcute avant toute mรฉthode de test appartenant aux classes ร  l'intรฉrieur d'un รฉtiqueter.
  • @AfterTest : s'exรฉcute aprรจs toutes les mรฉthodes de test appartenant aux classes ร  l'intรฉrieur d'un รฉtiqueter.
  • @BeforeGroups : s'exรฉcute peu avant la premiรจre mรฉthode de test appartenant ร  un groupe listรฉ.
  • @AfterGroups : s'exรฉcute peu aprรจs la derniรจre mรฉthode de test appartenant ร  un groupe listรฉ.
  • @AvantLeCours : s'exรฉcute avant la premiรจre mรฉthode de test de la classe actuelle.
  • @AprรจsLesCours : s'exรฉcute aprรจs toutes les mรฉthodes de test de la classe actuelle.
  • @BeforeMethod : s'exรฉcute avant chaque mรฉthode de test.
  • @AfterMethod : s'exรฉcute aprรจs chaque mรฉthode de test.
  • @Test: dรฉsigne la mรฉthode comme un cas de test.

FAQ

JUnit 5 modernisรฉs JUnit avec l'API Jupiter et son modรจle d'extension. TestNG reste en tรชte en matiรจre d'exรฉcution parallรจle, groupe au niveau de la suiteping, dรฉpend de, et fournisseur de donnรฉes. Beaucoup Selenium les รฉquipes choisissent TestNG pour les suites complรจtes et JUnit 5 pour les tests unitaires.

Ajoutez parallel="methods" ou parallel="classes" ainsi qu'un attribut thread-count sur le balise ร  l'intรฉrieur de testng.xml. TestNG puis rรฉpartit les mรฉthodes de test sur plusieurs threads, ce qui est idรฉal pour Selenium Exรฉcution multiplateforme (grille ou cloud).

L'annotation `@DataProvider` alimente une seule mรฉthode `@Test` avec plusieurs ensembles de donnรฉes. Chaque ligne du fournisseur correspond ร  une exรฉcution. Il s'agit du modรจle standard pour les tests pilotรฉs par les donnรฉes. Selenium tests effectuรฉs sur des formulaires, des champs de recherche ou des รฉcrans de connexion.

Oui. AI Les assistants de codage gรฉnรจrent TestNG squelettes, annotation des mรฉthodes @Test, crรฉation de classes Page Object et รฉbauche de tableaux DataProvider ร  partir d'exemples de fichiers CSV, rรฉduisant considรฉrablement le temps de gรฉnรฉration.

L'IA gรฉnรฉrative analyse les fichiers testng-results.xml et les journaux Surefire, regroupe les รฉchecs similaires, suggรจre les causes probables et crรฉe des tickets Jira. Cela accรฉlรจre le tri des tests instables et aide les responsables QA ร  prioriser les correctifs d'intรฉgration continue.

Rรฉsumez cet article avec :