TestNG Lyssnare in Selenium

โšก Smart sammanfattning

Lyssnare in Selenium WebDriver รคr TestNG grรคnssnitt som fรฅngar upp teshรคndelser fรถr att anpassa loggar, rapporter och รฅtgรคrder efter fel. Den hรคr artikeln fรถrklarar ITestListener-metoder, gรฅr igenom en kรถrbar Java exempel, och fรถrtydligar hur Selenium 4 ersatte den fรถrรฅldrade WebDriverEventListener.

  • โ“ Vad lyssnare gรถr: De prenumererar pรฅ TestNG hรคndelser som start, godkรคnd, misslyckad och hoppa รถver fรถr att driva loggning eller rapporteringshooks.
  • ๐Ÿงฉ Tolv grรคnssnitt: TestNG levererar grรคnssnitt som ITestListener, ISuiteListener, IReporter, IInvokedMethodListener och IAnnotationTransformer fรถr detaljerad kontroll.
  • ๐Ÿ› ๏ธ Tvรฅ kopplingslรคgen: Koppla en lyssnare med @Listeners-annoteringen pรฅ en enskild klass, eller registrera den en gรฅng inuti testng.xml fรถr varje svit.
  • ๐Ÿš€ Selenium 4 Uppdatering: EventFiringWebDriver รคr fรถrรฅldrad; det moderna WebDriverListener-grรคnssnittet plus EventFiringDecorator driver nu hรคndelsehooks pรฅ WebDriver-nivรฅ.
  • ๐Ÿค– AI-vinkel: AI-assisterade lyssnare kan automatiskt klassificera fel, bifoga smarta skรคrmdumpar och mata tillbaka ostabila testsignaler till CI-instrumentpaneler i realtid.

TestNG Lyssnare in Selenium

Selenium WebDriver-skript behรถver ofta reagera pรฅ testhรคndelser som en godkรคnd assertion, en misslyckad locator eller ett hoppat steg. Lyssnare gรถr det mรถjligt. I stort sett, Selenium projekt fรถrlitar sig pรฅ tvรฅ lyssnarfamiljer:

  1. WebDriver-lyssnare
  2. TestNG lyssnare

I den hรคr handledningen kommer vi att fokusera pรฅ TestNG Lyssnare, med en anteckning om hur lyssnare pรฅ WebDriver-nivรฅ fรถrรคndrades i Selenium 4.x.

Vad รคr en lyssnare i TestNG?

En lyssnare รคr ett grรคnssnitt som modifierar standardbeteendet fรถr TestNGSom namnet antyder โ€lyssnarโ€ lyssnare pรฅ hรคndelser definierade i en Selenium skript och reagera dรคrefter. Du anvรคnder dem genom att implementera det relevanta Listener-grรคnssnittet och registrera det i din testklass eller testsvit. Listeners lรฅter dig anpassa TestNG rapporter, bifoga skรคrmdumpar och generera strukturerade loggar.

Typer av lyssnare i TestNG

TestNG levererar en familj av lyssnargrรคnssnitt, och vart och ett riktar sig mot ett annat steg i testlivscykeln.

Nedan fรถljer de vanligt fรถrekommande TestNG lyssnare:

  1. IAnotationTransformer
  2. IAnotationTransformer2
  3. IKonfigurerbar
  4. IConfigurationListener
  5. IExecutionListener
  6. IHookable
  7. IInvokedMethodListener
  8. IIanropadMethodListener2
  9. ImethodInterceptor
  10. IReporter
  11. ISuiteListener
  12. ITestListener

Dessa grรคnssnitt anvรคnds i Selenium fรถr att generera loggar eller anpassa TestNG rapporter. I den hรคr handledningen kommer vi att implementera ITestListener.

ITestListener exponerar fรถljande metoder:

  • pรฅStart โ€“ anropas nรคr ett test startar.
  • pรฅTestframgรฅng โ€“ anropas nรคr ett test รคr godkรคnt.
  • vidTestfel โ€“ anropas nรคr ett test misslyckas.
  • vidTestร–verhoppat โ€“ anropas nรคr ett prov hoppas รถver.
  • vidTestmisslyckadesMenInomLyckadesProcent โ€“ anropas nรคr ett test misslyckas men ligger inom lyckade procent.
  • vidSlutfรถrande โ€“ anropas efter att alla tester i klassen har kรถrts.

Testscenario

I det hรคr testscenariot kommer vi att automatisera inloggningsprocessen och implementera ITestListener Emot det.

  1. Starta Firefox och รถppna webbplatsen https://demo.guru99.com/V4/

Testscenario-inloggning URL

  1. Logga in i applikationen.

Inloggningsformulรคr fรถr testscenario

Steg fรถr att skapa en TestNG Lyssnare

Fรถr testscenariot ovan kommer vi att implementera lyssnaren steg fรถr steg.

Steg 1) Skapa en klass som heter Lyssnartest som implementerar ITestListenerHรฅll muspekaren รถver den rรถda understreckningen och Eclipse kommer att fรถreslรฅ tvรฅ snabba lรถsningar, som visas nedan:

Eclipse snabb lรถsning fรถr att lรคgga till oimplementerade metoder

Klicka pรฅ โ€Lรคgg till oimplementerade metoderโ€. Flera stub-metoder (utan brรถdtext) lรคggs till i din kod, ungefรคr sรฅ hรคr:

paket Lyssnardemo;

importera org.testng.ITestContext;
importera org.testng.ITestListener;
importera org.testng.ITestResult;

allmรคn klass Lyssnartest redskap ITestListener {

@ร…sidosรคtta
offentligt ogiltigt vidSlutfรถr(ITestContext arg0) {
// TODO Autogenererad metodstub
}

@ร…sidosรคtta
offentligt ogiltigt pรฅStart(ITestContext arg0) {
// TODO Autogenererad metodstub
}

@ร…sidosรคtta
offentligt ogiltigt vidTestMisslyckadesMenInomLyckadesProcentuellITestresultat arg0) {
// TODO Autogenererad metodstub
}

@ร…sidosรคtta
offentligt ogiltigt vidTestfel(ITestresultat arg0) {
// TODO Autogenererad metodstub
}

@ร…sidosรคtta
offentligt ogiltigt vidTestร–verhoppad(ITestresultat arg0) {
// TODO Autogenererad metodstub
}

@ร…sidosรคtta
offentligt ogiltigt vidTestStart(ITestresultat arg0) {
// TODO Autogenererad metodstub
}

@ร…sidosรคtta
offentligt ogiltigt vidTestLyckades(ITestresultat arg0) {
// TODO Autogenererad metodstub
}
}

Lรฅt oss nu modifiera Lyssnartest klass. Vi kommer specifikt att fylla i fรถljande metoder: vidTestfel, vidTestร–verhoppad, vidTestStartoch vidTestframgรฅng.

ร„ndringen รคr enkel: varje metod skriver ut testets namn sรฅ att konsolen tydligt visar status fรถr godkรคnd, misslyckad och hoppad รถver.

Efter modifiering ser koden ut sรฅ hรคr:

paket Lyssnardemo;

importera org.testng.ITestContext;
importera org.testng.ITestListener;
importera org.testng.ITestResult;

allmรคn klass Lyssnartest redskap ITestListener {

@ร…sidosรคtta
offentligt ogiltigt vidSlutfรถr(ITestContext Resultat) {
}

@ร…sidosรคtta
offentligt ogiltigt pรฅStart(ITestContext Resultat) {
}

@ร…sidosรคtta
offentligt ogiltigt vidTestMisslyckadesMenInomLyckadesProcentuellITestresultat Resultat) {
}

// Nรคr ett testfall misslyckas anropas den hรคr metoden.
@ร…sidosรคtta
offentligt ogiltigt vidTestfel(ITestresultat Resultat) {
System.out.println("Namnet pรฅ det misslyckade testfallet รคr:" + Resultat.getName());
}

// Nรคr ett testfall hoppas รถver anropas den hรคr metoden.
@ร…sidosรคtta
offentligt ogiltigt vidTestร–verhoppad(ITestresultat Resultat) {
System.out.println("Namnet pรฅ det hoppade testfallet รคr:" + Resultat.getName());
}

// Nรคr ett testfall startar anropas den hรคr metoden.
@ร…sidosรคtta
offentligt ogiltigt vidTestStart(ITestresultat Resultat) {
System.out.println(Resultat.getName() + "Testfall pรฅbรถrjat");
}

// Nรคr ett testfall godkรคnns anropas den hรคr metoden.
@ร…sidosรคtta
offentligt ogiltigt vidTestLyckades(ITestresultat Resultat) {
System.out.println("Namnet pรฅ det godkรคnda testfallet รคr:" + Resultat.getName());
}
}

Steg 2) Skapa en annan klass som heter Testfall fรถr automatisering av inloggning. Selenium kommer att kรถra den hรคr klassen fรถr att logga in pรฅ demosidan.

paket Lyssnardemo;

importera org.openqa.selenium.By;
importera org.openqa.selenium.WebDriver;
importera org.openqa.selenium.firefox.FirefoxFรถrare;
importera org.testng.Assert;
importera org.testng.annotations.Lyssnare;
importera org.testng.annotations.Test;

allmรคn klass Testfall {
webbdrivrutin fรถrare = ny FirefoxChauffรถr();

// Test utformat fรถr att klara testet, fรถr att verifiera att lyssnaren lyckades.
@Testa
offentligt ogiltigt Logga in() {
drivrutin.get("https://demo.guru99.com/V4/");
drivrutin.findElement(Efter.namn("uid")).sendKeys("mngr34926");
drivrutin.findElement(Efter.namn("Lรถsenord")).sendKeys("amUpenu");
drivrutin.findElement(Efter.namn("btnLogin")).klick();
}

// Tvรฅngsmisslyckat test, fรถr att verifiera den felaktiga lyssnaren.
@Testa
offentligt ogiltigt TestAttMisslyckas() {
System.out.println("Denna testmetod misslyckas");
Assert.assertTrue(falsk);
}
}

Steg 3) Koppla sedan den hรคr lyssnaren till vรฅr testklass TestfallDet finns tvรฅ sรคtt att ansluta en klass till ett lyssnargrรคnssnitt.

Det fรถrsta sรคttet รคr att anvรคnda @Lyssnare anteckning, som visas nedan:

@Listeners(Listener_Demo.ListenerTest.class)

Vi lรคgger till denna anteckning ovanfรถr Testfall klass. Klassen ser dรฅ ut sรฅ hรคr:

paket Lyssnardemo;

importera org.openqa.selenium.By;
importera org.openqa.selenium.WebDriver;
importera org.openqa.selenium.firefox.FirefoxFรถrare;
importera org.testng.Assert;
importera org.testng.annotations.Lyssnare;
importera org.testng.annotations.Test;

@Listeners(Listener_Demo.ListenerTest.class)
allmรคn klass Testfall {
webbdrivrutin fรถrare = ny FirefoxChauffรถr();

// Test fรถr att klara, fรถr att verifiera att lyssnaren lyckades.
@Testa
offentligt ogiltigt Logga in() {
drivrutin.get("https://demo.guru99.com/V4/");
drivrutin.findElement(Efter.namn("uid")).sendKeys("mngr34926");
drivrutin.findElement(Efter.namn("Lรถsenord")).sendKeys("amUpenu");
drivrutin.findElement(Efter.namn("btnLogin")).klick();
}

// Tvรฅngsmisslyckat test, fรถr att verifiera den felaktiga lyssnaren.
@Testa
offentligt ogiltigt TestAttMisslyckas() {
System.out.println("Denna testmetod misslyckas");
Assert.assertTrue(falsk);
}
}

Projektstrukturen ser ut som:

TestNG Lyssnarprojektets struktur

Steg 4) Kรถr Testfall klass. Metoder inuti Lyssnartest anropas automatiskt baserat pรฅ beteendet hos metoder som รคr annoterade med @Testa.

Steg 5) Verifiera utdata som visas i konsolen.

Utsignalen frรฅn Testfall ser ut som:

TestNG Lyssnarkonsolens utgรฅng

[TestNGLรถpning:
C:\Anvรคndare\gauravn\AppData\Lokal\Temp\testng-eclipseโ€“1058076918\testng-customsuite.xml

Inloggningstest har startat
Namnet pรฅ det godkรคnda testfallet รคr: Logga in
TestToFail-testfallet har startats
Den hรคr testmetoden misslyckas
Namnet pรฅ det misslyckade testfallet รคr: TestToFail
GODKร„ND: Logga in
MISSLYCKADES: TestAttMisslyckas
java.lang.AssertionError: fรถrvรคntat [sant] men hittat [falskt]

Anvรคnda en lyssnare fรถr flera klasser

Om ett projekt har mรฅnga testklasser, kan man lรคgga till @Lyssnare anteckningar till var och en blir besvรคrliga och felbenรคgna.

I sรฅ fall, skapa en testng.xml filen och registrera lyssnaren dรคr en gรฅng.

testng.xml lyssnartagg fรถr flera klasser

Denna lyssnare tillรคmpas sedan รถver hela testsviten oavsett antalet klasser. Nรคr du kรถr XML-filen utlรถses lyssnaren fรถr varje klass som deklarerats i sviten, och du kan kedja ihop valfritt antal lyssnarklasser inom samma tagg.

WebDriverListener i Selenium 4 jรคmfรถrt med den fรถrรฅldrade EventFiringWebDriver

Medan TestNG Lyssnare reagerar pรฅ hรคndelser i testlivscykeln, WebDriver-lyssnare reagerar pรฅ webblรคsardrivrutinรฅtgรคrder som ett klick, en navigering eller ett findElement-anrop. Selenium 3 Det typiska tillvรคgagรฅngssรคttet var WebDriverHรคndelselyssnare grรคnssnittet รคr trรฅdbundet HรคndelseutlรถsandeWebbdrivrutinBรฅda รคr fรถrรฅldrade i Selenium 4.x.

Den moderna ersรคttningen รคr WebDriverListener grรคnssnitt kombinerat med HรคndelseAvfyrningDekoratรถr:

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

allmรคn klass LoggingListener redskap WebDriverListener {
@ร…sidosรคtta
offentligt ogiltigt fรถreGet(webbdrivrutin drivrutin, strรคng-url) {
System.out.println("Navigerar till" + webbadress);
}
}

webbdrivrutin rรฅ = ny ChromeDriver();
webbdrivrutin fรถrare = ny HรคndelseAvfyrningDekoratรถr<>(ny LoggingListener()).decorate(raw);

Dekoratรถren kan omsluta vilken WebDriver, WebElement eller Alert som helst, vilket รคr mer flexibelt รคn den gamla hรคndelseutlรถsande omslutaren. WebDriverListener fรถr observerbarhet pรฅ webblรคsarsidan och TestNG ITestListener fรถr rapportering pรฅ svitnivรฅ.

AI-drivna lyssnare: Smartare loggar och felsortering

Modern Konst Selenium Team kopplar alltmer AI-tjรคnster till sina lyssnare fรถr att gรถra CI-signaler mer handlingsbara. vidTestfel, kan en AI-assisterad lyssnare ta en DOM-รถgonblicksbild plus en skรคrmdump, skicka dem till en modell som returnerar ett troligt rotorsakskluster och skriva en tagg tillbaka till TestNG rapport eller ett verktyg som ReportPortal.

Vanliga AI-drivna mรถnster inkluderar:

  • Detektion av flakigt test: Lyssnare vidarebefordrar tidslinjer fรถr godkรคnd/misslyckad till en modell som klassificerar ett misslyckande som ojรคmnt, miljรถmรคssigt eller en verklig regression.
  • Smarta skรคrmdumpar: Datorseendemodeller beskรคr, kommenterar och differentierar skรคrmdumpar frรฅn anvรคndargrรคnssnittet sรฅ att granskare ser den รคndrade regionen istรคllet fรถr en helsidesdump.
  • Sjรคlvlรคkande lokaliseringsanordningar: A WebDriverListener krokar fรถreFindElement och ber en AI-hjรคlpare att fรถreslรฅ en alternativ positionerare nรคr den primรคra kastar NoSuchElementException.
  • Sammanfattningar pรฅ naturligt sprรฅk: An IReporter Implementeringen matar svitens resultat till en LLM som producerar en stรฅende sammanfattning i ett stycke.

Lyssnarlagret รคr det renaste stรคllet att injicera dessa krokar eftersom det hรฅller sig utanfรถr testlogiken och tillรคmpas enhetligt รถver sviten.

Sammanfattning

Lyssnare mรฅste generera loggar eller anpassa TestNG rapporterar i Selenium WebDriver.

  • TestNG erbjuder mรฅnga lyssnargrรคnssnitt; vรคlj det som matchar den hรคndelse du bryr dig om.
  • Lyssnare รคr grรคnssnitt som anvรคnds i Selenium WebDriver-skript fรถr att reagera pรฅ hรคndelser i testlivscykeln.
  • Handledningen demonstrerade ITestListener med ett godkรคnt och ett underkรคnt prov.
  • Du kan koppla en lyssnare med @Lyssnare eller registrera den en gรฅng i testng.xml fรถr hela sviten.
  • Selenium 4.x ersรคtter HรคndelseutlรถsandeWebbdrivrutin med WebDriverListener + HรคndelseAvfyrningDekoratรถr fรถr hรคndelser pรฅ WebDriver-nivรฅ.

Vanliga frรฅgor

En lyssnare รคr ett grรคnssnitt som prenumererar pรฅ hรคndelser som genereras under en Selenium provkรถrning. TestNG Lyssnare reagerar pรฅ hรคndelser i testets livscykel, sรฅsom start, godkรคnt, misslyckat och hoppat รถver. WebDriver-lyssnare reagerar pรฅ hรคndelser i webblรคsardrivrutinen, sรฅsom klick, navigering och findElement-anrop.

ITestListener utlรถses fรถr individuella @Test-metoder och exponerar onTestStart, onTestSuccess, onTestFailure, onTestSkipped och onFinish. iSuiteListener utlรถses endast tvรฅ gรฅnger per svit, med onStart och onFinish, vilket gรถr den idealisk fรถr installation pรฅ svitnivรฅ, till exempel fรถr att รถppna en rapportfil.

Du kan registrera a TestNG lyssnare pรฅ tvรฅ sรคtt: lรคgg till annoteringen @Listeners(MyListener.class) ovanfรถr testklassen, eller deklarera en taggen inuti testng.xml. XML-metoden tillรคmpar lyssnaren pรฅ varje klass i sviten utan att modifiera kรคllkoden.

EventFiringWebDriver och WebDriverEventListener รคr fรถrรฅldrade i Selenium 4.x. Den rekommenderade ersรคttningen รคr WebDriverListener-grรคnssnittet i kombination med EventFiringDecorator, vilket kan omsluta WebDriver-, WebElement- eller Alert-instanser och erbjuder renare hook-points som beforeGet och afterClick.

Anvรคnd iReporter nรคr du vill skapa en anpassad rapport efter att programsviten รคr klar, till exempel en HTML- eller JSON-sammanfattning. Anvรคnd IInvokedMethodListener nรคr du behรถver en hook fรถre och efter varje testmetod, inklusive konfigurationsmetoder som @BeforeMethod och @AfterMethod.

AI-modeller kan berika lyssnarutdata genom att tagga varje loggpost med allvarlighetsgrad, generera stegbeskrivningar i naturligt sprรฅk och klustra relaterade fel. Inuti onTestFailure kan en AI-tjรคnst analysera skรคrmdumpen och stacken. trace, ange sedan en sannolik grundorsak till TestNG rapportera.

Ja. En lyssnare kan strรถmma godkรคnd/misslyckad historik till en AI-tjรคnst som klassificerar ett fel som instabilt, miljรถmรคssigt eller en verklig regression. Domen skrivs tillbaka som en TestNG attribut, sรฅ att instrumentpaneler kan sรคtta instabila tester i karantรคn utan att en mรคnniska granskar varje rรถd version.

Sammanfatta detta inlรคgg med: