TestNG Lyttere inn Selenium

โšก Smart oppsummering

Lyttere inn Selenium WebDriver er TestNG grensesnitt som fanger opp testhendelser for รฅ tilpasse logger, rapporter og handlinger etter feil. Denne artikkelen forklarer ITestListener-metoder, gรฅr gjennom en kjรธrbar Java eksempel, og forklarer hvordan Selenium 4 erstattet den utdaterte WebDriverEventListener.

  • โ“ Hva lyttere gjรธr: De abonnerer pรฅ TestNG hendelser som start, bestรฅtt, mislykket og hopp over for รฅ drive logging eller rapporteringshooks.
  • ๐Ÿงฉ Tolv grensesnitt: TestNG leverer grensesnitt som ITestListener, ISuiteListener, IReporter, IInvokedMethodListener og IAnnotationTransformer for detaljert kontroll.
  • ๐Ÿ› ๏ธ To ledningsmoduser: Koble til en lytter med @Listeners-annotasjonen pรฅ en enkelt klasse, eller registrer den รฉn gang inne i testng.xml for hver suite.
  • ๐Ÿš€ Selenium 4 Oppdatering: EventFiringWebDriver er utdatert; det moderne WebDriverListener-grensesnittet pluss EventFiringDecorator driver nรฅ hendelseskroker pรฅ WebDriver-nivรฅ.
  • ๐Ÿค– AI-vinkel: AI-assisterte lyttere kan automatisk klassifisere feil, legge ved smarte skjermbilder og mate ustabile testsignaler tilbake til CI-dashbord i sanntid.

TestNG Lyttere inn Selenium

Selenium WebDriver-skript mรฅ ofte reagere pรฅ testhendelser som en godkjent pรฅstand, en mislykket locator eller et hoppet trinn. Lyttere gjรธr det mulig. Generelt sett, Selenium prosjekter er avhengige av to lytterfamilier:

  1. WebDriver-lyttere
  2. TestNG lyttere

I denne veiledningen vil vi fokusere pรฅ TestNG Lyttere, med et notat om hvordan lyttere pรฅ WebDriver-nivรฅ endret seg i Selenium 4.x.

Hva er en lytter i TestNG?

En lytter er et grensesnitt som endrer standardoppfรธrselen til TestNGSom navnet antyder, ยซlytterยป lyttere til hendelser definert i en Selenium skript og reagere deretter. Du bruker dem ved รฅ implementere det relevante lyttergrensesnittet og registrere det i testklassen eller -pakken din. Lyttere lar deg tilpasse TestNG rapporter, legge ved skjermbilder og sende ut strukturerte logger.

Typer av lyttere i TestNG

TestNG sender en familie av lyttergrensesnitt, og hvert av dem er rettet mot et annet trinn i testlivssyklusen.

Nedenfor er de vanlig brukte TestNG lyttere:

  1. IAnotasjonTransformer
  2. IAnotasjonTransformer2
  3. IKonfigurerbar
  4. IConfigurationListener
  5. IExecutionListener
  6. IHookable
  7. IIinvokedMethodListener
  8. IIinvokedMethodListener2
  9. ImethodInterceptor
  10. IReporter
  11. ISuiteListener
  12. ITestListener

Disse grensesnittene brukes i Selenium for รฅ generere logger eller tilpasse TestNG rapporter. I denne veiledningen skal vi implementere ITestListener.

ITestListener avslรธrer fรธlgende metoder:

  • pรฅStart โ€“ kalles nรฅr en test starter.
  • pรฅTestSuksess โ€“ ringes nรฅr en test er bestรฅtt.
  • vedTestfeil โ€“ kalles nรฅr en test mislykkes.
  • pรฅTestHoppet over โ€“ kalles nรฅr en prรธve blir hoppet over.
  • pรฅTestMislykketMenInnenforSuksessProsent โ€“ kalles nรฅr en test mislykkes, men er innenfor suksessprosenten.
  • pรฅFerdig โ€“ kalles etter at alle testene i klassen er utfรธrt.

Testscenario

I dette testscenarioet vil vi automatisere innloggingsprosessen og implementere ITestListener imot det.

  1. Start Firefox og รฅpne siden https://demo.guru99.com/V4/

Testscenario-pรฅlogging URL

  1. Logg inn i applikasjonen.

Innloggingsskjema for testscenario

Trinn for รฅ lage en TestNG lytteren

For testscenarioet ovenfor vil vi implementere lytteren trinn for trinn.

Trinn 1) Opprett en klasse kalt Lyttertest som implementerer ITestListenerHold musepekeren over den rรธde understrekingen og Eclipse vil foreslรฅ to raske lรธsninger, som vist nedenfor:

Eclipse hurtiglรธsning for รฅ legge til uimplementerte metoder

Klikk pรฅ ยซLegg til uimplementerte metoderยป. Flere stub-metoder (uten brรธdtekst) legges til i koden din, omtrent slik:

pakke Lytter_Demo;

importere org.testng.ITestContext;
importere org.testng.ITestListener;
importere org.testng.ITestResult;

offentlig klasse Lyttertest redskaper ITestListener {

@Overstyring
offentlig ugyldighet vedFerdig(ITestContext arg0) {
// TODO Automatisk generert metodestub
}

@Overstyring
offentlig ugyldighet pรฅStart(ITestContext arg0) {
// TODO Automatisk generert metodestub
}

@Overstyring
offentlig ugyldighet vedTestMislykketMenInnenforSuksessProsent(ITestresultat arg0) {
// TODO Automatisk generert metodestub
}

@Overstyring
offentlig ugyldighet vedTestFeil(ITestresultat arg0) {
// TODO Automatisk generert metodestub
}

@Overstyring
offentlig ugyldighet pรฅTestHoppetOver(ITestresultat arg0) {
// TODO Automatisk generert metodestub
}

@Overstyring
offentlig ugyldighet vedTestStart(ITestresultat arg0) {
// TODO Automatisk generert metodestub
}

@Overstyring
offentlig ugyldighet vedTestSuksess(ITestresultat arg0) {
// TODO Automatisk generert metodestub
}
}

La oss nรฅ endre Lyttertest klasse. Vi vil spesielt fylle ut fรธlgende metoder: ved testfeil, pรฅTestHoppet over, ved teststartog pรฅTestSuksess.

Endringen er enkel: hver metode skriver ut navnet pรฅ testen, slik at konsollen tydelig viser status for bestรฅtt, ikke bestรฅtt og hoppet over.

Etter modifisering ser koden slik ut:

pakke Lytter_Demo;

importere org.testng.ITestContext;
importere org.testng.ITestListener;
importere org.testng.ITestResult;

offentlig klasse Lyttertest redskaper ITestListener {

@Overstyring
offentlig ugyldighet vedFerdig(ITestContext Resultat) {
}

@Overstyring
offentlig ugyldighet pรฅStart(ITestContext Resultat) {
}

@Overstyring
offentlig ugyldighet vedTestMislykketMenInnenforSuksessProsent(ITestresultat Resultat) {
}

// Nรฅr et testtilfelle feiler, kalles denne metoden.
@Overstyring
offentlig ugyldighet vedTestFeil(ITestresultat Resultat) {
System.out.println(ยซNavnet pรฅ den mislykkede testtilfellet er:ยป + Resultat.getName());
}

// Nรฅr en testtilfelle hoppes over, kalles denne metoden.
@Overstyring
offentlig ugyldighet pรฅTestHoppetOver(ITestresultat Resultat) {
System.out.println(ยซNavnet pรฅ testtilfellet som ble hoppet over er:ยป + Resultat.getName());
}

// Nรฅr en testcase starter, kalles denne metoden.
@Overstyring
offentlig ugyldighet vedTestStart(ITestresultat Resultat) {
System.out.println(Resultat.getName() + "Testtilfelle startet");
}

// Nรฅr en testtilfelle bestรฅr, kalles denne metoden.
@Overstyring
offentlig ugyldighet vedTestSuksess(ITestresultat Resultat) {
System.out.println(ยซNavnet pรฅ den bestรฅtte testcasen er:ยป + Resultat.getName());
}
}

Trinn 2) Opprett en annen klasse som heter Testtilfeller for automatisering av innlogging. Selenium vil kjรธre denne klassen for รฅ logge inn pรฅ demosiden.

pakke Lytter_Demo;

importere org.openqa.selenium.By;
importere org.openqa.selenium.WebDriver;
importere org.openqa.selenium.firefox.FirefoxDrivere;
importere org.testing.Assert;
importere org.testing.annotations.Lyttere;
importere org.testng.annotations.Test;

offentlig klasse Testtilfeller {
webdriver sjรฅfรธr = nytt FirefoxDriver();

// Test designet for รฅ bestรฅ, for รฅ bekrefte suksesslytteren.
@Test
offentlig ugyldighet Logg inn() {
sjรฅfรธr.get("https://demo.guru99.com/V4/");
driver.finnElement(Etter.navn(ยซuidยป)).sendKeys(ยซmngr34926ยป);
driver.finnElement(Etter.navn("Passord")).sendKeys(ยซamUpenuยป);
driver.finnElement(Etter.navn(ยซbtnLoginยป)).klikk();
}

// Tvangsfeiltest for รฅ bekrefte feillytteren.
@Test
offentlig ugyldighet TestTilFeil() {
System.out.println(ยซDenne testmetoden mislykkesยป);
Assert.assertTrue(falsk);
}
}

Trinn 3) Deretter knytter du denne lytteren til testklassen vรฅr TesttilfellerDet finnes to mรฅter รฅ koble en klasse til et lyttergrensesnitt pรฅ.

Den fรธrste mรฅten er รฅ bruke @Lyttere annotering, som vist nedenfor:

@Listeners(Listener_Demo.ListenerTest.class)

Vi legger til denne merknaden ovenfor Testtilfeller klasse. Klassen ser da slik ut:

pakke Lytter_Demo;

importere org.openqa.selenium.By;
importere org.openqa.selenium.WebDriver;
importere org.openqa.selenium.firefox.FirefoxDrivere;
importere org.testing.Assert;
importere org.testing.annotations.Lyttere;
importere org.testng.annotations.Test;

@Listeners(Listener_Demo.ListenerTest.class)
offentlig klasse Testtilfeller {
webdriver sjรฅfรธr = nytt FirefoxDriver();

// Test for รฅ bestรฅ, for รฅ bekrefte at lytteren var vellykket.
@Test
offentlig ugyldighet Logg inn() {
sjรฅfรธr.get("https://demo.guru99.com/V4/");
driver.finnElement(Etter.navn(ยซuidยป)).sendKeys(ยซmngr34926ยป);
driver.finnElement(Etter.navn("Passord")).sendKeys(ยซamUpenuยป);
driver.finnElement(Etter.navn(ยซbtnLoginยป)).klikk();
}

// Tvangsfeiltest for รฅ bekrefte feillytteren.
@Test
offentlig ugyldighet TestTilFeil() {
System.out.println(ยซDenne testmetoden mislykkesยป);
Assert.assertTrue(falsk);
}
}

Prosjektstrukturen ser slik ut:

TestNG Lytterprosjektstruktur

Trinn 4) Utfรธr Testtilfeller klasse. Metoder inni Lyttertest kalles automatisk basert pรฅ oppfรธrselen til metoder som er kommentert med @Test.

Trinn 5) Bekreft utdataene som vises i konsollen.

Resultatet av Testtilfeller ser ut som:

TestNG Lytterkonsollutgang

[TestNGLรธping:
C:\Brukere\gauravn\AppData\Lokal\Temp\testng-eclipseโ€“1058076918\testng-customsuite.xml

Testtilfelle for pรฅlogging startet
Navnet pรฅ den bestรฅtte testcasen er: Logg inn
TestToFail-testtilfelle startet
Denne metoden for รฅ teste mislykkes
Navnet pรฅ testtilfellet som mislyktes er: TestToFail
GODKJENT: Logg inn
MISLYKKET: TestTilMislykket
java.lang.AssertionError: forventet [true] men funnet [false]

Bruke en lytter for flere klasser

Hvis et prosjekt har mange testklasser, legges det til @Lyttere annotering til hver enkelt blir tungvint og utsatt for feil.

I sรฅ fall, opprett en testng.xml filen og registrer lytteren der รฉn gang.

testng.xml lyttertagg for flere klasser

Denne lytteren brukes deretter pรฅ tvers av hele testpakken uavhengig av antall klasser. Nรฅr du kjรธrer XML-filen, utlรธses lytteren for hver klasse som er deklarert i pakken, og du kan kjede sammen et hvilket som helst antall lytterklasser innenfor samme tag.

WebDriverListener i Selenium 4 vs. den utdaterte EventFiringWebDriver

Samtidig som TestNG Lyttere reagerer pรฅ hendelser i testens livssyklus, mens WebDriver-lyttere reagerer pรฅ handlinger fra nettleserdriveren, som et klikk, en navigasjon eller et findElement-kall. Selenium 3 Den typiske tilnรฆrmingen var WebDriverHendelseslytter grensesnitt kablet gjennom HendelsesutlรธsingWebDriverBegge er utdatert i Selenium 4.x.

Den moderne erstatningen er WebDriverLytter grensesnitt kombinert med HendelseAvfyringDekoratรธr:

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

offentlig klasse LoggingListner redskaper WebDriverLytter {
@Overstyring
offentlig ugyldighet fรธrGet(webdriver driver, String url) {
System.out.println("Navigerer til" + nettadresse);
}
}

webdriver rรฅ = nytt ChromeDriver();
webdriver sjรฅfรธr = nytt HendelseAvfyringDekoratรธr<>(nytt LoggingListener()).dekorere(raw);

Dekoratoren kan pakke inn en hvilken som helst WebDriver, WebElement eller Alert, noe som er mer fleksibelt enn den gamle hendelsesutlรธsende wrapperen. WebDriverLytter for observerbarhet pรฅ nettlesersiden og TestNG ITestListener for rapportering pรฅ suite-nivรฅ.

AI-drevne lyttere: Smartere logger og feilsortering

Moderne Selenium Team kobler i รธkende grad AI-tjenester til lytterne sine for รฅ gjรธre CI-signaler mer handlingsrettede. ved testfeil, kan en AI-assistert lytter ta et DOM-รธyeblikksbilde pluss et skjermbilde, sende dem til en modell som returnerer en sannsynlig rotรฅrsaksklynge, og skrive en tag tilbake i TestNG rapport eller et verktรธy som ReportPortal.

Vanlige AI-drevne mรธnstre inkluderer:

  • Deteksjon av flaky-test: Lyttere videresender tidslinjer for bestรฅtt/feil til en modell som klassifiserer en feil som ustabil, miljรธmessig eller en reell regresjon.
  • Smarte skjermbilder: Datasynsmodeller beskjรฆrer, kommenterer og endrer skjermbilder av brukergrensesnittet, slik at anmelderne ser det endrede omrรฅdet i stedet for en helsides dump.
  • Selvreparerende lokaliseringsverktรธy: A WebDriverLytter kroker fรธrFinnElement og ber en AI-hjelper om รฅ foreslรฅ en alternativ lokator nรฅr den primรฆre kaster NoSuchElementException.
  • Sammendrag pรฅ naturlig sprรฅk: An IReporter Implementeringen mater suite-resultatene inn i en LLM som produserer et stรฅende sammendrag pรฅ ett avsnitt.

Lytterlaget er det reneste stedet รฅ injisere disse krokene fordi det holder seg utenfor testlogikken og gjelder jevnt over hele suiten.

Sammendrag

Lyttere er pรฅlagt รฅ generere logger eller tilpasse TestNG rapporterer i Selenium WebDriver.

  • TestNG tilbyr mange lyttergrensesnitt; velg det som passer til hendelsen du bryr deg om.
  • Lyttere er grensesnitt som brukes i Selenium WebDriver-skript for รฅ reagere pรฅ hendelser i testens livssyklus.
  • Veiledningen demonstrerte ITestListener med en bestรฅtt og en ikke-bestรฅtt prรธve.
  • Du kan koble til en lytter med @Lyttere eller registrer den รฉn gang i testng.xml for hele suiten.
  • Selenium 4.x erstatter HendelsesutlรธsingWebDriver med WebDriverLytter + HendelseAvfyringDekoratรธr for hendelser pรฅ WebDriver-nivรฅ.

Spรธrsmรฅl og svar

En lytter er et grensesnitt som abonnerer pรฅ hendelser generert under en Selenium prรธvekjรธring. TestNG Lyttere reagerer pรฅ testlivssyklushendelser som start, bestรฅtt, mislykket og hopp over. WebDriver-lyttere reagerer pรฅ nettleserdriverhendelser som klikk, navigasjoner og findElement-kall.

ITestListener utlรธses for individuelle @Test-metoder og eksponerer onTestStart, onTestSuccess, onTestFailure, onTestSkipped og onFinish. iSuiteListener utlรธses bare to ganger per suite, med onStart og onFinish, noe som gjรธr den ideell for oppsett pรฅ suite-nivรฅ, for eksempel รฅpning av en rapportfil.

Du kan registrere a TestNG lytteren pรฅ to mรฅter: legg til @Listeners(MyListener.class)-annotasjonen over testklassen, eller deklarer en taggen i testng.xml. XML-tilnรฆrmingen bruker lytteren pรฅ tvers av hver klasse i suiten uten รฅ endre kildekoden.

EventFiringWebDriver og WebDriverEventListener er utdatert i Selenium 4.x. Den anbefalte erstatningen er WebDriverListener-grensesnittet kombinert med EventFiringDecorator, som kan pakke inn WebDriver-, WebElement- eller Alert-forekomster og tilbyr renere hook-punkter som beforeGet og afterClick.

Bruk iReporter nรฅr du vil lage en tilpasset rapport etter at programpakken er ferdig, for eksempel et HTML- eller JSON-sammendrag. Bruk IInvokedMethodListener nรฅr du trenger en hook fรธr og etter hver testmetode, inkludert konfigurasjonsmetoder som @BeforeMethod og @AfterMethod.

AI-modeller kan berike lytterutdata ved รฅ merke hver loggoppfรธring med alvorlighetsgrad, generere trinnbeskrivelser i naturlig sprรฅk og gruppere relaterte feil. Inne i onTestFailure kan en AI-tjeneste analysere skjermbildet og stakken. trace, og knytt deretter en sannsynlig rotรฅrsak til TestNG rapportere.

Ja. En lytter kan strรธmme bestรฅtt/ikke bestรฅtt-historikk til en AI-tjeneste som klassifiserer en feil som ustabil, miljรธrelatert eller en reell regresjon. Dommen skrives tilbake som en TestNG attributtet, slik at dashbord kan sette ustabile tester i karantene uten at et menneske gjennomgรฅr hver rรธde versjon.

Oppsummer dette innlegget med: