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 :