TestNG Auditeurs dans Selenium

⚡ Résumé intelligent

Auditeurs dans Selenium WebDriver sont TestNG Les interfaces qui interceptent les événements de test permettent de personnaliser les journaux, les rapports et les actions post-échec. Cet article explique les méthodes de ITestListener et présente un exemple d'exécution. Java par exemple, et clarifie comment Selenium La version 4 a remplacé la fonction obsolète WebDriverEventListener.

  • ❓ Ce que font les auditeurs : Ils souscrivent à TestNG Des événements tels que démarrer, réussir, échouer et passer à l'étape suivante permettent de déclencher des journaux ou des rapports.
  • 🧩 Douze interfaces : TestNG Il prend en charge des interfaces telles que ITestListener, ISuiteListener, IReporter, IInvokedMethodListener et IAnnotationTransformer pour un contrôle précis.
  • ️ Deux modes de câblage : Attachez un écouteur avec l'annotation @Listeners sur une seule classe, ou enregistrez-le une seule fois dans testng.xml pour chaque suite.
  • 🚀 Selenium Mise à jour 4: EventFiringWebDriver est obsolète ; l'interface moderne WebDriverListener, associée à EventFiringDecorator, gère désormais les hooks d'événements au niveau de WebDriver.
  • 🤖 Angle d'approche IA : Les écouteurs assistés par IA peuvent classer automatiquement les échecs, joindre des captures d'écran intelligentes et renvoyer en temps réel les signaux de tests instables aux tableaux de bord CI.

TestNG Auditeurs dans Selenium

Selenium Les scripts WebDriver doivent souvent réagir à des événements de test tels qu'une assertion réussie, un échec de localisation ou une étape ignorée. Les écouteurs rendent cela possible. De manière générale, Selenium Ces projets reposent sur deux familles d'auditeurs :

  1. Écouteurs WebDriver
  2. TestNG Les auditeurs

Dans ce tutoriel, nous nous concentrerons sur TestNG Écouteurs, avec une note sur la façon dont les écouteurs au niveau WebDriver ont changé dans Selenium 4.x.

Qu'est-ce qu'un auditeur dans TestNG?

Un écouteur est une interface qui modifie le comportement par défaut de TestNGComme son nom l'indique, les écouteurs « écoutent » les événements définis dans un Selenium Vous pouvez les utiliser en implémentant l'interface Listener correspondante et en l'enregistrant dans votre classe ou suite de tests. Les Listeners vous permettent de personnaliser le comportement. TestNG générer des rapports, joindre des captures d'écran et produire des journaux structurés.

Types d'auditeurs dans TestNG

TestNG Il propose une famille d'interfaces d'écoute, chacune ciblant une étape différente du cycle de vie des tests.

Vous trouverez ci-dessous les plus couramment utilisés TestNG les auditeurs:

  1. IAnnotationTransformateur
  2. IAnnotationTransformer2
  3. IConfigurable
  4. IConfigurationListener
  5. IExecutionListener
  6. IAccrochable
  7. IInvokedMethodListenerInvokedMethodListener
  8. IInvokedMethodListener2
  9. IMethodInterceptor
  10. I Reporter
  11. ISuiteListener
  12. ITestListener

Ces interfaces sont utilisées dans Selenium pour générer des journaux ou personnaliser TestNG rapports. Dans ce tutoriel, nous allons mettre en œuvre ITestListener.

ITestListener expose les méthodes suivantes :

  • onStart – appelée lorsqu'un test démarre.
  • onTestSuccess – appelé lorsqu'un test réussit.
  • onTestFailure – appelée lorsqu'un test échoue.
  • onTestSkipped – appelé lorsqu'un test est ignoré.
  • onTestFailedButWithinSuccessPercentage – appelé lorsqu'un test échoue mais reste dans la plage de pourcentage de réussite.
  • onFinish – appelée une fois que tous les tests de la classe ont été exécutés.

Scénario de test

Dans ce scénario de test, nous allons automatiser le processus de connexion et implémenter ITestListener encontre.

  1. Lancement Firefox et ouvrez le site https://demo.guru99.com/V4/

Connexion au scénario de test URL

  1. Connectez-vous à l'application.

Formulaire de connexion au scénario de test

Étapes pour créer un TestNG Auditeur

Pour le scénario de test ci-dessus, nous allons implémenter l'écouteur étape par étape.

Étape 1) Créez une classe appelée Test d'écoute qui met en œuvre ITestListenerPassez votre souris sur le trait rouge souligné et Eclipse nous vous proposerons deux solutions rapides, comme indiqué ci-dessous :

Eclipse Solution rapide pour ajouter des méthodes non implémentées

Cliquez sur « Ajouter des méthodes non implémentées ». Plusieurs méthodes stub (sans corps) sont ajoutées à votre code, comme ceci :

paquet Démo de l'auditeur ;

importer org.testng.ITestContext;
importer org.testng.ITestListener;
importer org.testng.ITestResult;

classe publique Test d'écoute met en oeuvre ITestListener {

@ Override
vide public onFinish(ITestContext arg0) {
// TODO Stub de méthode généré automatiquement
}

@ Override
vide public onStart(ITestContext arg0) {
// TODO Stub de méthode généré automatiquement
}

@ Override
vide public surTestÉchouéMaisDansPourcentageDeRéussite(Résultat du test IT arg0) {
// TODO Stub de méthode généré automatiquement
}

@ Override
vide public onTestFailure(Résultat du test IT arg0) {
// TODO Stub de méthode généré automatiquement
}

@ Override
vide public onTestSkipped(Résultat du test IT arg0) {
// TODO Stub de méthode généré automatiquement
}

@ Override
vide public onTestStart(Résultat du test IT arg0) {
// TODO Stub de méthode généré automatiquement
}

@ Override
vide public onTestSuccess(Résultat du test IT arg0) {
// TODO Stub de méthode généré automatiquement
}
}

Modifions maintenant le Test d'écoute classe. Plus précisément, nous allons compléter les méthodes suivantes : onTestFailure, onTestSkipped, onTestStart et onTestSuccess.

Le changement est simple : chaque méthode affiche le nom du test afin que la console indique clairement le statut : réussite, échec ou ignoré.

Après modification, le code ressemble à ceci :

paquet Démo de l'auditeur ;

importer org.testng.ITestContext;
importer org.testng.ITestListener;
importer org.testng.ITestResult;

classe publique Test d'écoute met en oeuvre ITestListener {

@ Override
vide public onFinish(ITestContext Résultat) {
}

@ Override
vide public onStart(ITestContext Résultat) {
}

@ Override
vide public surTestÉchouéMaisDansPourcentageDeRéussite(Résultat du test IT Résultat) {
}

// Lorsqu'un test échoue, cette méthode est appelée.
@ Override
vide public onTestFailure(Résultat du test IT Résultat) {
System.out.println(« Le nom du cas de test ayant échoué est : » + Result.getName());
}

// Lorsqu'un cas de test est ignoré, cette méthode est appelée.
@ Override
vide public onTestSkipped(Résultat du test IT Résultat) {
System.out.println(« Le nom du cas de test ignoré est : » + Result.getName());
}

// Cette méthode est appelée lorsqu'un cas de test démarre.
@ Override
vide public onTestStart(Résultat du test IT Résultat) {
System.out.println(Result.getName() + « Cas de test démarré »);
}

// Cette méthode est appelée lorsqu'un test réussit.
@ Override
vide public onTestSuccess(Résultat du test IT Résultat) {
System.out.println(« Le nom du cas de test réussi est : » + Result.getName());
}
}

Étape 2) Créez une autre classe appelée Cas de test pour l'automatisation de la connexion. Selenium exécutera cette classe pour se connecter au site de démonstration.

paquet Démo de l'auditeur ;

importer org.openqa.selenium.By ;
importer org.openqa.selenium.WebDriver ;
importer org.openqa.selenium.firefox.FirefoxConducteurs;
importer org.testng.Assert;
importer org.testng.annotations.Listeners;
importer org.testng.annotations.Test ;

classe publique Cas de test {
pilote web conducteur = New FirefoxChauffeur();

// Test conçu pour réussir, afin de vérifier l'écouteur de succès.
@Tester
vide public Se connecter() {
pilote.get("https://demo.guru99.com/V4/");
pilote.trouverElement(Par.nom(« uid »)).sendKeys(« mgr34926 »);
pilote.trouverElement(Par.nom("mot de passe")).sendKeys(« amUpenu »);
pilote.trouverElement(Par.nom(« btnLogin »)).click();
}

// Test ayant échoué de force, pour vérifier l'écouteur d'échec.
@Tester
vide public TestToFail() {
System.out.println(« Cette méthode de test échoue »);
Assert.assertTrue(non);
}
}

Étape 3) Ensuite, associez cet écouteur à notre classe de test. Cas de testIl existe deux façons de connecter une classe à une interface d'écoute.

La première façon est d'utiliser le @Auditeurs annotation, comme indiqué ci-dessous :

@Listeners(Listener_Demo.ListenerTest.class)

Nous ajoutons cette annotation au-dessus du Cas de test classe. La classe ressemble alors à ceci :

paquet Démo de l'auditeur ;

importer org.openqa.selenium.By ;
importer org.openqa.selenium.WebDriver ;
importer org.openqa.selenium.firefox.FirefoxConducteurs;
importer org.testng.Assert;
importer org.testng.annotations.Listeners;
importer org.testng.annotations.Test ;

@Listeners(Listener_Demo.ListenerTest.class)
classe publique Cas de test {
pilote web conducteur = New FirefoxChauffeur();

// Test réussi, pour vérifier l'écouteur de succès.
@Tester
vide public Se connecter() {
pilote.get("https://demo.guru99.com/V4/");
pilote.trouverElement(Par.nom(« uid »)).sendKeys(« mgr34926 »);
pilote.trouverElement(Par.nom("mot de passe")).sendKeys(« amUpenu »);
pilote.trouverElement(Par.nom(« btnLogin »)).click();
}

// Test ayant échoué de force, pour vérifier l'écouteur d'échec.
@Tester
vide public TestToFail() {
System.out.println(« Cette méthode de test échoue »);
Assert.assertTrue(non);
}
}

La structure du projet ressemble à :

TestNG structure du projet d'écoute

Étape 4) Exécutez le Cas de test classe. Méthodes à l'intérieur Test d'écoute sont invoquées automatiquement en fonction du comportement des méthodes annotées avec @Tester.

Étape 5) Vérifiez le résultat affiché dans la console.

La sortie de Cas de test ressemble à:

TestNG Sortie de la console d'écoute

[TestNG] En cours d'exécution:
C:\Users\gauravn\AppData\Local\Temp\testng-eclipse–1058076918\testng-customsuite.xml

Test de connexion démarré
Le nom du cas de test réussi est : Connexion
Cas de test TestToFail démarré
Cette méthode de test échoue
Le nom du cas de test ayant échoué est : TestToFail
RÉUSSI : Connexion
ÉCHEC : TestToFail
java.lang.AssertionError : attendu [true] mais trouvé [false]

Utilisation d'un écouteur pour plusieurs classes

Si un projet comporte de nombreuses classes de test, l'ajout du @Auditeurs L'annotation de chacun d'eux devient fastidieuse et sujette aux erreurs.

Dans ce cas, créez un testng.xml Créez un fichier et enregistrez-y l'écouteur une seule fois.

Balise d'écouteurs testng.xml pour plusieurs classes

Ce gestionnaire d'événements est ensuite appliqué à l'ensemble de la suite de tests, quel que soit le nombre de classes. Lors de l'exécution du fichier XML, il est déclenché pour chaque classe déclarée dans la suite, et il est possible d'enchaîner autant de gestionnaires d'événements que nécessaire au sein d'une même balise.

WebDriverListener dans Selenium 4 contre le pilote EventFiringWebDriver obsolète

Si TestNG Les écouteurs réagissent aux événements du cycle de vie des tests, tandis que les écouteurs WebDriver réagissent aux actions du pilote de navigateur telles qu'un clic, une navigation ou un appel findElement. Selenium 3 l'approche typique était la Écouteur d'événements WebDriver interface câblée à travers EventFiringWebDriverLes deux sont obsolètes dans Selenium 4.x.

Le remplaçant moderne est le Écouteur de pilote Web interface combinée avec Décorateur d'événements:

importer org.openqa.selenium.WebDriver ;
importer org.openqa.selenium.chrome.ChromeDriver ;
importer org.openqa.selenium.support.events.EventFiringDecorator;
importer org.openqa.selenium.support.events.WebDriverListener;

classe publique Écouteur de journalisation met en oeuvre Écouteur de pilote Web {
@ Override
vide public avantObtenir(pilote web pilote, chaîne url) {
System.out.println(« Naviguer vers » + url);
}
}

pilote web brut = New ChromeDriver();
pilote web conducteur = New Décorateur d'événements<>(New LoggingListener()).décorer(raw);

Le décorateur peut encapsuler n'importe quel WebDriver, WebElement ou Alert, ce qui est plus flexible que l'ancien système d'encapsulation événementiel. Écouteur de pilote Web pour l'observabilité côté navigateur et TestNG ITestListener pour les rapports au niveau de la suite.

Écouteurs basés sur l'IA : journaux plus intelligents et triage des pannes

Moderne Selenium Les équipes intègrent de plus en plus de services d'IA à leurs systèmes d'écoute pour rendre les signaux d'intégration continue plus exploitables. onTestFailureUn écouteur assisté par IA peut capturer un instantané du DOM ainsi qu'une capture d'écran, les envoyer à un modèle qui renvoie un cluster de causes racines probables et réécrire une étiquette dans le DOM. TestNG un rapport ou un outil comme ReportPortal.

Les modèles courants pilotés par l'IA comprennent :

  • Détection des tests instables : Les auditeurs transmettent les chronologies de réussite/échec à un modèle qui classe un échec comme étant instable, environnemental ou une véritable régression.
  • Captures d'écran intelligentes : Les modèles de vision par ordinateur recadrent, annotent et comparent les captures d'écran d'interface utilisateur afin que les réviseurs voient la région modifiée au lieu d'une page entière.
  • Localisateurs d'auto-réparation : A Écouteur de pilote Web crochets avantFindElement et demande à une IA d'assistance de suggérer un localisateur alternatif lorsque le localisateur principal échoue NoSuchElementException.
  • Résumés en langage naturel : An I Reporter L'implémentation alimente un LLM en résultats qui produit un résumé d'un paragraphe.

La couche d'écoute est l'endroit le plus propre pour injecter ces hooks car elle reste en dehors de la logique de test et s'applique uniformément à l'ensemble de la suite.

Résumé

Les auditeurs doivent générer des journaux ou personnaliser TestNG rapports dans Selenium Pilote Web.

  • TestNG propose de nombreuses interfaces d'écoute ; choisissez celle qui correspond à l'événement qui vous intéresse.
  • Les écouteurs sont des interfaces utilisées dans Selenium Scripts WebDriver pour réagir aux événements du cycle de vie des tests.
  • Le tutoriel a démontré ITestListener avec un test réussi et un test échoué.
  • Vous pouvez attacher un écouteur avec @Auditeurs ou enregistrez-le une fois dans testng.xml pour l'ensemble de la suite.
  • Selenium 4.x remplace EventFiringWebDriver au Écouteur de pilote Web + Décorateur d'événements pour les événements au niveau de WebDriver.

FAQ

Un écouteur est une interface qui s'abonne aux événements générés lors d'un Selenium essai. TestNG Les écouteurs réagissent aux événements du cycle de vie des tests, tels que le démarrage, la réussite, l'échec et le saut. Les écouteurs WebDriver réagissent aux événements du pilote de navigateur, tels que les clics, les navigations et les appels à findElement.

L'interface ITestListener est déclenchée pour chaque méthode de test annotée avec @Test et expose les événements onTestStart, onTestSuccess, onTestFailure, onTestSkipped et onFinish. L'interface ISuiteListener, quant à elle, n'est déclenchée que deux fois par suite de tests (onStart et onFinish), ce qui la rend idéale pour la configuration au niveau de la suite, comme l'ouverture d'un fichier de rapport.

Vous pouvez enregistrer un TestNG Il existe deux manières d'ajouter un écouteur : soit en ajoutant l'annotation @Listeners(MyListener.class) au-dessus de la classe de test, soit en déclarant un Balise dans testng.xml. L'approche XML applique l'écouteur à chaque classe de la suite sans modifier le code source.

EventFiringWebDriver et WebDriverEventListener sont obsolètes dans Selenium 4.x. Le remplacement recommandé est l'interface WebDriverListener combinée à EventFiringDecorator, qui peut encapsuler les instances WebDriver, WebElement ou Alert et offre des points d'accroche plus propres tels que beforeGet et afterClick.

Utilisez IReporter pour générer un rapport personnalisé après l'exécution de la suite de tests, comme un résumé HTML ou JSON. Utilisez IInvokedMethodListener pour ajouter un point d'entrée avant et après chaque méthode de test, y compris les méthodes de configuration telles que @BeforeMethod et @AfterMethod.

Les modèles d'IA peuvent enrichir les données d'écoute en attribuant à chaque entrée de journal un niveau de gravité, en générant des descriptions d'étapes en langage naturel et en regroupant les échecs associés. Dans onTestFailure, un service d'IA peut analyser la capture d'écran et la pile d'exécution. trace, puis associez une cause racine probable à la TestNG signaler.

Oui. Un écouteur peut transmettre l'historique des succès/échecs à un service d'IA qui classe un échec comme instable, environnemental ou une véritable régression. Le verdict est ensuite renvoyé sous forme de TestNG cet attribut permet aux tableaux de bord de mettre en quarantaine les tests instables sans qu'un humain examine chaque version défectueuse.

Résumez cet article avec :