TestNG Kuuntelijat sisään Selenium

⚡ Älykäs yhteenveto

Kuuntelijat sisään Selenium WebDriver ovat TestNG rajapintoja, jotka sieppaavat testitapahtumia lokien, raporttien ja virheenjälkeisten toimintojen mukauttamiseksi. Tässä artikkelissa selitetään ITestListener-metodit, käydään läpi suoritettava Java esimerkki ja selventää, miten Selenium 4 korvasi vanhentuneen WebDriverEventListenerin.

  • Mitä kuuntelijat tekevät: He tilaavat TestNG tapahtumat, kuten aloitus, läpäisy, epäonnistuminen ja ohitus, lokikirjaus- tai raportointikoukkujen ajamiseen.
  • 🧩 Kaksitoista käyttöliittymää: TestNG toimittaa rajapintoja, kuten ITestListener, ISuiteListener, IReporter, IInvokedMethodListener ja IAnnotationTransformer, yksityiskohtaista hallintaa varten.
  • 🛠️ Kaksi johdotustilaa: Liitä kuuntelija @Listeners-annotaatiolla yksittäiseen luokkaan tai rekisteröi se kerran testng.xml-tiedostossa jokaista pakettia varten.
  • 🚀 Selenium 4-päivitys: EventFiringWebDriver on vanhentunut; moderni WebDriverListener-rajapinta ja EventFiringDecorator tukevat nyt WebDriver-tason tapahtumakoukkuja.
  • 🤖 Tekoälyn kulma: Tekoälyavusteiset kuuntelijat voivat luokitella vikoja automaattisesti, liittää älykkäitä kuvakaappauksia ja syöttää epätasaisia ​​testisignaaleja takaisin CI-koontinäyttöihin reaaliajassa.

TestNG Kuuntelijat sisään Selenium

Selenium WebDriver-skriptien on usein reagoitava testitapahtumiin, kuten hyväksyttyyn väitteeseen, epäonnistuneeseen paikannukseen tai ohitettuun vaiheeseen. Kuuntelijat mahdollistavat tämän. Yleisesti ottaen, Selenium projektit nojaavat kahteen kuuntelijaperheeseen:

  1. WebDriver-kuuntelijat
  2. TestNG kuuntelijoita

Tässä opetusohjelmassa keskitymme TestNG Kuuntelijat, sekä huomautus siitä, miten WebDriver-tason kuuntelijat muuttuivat Selenium 4.x.

Mitä kuuntelija tarkoittaa TestNG?

Kuuntelija on rajapinta, joka muokkaa sovelluksen oletuskäyttäytymistä. TestNGKuten nimestä voi päätellä, kuuntelijat "kuuntelevat" tapahtumia, jotka on määritelty Selenium skriptiä ja reagoi sen mukaisesti. Käytät niitä toteuttamalla asiaankuuluvan kuuntelijarajapinnan ja rekisteröimällä sen testiluokkaasi tai -pakettiisi. Kuuntelijoiden avulla voit mukauttaa TestNG raportteja, liitä kuvakaappauksia ja lähetä strukturoituja lokeja.

Kuuntelijoiden tyypit TestNG

TestNG toimittaa kuuntelijarajapintojen perheen, ja jokainen niistä kohdistuu testin elinkaaren eri vaiheeseen.

Alla on yleisesti käytetyt TestNG kuuntelijat:

  1. IAnnotationTransformer
  2. IAnnotationTransformer2
  3. IMääritettävä
  4. IConfigurationListener
  5. IExecutionListener
  6. IHokoitettava
  7. IInvokedMethodListener
  8. IInvokedMethodListener2
  9. IMethodInterceptor
  10. IReporter
  11. ISuiteListener
  12. ITestListener

Näitä rajapintoja käytetään Selenium lokien luomiseen tai mukauttamiseen TestNG raportteja. Tässä opetusohjelmassa toteutamme ITestListener.

ITestListener paljastaa seuraavat menetelmät:

  • käynnistys – kutsutaan, kun jokin testi alkaa.
  • TestSuccess-tilassa – kutsutaan, kun testi läpäistään.
  • TestFair-tapahtumassa – kutsutaan, kun testi epäonnistuu.
  • TestSkipped-tilassa – kutsutaan, kun testi ohitetaan.
  • Testi epäonnistui, mutta onnistui prosenttiosuudella – kutsutaan, kun testi epäonnistuu, mutta on onnistumisprosentin sisällä.
  • onFinish – kutsutaan sen jälkeen, kun kaikki luokan testit on suoritettu.

Testiskenaario

Tässä testiskenaariossa automatisoimme kirjautumisprosessin ja toteutamme ITestListener sitä vastaan.

  1. Käynnistää Firefox ja avaa sivusto https://demo.guru99.com/V4/

Testiskenaarion kirjautuminen URL

  1. Kirjaudu sisään sovellukseen.

Testiskenaarion kirjautumislomake

Luomisen vaiheet a TestNG kuuntelija

Yllä olevassa testiskenaariossa toteutamme kuuntelijan askel askeleelta.

Vaihe 1) Luo luokka nimeltä Kuuntelijatesti joka toteuttaa ITestListener. Vie hiiri punaisen alleviivauksen päälle ja Eclipse ehdottaa kahta nopeaa korjausta, kuten alla on esitetty:

Eclipse pikakorjaus toteuttamattomien metodien lisäämiseen

Napsauta ”Lisää toteuttamattomat metodit”. Koodiisi lisätään useita tynkämetodeja (ilman runkoa) tällä tavalla:

paketti Kuuntelijan_esittely;

tuoda org.testng.ITestContext;
tuoda org.testng.ITestListener;
tuoda org.testng.ITestResult;

julkinen luokka Kuuntelijatesti työkoneet ITestListener {

@Ohittaa
julkinen tyhjiö onFinish(ITestContext arg0) {
// TODO Automaattisesti luotu metodin tynkä
}

@Ohittaa
julkinen tyhjiö Käynnistä(ITestContext arg0) {
// TODO Automaattisesti luotu metodin tynkä
}

@Ohittaa
julkinen tyhjiö TestFailedButWithinSuccessPercentage(ITestin tulos arg0) {
// TODO Automaattisesti luotu metodin tynkä
}

@Ohittaa
julkinen tyhjiö TestFailure(ITestin tulos arg0) {
// TODO Automaattisesti luotu metodin tynkä
}

@Ohittaa
julkinen tyhjiö TestSkipped(ITestin tulos arg0) {
// TODO Automaattisesti luotu metodin tynkä
}

@Ohittaa
julkinen tyhjiö TestStart(ITestin tulos arg0) {
// TODO Automaattisesti luotu metodin tynkä
}

@Ohittaa
julkinen tyhjiö TestSuccess(ITestin tulos arg0) {
// TODO Automaattisesti luotu metodin tynkä
}
}

Muokkaamme nyt Kuuntelijatesti luokka. Täytämme erityisesti seuraavat metodit: Testin epäonnistuessa, TestSkipped-tilassa, TestStart-tilassaja TestSuccess-testissä.

Muutos on yksinkertainen: jokainen metodi tulostaa testin nimen, jotta konsoli näyttää selvästi läpäisy-, hylkäys- ja ohitustilan.

Muokkauksen jälkeen koodi näyttää tältä:

paketti Kuuntelijan_esittely;

tuoda org.testng.ITestContext;
tuoda org.testng.ITestListener;
tuoda org.testng.ITestResult;

julkinen luokka Kuuntelijatesti työkoneet ITestListener {

@Ohittaa
julkinen tyhjiö onFinish(ITestContext Tulos) {
}

@Ohittaa
julkinen tyhjiö Käynnistä(ITestContext Tulos) {
}

@Ohittaa
julkinen tyhjiö TestFailedButWithinSuccessPercentage(ITestin tulos Tulos) {
}

// Kun testitapaus epäonnistuu, tätä metodia kutsutaan.
@Ohittaa
julkinen tyhjiö TestFailure(ITestin tulos Tulos) {
System.out.println("Hylänneen testitapauksen nimi on:" + Tulos.getNimi());
}

// Tätä metodia kutsutaan, kun testitapaus ohitetaan.
@Ohittaa
julkinen tyhjiö TestSkipped(ITestin tulos Tulos) {
System.out.println("Ohitetun testitapauksen nimi on:" + Tulos.getNimi());
}

// Kun testitapaus alkaa, tätä metodia kutsutaan.
@Ohittaa
julkinen tyhjiö TestStart(ITestin tulos Tulos) {
System.out.println(Tulos.getNimi() + "Testitapaus aloitettu");
}

// Kun testitapaus läpäisee testin, tätä metodia kutsutaan.
@Ohittaa
julkinen tyhjiö TestSuccess(ITestin tulos Tulos) {
System.out.println("Läpäistyn testitapauksen nimi on:" + Tulos.getNimi());
}
}

Vaihe 2) Luo toinen luokka nimeltä Testitapaukset kirjautumisen automatisointia varten. Selenium suorittaa tämän luokan kirjautuakseen demosivustolle.

paketti Kuuntelijan_esittely;

tuoda org.openqa.selenium.By;
tuoda org.openqa.selenium.WebDriver;
tuoda org.openqa.selenium.firefox.FirefoxKuljettaja;
tuoda org.testing.Assert;
tuoda org.testng.annotations.Listeners;
tuoda org.testng.annotations.Test;

julkinen luokka Testitapaukset {
web-ajuri kuljettaja = uusi Firefoxkuljettaja();

// Läpäistäväksi suunniteltu testi, jolla varmistetaan kuuntelijan onnistuminen.
@Testata
julkinen tyhjiö Kirjaudu() {
ajuri.get("https://demo.guru99.com/V4/");
driver.findElement(Nimen.By.name()"uid")).sendKeys(”Mngr34926”);
driver.findElement(Nimen.By.name()"Salasana")).sendKeys(”OlenUpenu”);
driver.findElement(Nimen.By.name()”btnLogin”)).klikkaa();
}

// Testi pakotettiin epäonnistumaan, jotta varmistetaan virhekuuntelija.
@Testata
julkinen tyhjiö Testi epäonnistuu() {
System.out.println("Tämä menetelmä testin epäonnistumiseen");
Assert.assertTrue(väärä);
}
}

Vaihe 3) Liitä seuraavaksi tämä kuuntelija testiluokkaamme TestitapauksetLuokan voi yhdistää kuuntelijarajapintaan kahdella tavalla.

Ensimmäinen tapa on käyttää @Kuuntelijat merkintä, kuten alla on esitetty:

@Listeners(Listener_Demo.ListenerTest.class)

Lisäämme tämän merkinnän yläpuolelle Testitapaukset luokka. Luokka näyttää sitten tältä:

paketti Kuuntelijan_esittely;

tuoda org.openqa.selenium.By;
tuoda org.openqa.selenium.WebDriver;
tuoda org.openqa.selenium.firefox.FirefoxKuljettaja;
tuoda org.testing.Assert;
tuoda org.testng.annotations.Listeners;
tuoda org.testng.annotations.Test;

@Listeners(Listener_Demo.ListenerTest.class)
julkinen luokka Testitapaukset {
web-ajuri kuljettaja = uusi Firefoxkuljettaja();

// Läpäisytesti, onnistumisen varmistamiseksi kuuntelijassa.
@Testata
julkinen tyhjiö Kirjaudu() {
ajuri.get("https://demo.guru99.com/V4/");
driver.findElement(Nimen.By.name()"uid")).sendKeys(”Mngr34926”);
driver.findElement(Nimen.By.name()"Salasana")).sendKeys(”OlenUpenu”);
driver.findElement(Nimen.By.name()”btnLogin”)).klikkaa();
}

// Testi pakotettiin epäonnistumaan, jotta varmistetaan virhekuuntelija.
@Testata
julkinen tyhjiö Testi epäonnistuu() {
System.out.println("Tämä menetelmä testin epäonnistumiseen");
Assert.assertTrue(väärä);
}
}

Projektin rakenne näyttää tältä:

TestNG Kuuntelijaprojektin rakenne

Vaihe 4) Suorita Testitapaukset luokka. Metodit sisällä Kuuntelijatesti kutsutaan automaattisesti annotoitujen metodien käyttäytymisen perusteella @Testata.

Vaihe 5) Tarkista konsolissa näkyvä tuloste.

Tuotos Testitapaukset näyttää:

TestNG Kuuntelukosolin lähtö

[TestNG] Juoksu:
C:\Users\gauravn\AppData\Local\Temp\testng-eclipse–1058076918\testng-customsuite.xml

Kirjautumisen testitapaus aloitettu
Läpäistyn testitapauksen nimi on: Kirjaudu sisään
TestToFail-testitapaus aloitettu
Tämä menetelmä testaa epäonnistuakseen
Epäonnistuneen testitapauksen nimi on: TestToFail
HYVÄKSYTTY: Kirjaudu sisään
HYLÄSTYI: Testi epäonnistuu
java.lang.AssertionError: odotettu arvo oli [true], mutta löytyi [false]

Kuuntelijan käyttö useille luokille

Jos projektissa on useita testiluokkia, lisäämällä @Kuuntelijat kunkin merkinnän tekeminen muuttuu hankalaksi ja virhealttiiksi.

Luo siinä tapauksessa testng.xml tiedosto ja rekisteröi kuuntelija sinne kerran.

testng.xml-kuuntelijatunniste useille luokille

Tätä kuuntelijaa käytetään sitten koko testisarjassa luokkien lukumäärästä riippumatta. Kun suoritat XML-tiedoston, kuuntelija käynnistyy jokaiselle testisarjassa ilmoitetulle luokalle, ja voit ketjuttaa minkä tahansa määrän kuuntelijaluokkia saman tagin sisällä.

WebDriverListener sisään Selenium 4 vs. vanhentunut EventFiringWebDriver

Vaikka TestNG kuuntelijat reagoivat testin elinkaaren tapahtumiin, WebDriver-kuuntelijat reagoivat selainohjaimen toimiin, kuten napsautukseen, navigointiin tai findElement-kutsuun. Selenium 3 Tyypillinen lähestymistapa oli WebDriverEventListener liitäntä kytkettynä läpi Tapahtuman käynnistysverkkoajuriMolemmat ovat vanhentuneita Selenium 4.x.

Nykyaikainen korvaaja on WebDriverListener käyttöliittymä yhdistettynä Tapahtumapolttokoristelija:

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

julkinen luokka Lokikuuntelija työkoneet WebDriverListener {
@Ohittaa
julkinen tyhjiö beforeGet(web-ajuri ohjain, merkkijono-url) {
System.out.println("Navigoiminen kohteeseen" + URL-osoite);
}
}

web-ajuri raaka = uusi Chrome-ohjain();
web-ajuri kuljettaja = uusi Tapahtumapolttokoristelija<>(uusi Lokikuuntelija()).decorate(raw);

Koristelija voi kääriä minkä tahansa WebDriverin, WebElementin tai Alertin, mikä on joustavampaa kuin vanha, tapahtumia käynnistävä kääre. Käytä WebDriverListener selainpuolen havaittavuuden ja TestNG ITestListener pakettikohtaiseen raportointiin.

Tekoälyllä toimivat kuuntelijat: Älykkäämmät lokit ja virheiden triage

Moderni Selenium Tiimit liittävät yhä useammin tekoälypalveluita kuuntelijoihinsa, jotta CI-signaaleista tulisi toiminnallisempia. Testin epäonnistuessa, tekoälyn avustama kuuntelija voi tallentaa DOM-tilannekuvan ja kuvakaappauksen, lähettää ne mallille, joka palauttaa todennäköisen perimmäisen syyn klusterin, ja kirjoittaa tagin takaisin TestNG raportti tai työkalu, kuten ReportPortal.

Yleisiä tekoälyn ohjaamia malleja ovat:

  • Hiutaletestin tunnistus: Kuuntelijat välittävät hyväksymis-/hylkäysaikajanat mallille, joka luokittelee epäonnistumisen epätasaiseksi, ympäristöön liittyväksi tai todelliseksi regressioksi.
  • Älykkäät kuvakaappaukset: Konenäkömallinnukset rajaavat, kommentoivat ja vertailevat käyttöliittymän näyttökuvia, jotta tarkistajat näkevät muuttuneen alueen koko sivun sijaan.
  • Itsekorjautuvat paikantimet: A WebDriverListener koukut ennenEtsi-elementtiä ja pyytää tekoälyavustajaa ehdottamaan vaihtoehtoista paikanninta, kun ensisijainen heittää NoSuchElementException.
  • Luonnollisella kielellä tehdyt yhteenvedot: An IReporter Toteutus syöttää sarjan tulokset LLM:ään, joka tuottaa yhden kappaleen mittaisen tiivistelmän.

Kuuntelijakerros on siistein paikka lisätä näitä koukkuja, koska se pysyy testilogiikan ulkopuolella ja sitä sovelletaan yhdenmukaisesti koko sarjassa.

Yhteenveto

Kuuntelijoiden on luotava lokeja tai mukautettava niitä TestNG raportteja Selenium WebDriver.

  • TestNG tarjoaa useita kuuntelurajapintoja; valitse se, joka vastaa sinua kiinnostavaa tapahtumaa.
  • Kuuntelijat ovat rajapintoja, joita käytetään Selenium WebDriver-skriptit reagoimaan testin elinkaaren tapahtumiin.
  • Opastus osoitti ITestListener hyväksytyllä ja hylätyllä kokeella.
  • Voit liittää kuuntelijan @Kuuntelijat tai rekisteröi se kerran testng.xml koko sviitille.
  • Selenium 4.x korvaa Tapahtuman käynnistysverkkoajuri WebDriverListener + Tapahtumapolttokoristelija WebDriver-tason tapahtumille.

UKK

Kuuntelija on rajapinta, joka tilaa tapahtuman aikana syntyneitä tapahtumia. Selenium koeajo. TestNG Kuuntelijat reagoivat testin elinkaaren tapahtumiin, kuten aloitukseen, läpäisyyn, epäonnistumiseen ja ohitukseen. WebDriver-kuuntelijat reagoivat selainohjaintapahtumiin, kuten klikkauksiin, navigointeihin ja findElement-kutsuihin.

ITestListener käynnistyy yksittäisille @Test-metodeille ja näyttää onTestStart-, onTestSuccess-, onTestFailure-, onTestSkipped- ja onFinish-metodit. ISuiteListener käynnistyy vain kaksi kertaa pakettia kohden, onStart- ja onFinish-metodeilla, joten se sopii erinomaisesti pakettitason asennukseen, kuten raporttitiedoston avaamiseen.

Voit rekisteröityä a TestNG kuuntelija kahdella tavalla: lisäämällä @Listeners(MyListener.class)-annotuksen testiluokan yläpuolelle tai määrittämällä -tunniste tiedostossa testng.xml. XML-lähestymistapa soveltaa kuuntelijaa kaikkiin sarjan luokkiin muokkaamatta lähdekoodia.

EventFiringWebDriver ja WebDriverEventListener ovat vanhentuneita Selenium 4.x. Suositeltu korvaava versio on WebDriverListener-rajapinta yhdistettynä EventFiringDecoratoriin, joka voi kääriä WebDriver-, WebElement- tai Alert-instanssit ja tarjoaa selkeämpiä liitäntöjä, kuten beforeGet ja afterClick.

Käytä IReporteria, kun haluat luoda mukautetun raportin testipaketin valmistuttua, kuten HTML- tai JSON-yhteenvedon. Käytä IInvokedMethodListeneria, kun tarvitset koukun ennen jokaista testimetodia ja sen jälkeen, mukaan lukien määritysmetodit, kuten @BeforeMethod ja @AfterMethod.

Tekoälymallit voivat rikastuttaa kuuntelijan tuotosta merkitsemällä jokaisen lokimerkinnän vakavuusasteella, luomalla luonnollisella kielellä kirjoitetut vaihekuvaukset ja klusteroimalla niihin liittyviä virheitä. onTestFailuren sisällä tekoälypalvelu voi analysoida kuvakaappauksen ja pinon trace, liitä sitten todennäköinen perimmäinen syy asiaan TestNG raportoida.

Kyllä. Kuuntelija voi suoratoistaa hyväksymis-/hylkäyshistoriaa tekoälypalveluun, joka luokittelee epäonnistumisen epätasaiseksi, ympäristöön liittyväksi tai todelliseksi regressioksi. Tuomio kirjoitetaan takaisin muodossa TestNG attribuutti, jotta kojelaudat voivat eristää epätasaiset testit ilman, että ihminen tarkistaa jokaista punaista koontiversiota.

Tiivistä tämä viesti seuraavasti: