TestNG Ascultătorii în Selenium

⚡ Rezumat inteligent

Ascultătorii în Selenium WebDriver sunt TestNG interfețe care interceptează evenimente de testare pentru a personaliza jurnalele, rapoartele și acțiunile post-eșec. Acest articol explică metodele ITestListener, prezintă un instrument executabil Java exemplu și clarifică modul în care Selenium 4 a înlocuit versiunea depreciată WebDriverEventListener.

  • Ce fac ascultătorii: Ei se abonează la TestNG evenimente precum pornire, reușită, eșec și trecere la înregistrarea în jurnal a unității sau la hook-urile de raportare.
  • 🧩 Douăsprezece interfețe: TestNG oferă interfețe precum ITestListener, ISuiteListener, IReporter, IInvokedMethodListener și IAnnotationTransformer pentru control granular.
  • 🛠️ Două moduri de cablare: Atașați un listener cu adnotarea @Listeners pe o singură clasă sau înregistrați-l o singură dată în testng.xml pentru fiecare suită.
  • 🚀 Selenium Actualizare 4: EventFiringWebDriver este depreciat; interfața modernă WebDriverListener plus EventFiringDecorator alimentează acum hook-urile de evenimente la nivel de WebDriver.
  • 🤖 Unghiul AI: Ascultătorii asistați de inteligență artificială pot clasifica automat erorile, pot atașa capturi de ecran inteligente și pot transmite semnale de testare instabile către tablourile de bord CI în timp real.

TestNG Ascultătorii în Selenium

Selenium Scripturile WebDriver trebuie adesea să reacționeze la evenimente de testare, cum ar fi o aserțiune transmisă, un localizator eșuat sau un pas omis. Listener-ele fac acest lucru posibil. În general, Selenium Proiectele se bazează pe două familii de ascultători:

  1. WebDriver Ascultători
  2. TestNG ascultătorii

În acest tutorial, ne vom concentra asupra TestNG Listener-e, cu o notă despre cum s-au modificat listener-ele la nivel de WebDriver în Selenium 4.x.

Ce este un ascultător în TestNG?

Un Listener este o interfață care modifică comportamentul implicit al TestNGAșa cum sugerează și numele, ascultătorii „ascultă” evenimentele definite într-un Selenium script și reacționează în consecință. Le utilizați implementând interfața Listener relevantă și înregistrând-o în clasa sau suita de testare. Listener-ele vă permit să personalizați TestNG rapoarte, atașarea de capturi de ecran și emiterea de jurnale structurate.

Tipuri de ascultători în TestNG

TestNG livrează o familie de interfețe de ascultare, fiecare dintre ele vizează o etapă diferită a ciclului de viață al testării.

Mai jos sunt cele utilizate în mod obișnuit TestNG ascultători:

  1. IAnnotationTransformer
  2. IAnnotationTransformer2
  3. IConfigurabil
  4. IConfigurationListener
  5. IExecutionListener
  6. IHookable
  7. IInvokedMethodListener
  8. IIInvokedMethodListener2
  9. IMethodInterceptor
  10. Reporter
  11. ISuiteListener
  12. ITestListener

Aceste interfețe sunt utilizate în Selenium pentru a genera jurnale sau a personaliza TestNG rapoarte. În acest tutorial, vom implementa ITestListener.

ITestListener expune următoarele metode:

  • laStart – apelat la începerea oricărui test.
  • onTestSuccess – apelat când un test este trecut.
  • onTestFailure – apelat atunci când un test eșuează.
  • onTestSkipped – apelat atunci când un test este omis.
  • laTestEșuatDarÎnRaportProcentajSucces – apelat atunci când un test eșuează, dar se încadrează în procentul de succes.
  • laFinalizare – apelată după executarea tuturor testelor din clasă.

Scenariu de testare

În acest scenariu de testare, vom automatiza procesul de conectare și vom implementa ITestListener impotriva.

  1. Lansa Firefox și deschide site-ul https://demo.guru99.com/V4/

Autentificare scenariu de testare URL

  1. Conectați-vă la aplicație.

Formular de autentificare pentru scenariul de testare

Pași pentru a crea a TestNG ascultător

Pentru scenariul de testare de mai sus, vom implementa Listener-ul pas cu pas.

Pas 1) Creați o clasă numită Test de ascultare care implementează ITestListenerPlasați cursorul peste sublinierea roșie și Eclipse va sugera două soluții rapide, așa cum se arată mai jos:

Eclipse soluție rapidă pentru adăugarea metodelor neimplementate

Faceți clic pe „Adăugați metode neimplementate”. Mai multe metode stub (fără corp) sunt adăugate la codul dvs., similar cu acesta:

pachet Listener_Demo;

import org.testng.ITestContext;
import org.testng.ITestListener;
import org.testng.ITestResult;

clasa publica Test de ascultare ustensile ITestListener {

@Trece peste
vid public laTerminare(ITestContext arg0) {
// TODO Stub de metodă generat automat
}

@Trece peste
vid public laStart(ITestContext arg0) {
// TODO Stub de metodă generat automat
}

@Trece peste
vid public laTestEșuatDarÎnRaportProcentajSucces(RezultatTestIT arg0) {
// TODO Stub de metodă generat automat
}

@Trece peste
vid public la eșecul testului (RezultatTestIT arg0) {
// TODO Stub de metodă generat automat
}

@Trece peste
vid public onTestSkipped(RezultatTestIT arg0) {
// TODO Stub de metodă generat automat
}

@Trece peste
vid public laTestStart(RezultatTestIT arg0) {
// TODO Stub de metodă generat automat
}

@Trece peste
vid public laTestSucces(RezultatTestIT arg0) {
// TODO Stub de metodă generat automat
}
}

Acum haideți să modificăm Test de ascultare clasă. În special, vom completa următoarele metode: onTestFailure, onTestSkipped, laTestStart și onTestSucces.

Schimbarea este simplă: fiecare metodă afișează numele testului, astfel încât consola să afișeze clar starea de trecere, eșec și omitere.

După modificare, codul arată astfel:

pachet Listener_Demo;

import org.testng.ITestContext;
import org.testng.ITestListener;
import org.testng.ITestResult;

clasa publica Test de ascultare ustensile ITestListener {

@Trece peste
vid public laTerminare(ITestContext Rezultat) {
}

@Trece peste
vid public laStart(ITestContext Rezultat) {
}

@Trece peste
vid public laTestEșuatDarÎnRaportProcentajSucces(RezultatTestIT Rezultat) {
}

// Când un caz de test eșuează, se apelează această metodă.
@Trece peste
vid public la eșecul testului (RezultatTestIT Rezultat) {
System.out.println(„Numele cazului de testare eșuat este:” + Rezultat.getName());
}

// Când un caz de test este omis, se apelează această metodă.
@Trece peste
vid public onTestSkipped(RezultatTestIT Rezultat) {
System.out.println(„Numele cazului de test omis este:” + Rezultat.getName());
}

// Când pornește un caz de testare, se apelează această metodă.
@Trece peste
vid public laTestStart(RezultatTestIT Rezultat) {
System.out.println(Rezultat.getName() + „caz de testare început”);
}

// Când un caz de test trece, se apelează această metodă.
@Trece peste
vid public laTestSucces(RezultatTestIT Rezultat) {
System.out.println(„Numele cazului de testare aprobat este:” + Rezultat.getName());
}
}

Pas 2) Creați o altă clasă numită Cazuri de testare pentru automatizarea autentificării. Selenium va executa această clasă pentru a vă conecta la site-ul demo.

pachet Listener_Demo;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxȘoferi;
import org.testng.Assert;
import org.testng.annotations.Listeners;
import org.testng.annotations.Test;

clasa publica Cazuri de testare {
webdriver șofer = nou FirefoxŞofer,

// Test conceput să fie aprobat, pentru a verifica succesul ascultătorului.
@Test
vid public Log in() {
driver.get(„https://demo.guru99.com/V4/”);
driver.findElement(După.nume(„fluid”)).sendKeys(„mngr34926”);
driver.findElement(După.nume("Parola")).sendKeys(„amUpenu”);
driver.findElement(După.nume(„btnLogin”)).clic();
}

// Test eșuat forțat, pentru a verifica listener-ul de erori.
@Test
vid public TestToFail() {
System.out.println(„Această metodă de testare eșuează”);
Assert.assertTrue(fals);
}
}

Pas 3) Apoi, atașează acest ascultător la clasa noastră de test Cazuri de testareExistă două moduri de a conecta o clasă la o interfață de ascultare.

Prima modalitate este de a folosi @Ascultători adnotare, așa cum se arată mai jos:

@Listeners(Listener_Demo.ListenerTest.class)

Adăugăm această adnotare deasupra Cazuri de testare clasă. Clasa arată apoi astfel:

pachet Listener_Demo;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxȘoferi;
import org.testng.Assert;
import org.testng.annotations.Listeners;
import org.testng.annotations.Test;

@Listeners(Listener_Demo.ListenerTest.class)
clasa publica Cazuri de testare {
webdriver șofer = nou FirefoxŞofer,

// Test pentru a trece, pentru a verifica ascultătorul de succes.
@Test
vid public Log in() {
driver.get(„https://demo.guru99.com/V4/”);
driver.findElement(După.nume(„fluid”)).sendKeys(„mngr34926”);
driver.findElement(După.nume("Parola")).sendKeys(„amUpenu”);
driver.findElement(După.nume(„btnLogin”)).clic();
}

// Test eșuat forțat, pentru a verifica listener-ul de erori.
@Test
vid public TestToFail() {
System.out.println(„Această metodă de testare eșuează”);
Assert.assertTrue(fals);
}
}

Structura proiectului arată astfel:

TestNG Structura proiectului Listener

Pas 4) Executați Cazuri de testare clasă. Metode din interiorul Test de ascultare sunt invocate automat pe baza comportamentului metodelor adnotate cu @Test.

Pas 5) Verificați ieșirea afișată în consolă.

Rezultatul Cazuri de testare se pare ca:

TestNG Ieșire consolă ascultător

[TestNG] Alergând:
C:\Utilizatori\gauravn\AppData\Local\Temp\testng-eclipse–1058076918\testng-customsuite.xml

Cazul de testare a autentificării a început
Numele cazului de testare aprobat este: Autentificare
Cazul de testare TestToFail a început
Această metodă de testare eșuează
Numele cazului de test eșuat este: TestToFail
TRECUT: Autentificare
EȘUAT: TestToFail
java.lang.AssertionError: se aștepta [true] dar s-a găsit [false]

Utilizarea unui Listener pentru mai multe clase

Dacă un proiect are mai multe clase de testare, adăugarea @Ascultători adnotarea pentru fiecare dintre ele devine greoaie și predispusă la erori.

În acest caz, creați un testng.xml fișierul și înregistrează ascultătorul acolo o dată.

Etichetă de ascultare testng.xml pentru clase multiple

Acest listener este apoi aplicat întregii suite de teste, indiferent de numărul de clase. Când rulați fișierul XML, listener-ul se declanșează pentru fiecare clasă declarată în suită și puteți înlănțui orice număr de clase listener în cadrul aceleiași etichete.

WebDriverListener în Selenium 4 vs. EventFiringWebDriver-ul depreciat

In timp ce TestNG ascultătorii reacționează la evenimentele ciclului de viață al testului, ascultătorii WebDriver reacționează la acțiunile driverului de browser, cum ar fi un clic, o navigare sau un apel findElement. În Selenium 3 abordarea tipică a fost WebDriverEventListener interfață cablată prin Driver Web de Declanșare a EvenimentelorAmbele sunt depreciate în Selenium 4.x.

Înlocuitorul modern este WebDriverListener interfață combinată cu Decorator de eveniment:

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

clasa publica LoggingListener ustensile WebDriverListener {
@Trece peste
vid public înainte de a obține (webdriver driver, URL-ul șirului de caractere) {
System.out.println(„Navigare către” + adresa URL);
}
}

webdriver brut = nou ChromeDriver,
webdriver șofer = nou Decorator de eveniment<>(nou LoggingListener()).decorate(raw);

Decoratorul poate încadra orice WebDriver, WebElement sau Alert, ceea ce este mai flexibil decât vechiul wrapper de declanșare a evenimentelor. Folosește WebDriverListener pentru observabilitatea din partea browserului și TestNG ITestListener pentru raportare la nivel de suită.

Listenere bazate pe inteligență artificială: jurnale mai inteligente și triere a defecțiunilor

Modern Selenium Echipele conectează din ce în ce mai mult serviciile de inteligență artificială la ascultătorii lor pentru a face semnalele CI mai ușor de utilizat. În interior onTestFailure, un ascultător asistat de inteligență artificială poate captura o imagine DOM plus o captură de ecran, le poate trimite către un model care returnează un cluster cu cauza principală probabilă și poate scrie o etichetă înapoi în TestNG un raport sau un instrument precum ReportPortal.

Printre modelele comune bazate pe inteligență artificială se numără:

  • Detectarea testului de coajă: Ascultătorii transmit cronologii de succes/eșec către un model care clasifică o eroare ca fiind instabilă, de mediu sau o regresie reală.
  • Capturi de ecran inteligente: Modelele de viziune computerizată decupează, adnotează și diferențiază capturile de ecran ale interfeței utilizator, astfel încât recenzorii să vadă regiunea modificată în loc de o imagine de pe o pagină întreagă.
  • Localizatoare cu auto-vindecare: A WebDriverListener cârlige înainte de a găsi elementul și cere unui asistent AI să sugereze un localizator alternativ atunci când cel principal aruncă NoSuchElementException.
  • Rezumate în limbaj natural: An Reporter Implementarea introduce rezultatele suitei într-un LLM care produce un rezumat stand-up de un paragraf.

Stratul de ascultare este cel mai curat loc pentru a injecta aceste hook-uri, deoarece rămâne în afara logicii de testare și se aplică uniform în întreaga suită.

Rezumat

Ascultătorii trebuie să genereze jurnalele sau să personalizeze TestNG raportează în Selenium WebDriver.

  • TestNG oferă multe interfețe de ascultare; alegeți-o pe cea care se potrivește evenimentului care vă interesează.
  • Ascultătorii sunt interfețe folosite în Selenium Scripturi WebDriver pentru a reacționa la evenimentele ciclului de viață al testării.
  • Tutorialul a demonstrat ITestListener cu un test promovat și unul eșuat.
  • Puteți atașa un ascultător cu @Ascultători sau înregistrați-l o dată în testng.xml pentru întreaga suită.
  • Selenium 4.x înlocuiește Driver Web de Declanșare a Evenimentelor implementate cu WebDriverListener + Decorator de eveniment pentru evenimente la nivel de WebDriver.

Întrebări frecvente

Un listener este o interfață care se abonează la evenimentele generate în timpul unui Selenium rulare de probă. TestNG Listener-ele reacționează la evenimentele din ciclul de viață al testării, cum ar fi start, passe, fail și skip. Listener-ele WebDriver reacționează la evenimentele driverului de browser, cum ar fi clicuri, navigări și apeluri findElement.

ITestListener se declanșează pentru metode @Test individuale și expune onTestStart, onTestSuccess, onTestFailure, onTestSkipped și onFinish. ISuiteListener se declanșează doar de două ori per suită, cu onStart și onFinish, fiind ideal pentru configurarea la nivel de suită, cum ar fi deschiderea unui fișier raport.

Puteți înregistra un TestNG ascultător în două moduri: adăugați adnotarea @Listeners(MyListener.class) deasupra clasei de test sau declarați un etichetă din testng.xml. Abordarea XML aplică listener-ul în fiecare clasă din suită fără a modifica codul sursă.

EventFiringWebDriver și WebDriverEventListener sunt depreciate în Selenium 4.x. Înlocuitorul recomandat este interfața WebDriverListener combinată cu EventFiringDecorator, care poate încapsula instanțe WebDriver, WebElement sau Alert și oferă puncte de legătură mai curate, cum ar fi beforeGet și afterClick.

Folosește IReporter atunci când dorești să generezi un raport personalizat după finalizarea suitei, cum ar fi un rezumat HTML sau JSON. Folosește IInvokedMethodListener atunci când ai nevoie de un hook înainte și după fiecare metodă de testare, inclusiv metode de configurare precum @BeforeMethod și @AfterMethod.

Modelele de inteligență artificială pot îmbogăți rezultatul ascultătorului prin etichetarea fiecărei intrări în jurnal cu severitatea, generarea de descrieri ale pașilor în limbaj natural și gruparea în clustere a erorilor aferente. În cadrul onTestFailure, un serviciu de inteligență artificială poate analiza captura de ecran și stiva. trace, apoi atașați o cauză principală probabilă la TestNG raport.

Da. Un ascultător poate transmite în flux istoricul succes/eșec către un serviciu de inteligență artificială care clasifică o eroare ca fiind instabilă, de mediu sau o regresie reală. Verdictul este scris ca un TestNG atribut, astfel încât tablourile de bord să poată pune în carantină testele instabile fără ca o persoană să verifice fiecare versiune nefuncțională.

Rezumați această postare cu: