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.
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.xmldรฉposer dans letest-outputdossier. 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.xmlfichier, 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 Cela simplifie le code de test. Plus besoin de mรฉthode main statique ; les annotations dรฉterminent ce qui sโexรฉcute et quand.
- 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.
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 :
- Rรฉdigez votre logique mรฉtier et placez-la TestNG annotations au-dessus de chaque mรฉthode.
- Ajoutez des mรฉtadonnรฉes telles que le nom de la classe, le nom du groupe et le nom du package.
- 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.
รtape 2) Entrer PrรฉnomTestNGProjet comme nom de projet et cliquez Suivant.
รtape 3) Importer le TestNG bibliothรจques. Cliquez sur Bibliothรจques onglet, puis Ajouter une bibliothรจqueโฆ.
รtape 4) Dans l' Ajouter une bibliothรจque dialogue, choisissez TestNG et cliquez sur Suivant.
รtape 5) Cliquez ร nouveau Finition.
TestNG devrait maintenant apparaรฎtre 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.
Accรฉdez au dossier oรน se trouve le Selenium Les fichiers JAR sont stockรฉs.
Aprรจs avoir ajoutรฉ les fichiers JAR externes, l'รฉcran devrait ressembler ร ceci.
รtape 7) Cliquez ร nouveau Finition. La nouvelle PrรฉnomTestNGProjet apparaรฎt dans l'explorateur de paquets.
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โฆ.
รtape 2) รlargir la TestNG dossier, sรฉlectionnez TestNG classeEt cliquez Suivant.
รtape 3) Saisissez les valeurs indiquรฉes ci-dessous et cliquez FinitionLโ Java le fichier est nommรฉ PrรฉnomTestNGFichier.
รtape 4) Eclipse gรฉnรจre le TestNG Modรจle prรฉsentรฉ ci-dessous.
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.Assertvรฉ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.
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.
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.
ร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.
ร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.
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.
Exรฉcutez le code et ouvrez index.html. Cliquez sur Vue chronologique.
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 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.
Le rapport HTML confirme que les mรฉthodes ont รฉtรฉ exรฉcutรฉes par ordre de prioritรฉ croissant.
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)
@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.
@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.
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.
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.


































