Ryhmät sisään TestNG

⚡ Älykäs yhteenveto

Ryhmät sisään TestNG voit merkitä testimetodeille loogisia otsikoita ja sitten sisällyttää tai sulkea pois ne XML-paketin avulla. Tämä lähestymistapa yksinkertaistaa savu-, regressio- ja riippuvuuspohjaisia ​​​​ajoja ilman uudelleenkirjoittamista Java koodi.

  • 🏷️ Annotaatiosyntaksi: Käyttää @Test(groups = {"smoke","regression"}) merkitäksesi minkä tahansa metodin yhdellä tai useammalla loogisella ryhmän nimellä.
  • 📜 XML-ohjausobjekti: <groups><run><include> ja <exclude> testng.xml-tiedoston sisällä olevat tagit päättävät, mitkä tagitetut metodit todellisuudessa suoritetaan.
  • 🔗 riippuvuudet: dependsOnGroups Attribuutti pakottaa järjestyksen, joten edellytysryhmät päättyvät aina ennen riippuvaisten testien alkamista.
  • 🤖 Tekoälyn valinta: Tekoälyn testivaikutusten mittaustyökalut yhdistävät koodimuutokset asiaankuuluviin ryhmiin, jotta vain muutokset vaikuttuviin paketteihin suoritetaan kullakin commitilla.
  • 🧪 TestNG 7.x: Nykyaikaiset julkaisut pitävät ryhmät täysin yhteensopivina rinnakkaissuorituksen, kuuntelijoiden ja Maven Surefire -putkistojen kanssa.

Ryhmät sisään TestNG

TestNG on testauskehys, joka kattaa yksikkö-, toiminnalliset, kokonaisvaltaiset, käyttöliittymä- ja integraatiotestit Java hankkeisiin.

Voit ajaa yhtä pakettia tai useita paketteja (paketti kapseloi toisiinsa liittyvät luokat määriteltyyn hakemistoasetteluun) luomalla XML-paketin ja käynnistämällä sen Mavenin kautta.

TestNG Ryhmät esimerkin kanssa

Käytät ryhmiä TestNG kun:

  • Et halua hajauttaa testausmenetelmiä useisiin luokkiin pelkästään toiminnallisen alueen perusteella, ja
  • Haluat ohittaa (ei suorittaa) valittuja testitapauksia ikään kuin ne puuttuisivat koodikannasta.
  • Molempien tavoitteiden saavuttamiseksi merkitset metodit loogisiin ryhmiin. TestNG noudattaa sitten XML-paketissa määritettyjä ”sisällytä”- ja ”poissulje”-suodattimia.

Alla oleva koodinpätkä näyttää testimetodissa käytetyn ryhmätunnisteiden syntaksin.

@Testata (ryhmät = { "sidonta", ”vahvat_siteet” })

Tässä käytetään kahta ryhmän nimeä, nimittäin bonding ja strong_tiesNämä ovat loogisia otsikoita, jotka voit nimetä uudelleen projektisi mukaan.

<groups> tagi merkitsee ryhmäsuodattimien alkua XML-paketissa.

Sitten mukautat XML:ää valitaksesi valitun ryhmän tagatuista luokista. Alla oleva esimerkki näyttää ryhmän määrittelyn syntaksin.

<ryhmät>
<ajaa>
<sisältää nimi="sidonta" />
</ajaa>
</ryhmät>

Oletetaan, että yksi luokka sisältää 10 testimetodia.

Näistä menetelmistä:

  • 6 menetelmää kantaa bonding ryhmä, ja
  • 4 menetelmää kantaa strong_ties ryhmään.

Seuraavaksi asennat Mavenin ja Java polkuja ja käytä Eclipse IDE ryhmän käytön havainnollistamiseksi XML-tiedostojen avulla ryhmässä Java-pohjainen Maven-projekti.

Luo XML:lle TestNG Tagien kanssa

  • Maven-kehyksen XML-tiedosto (Extensible Markup Language) tallentaa yhden tai useamman testin kokoonpanon, joka on deklaroitu tunnisteita.
  • Jokainen testimerkintä on kääritty tunniste ja siihen voi kuulua yksi tai useampi TestNG luokat.
  • A Java luokka, jossa on yksi tai useampi @Testata sen metodien merkintöjä käsitellään kuin TestNG luokka.

Useita tageja esiintyy peräkkäin toimivan testng.xml-tiedoston muodostamiseksi, nimittäin , ja .

  • tagi sisältää pakettitason nimen, jota käytetään TestNG raportteja toteutuksen yhteenvetoja varten.
  • <test name=”Guru 99 Savutestin demo tagissa on looginen testin nimi; raportti käyttää sitä läpäisy-, hylkäämis- ja ohitusmääriin sekä kokonaissuoritusaikaan ja ryhmän metatietoihin.
  • tag osoittaa testiluokkaan, jossa com.group.guru99 on paketti ja TC_Class1 on luokan nimi.

<!DOCTYPE sviitti SYSTEM “http://testng.org/testng-1.0.dtd”>
<sviitti nimi="Sviitti">
<testi nimi="Guru 99 Savutestin demo>
<ryhmät>
<ajaa>
<sisältää nimi=”vahvat_siteet” />
</ajaa>
</ryhmät>
<luokat>
<luokka nimi=”com.group.guru99.TC_Luokka1” />
</luokat>
</testi>
</sviitti>

Tähän XML-kokoonpanoon viitataan seuraavien osioiden video-ohjeissa.

"sulkea pois" tai "sisällytä" testi-XML:ssä

Jos ryhmittelymekanismi tuntuu raskaalta pienelle suodattimelle, testng.xml-paketti mahdollistaa myös yksittäisten testimetodien poissulkemisen tai sisällyttämisen nimen perusteella.

Sulje pois tunnistePoissulkemistagin syntaksisulkea nimi=”${TESTITAPAUKSEN_NIMI}” />
Sisällytä tunnisteSisällytä-tagin syntaksisisältää nimi=”${TESTITAPAUKSEN_NIMI}” />

Huomautus: Voit sisällyttää tai sulkea pois useita testitapauksia yhdellä suorituskerralla, ja sama syntaksi koskee ryhmäsuodattimia.

dependsOnGroupsin käyttö järjestettyyn suoritukseen

Pelkän sisällyttämisen lisäksi TestNG antaa yhden ryhmän olla riippuvainen toisesta käyttämällä dependsOnGroups attribuutti. Suorittaja varmistaa, että jokainen pääryhmän metodi päättyy ennen kuin mikään riippuvainen metodi käynnistyy, mikä pitää esiehdot luotettavina.

  • Kirjaudu ensin sisään ja sitten tapahtumat: Tagien kirjautumismenetelmät group = "auth"ja tunnisteiden siirtotestejä dependsOnGroups = {"auth"}Siirtotestit suoritetaan vasta onnistuneen kirjautumisen jälkeen.
  • Ohita epäonnistumisen yhteydessä: Jos pääryhmän metodi epäonnistuu, TestNG merkitsee riippuvaiset metodit ohitetuiksi sen sijaan, että ne merkitsisivät suoraan hylkäykseksi, mikä pitää raportit rehellisinä.
  • Yhdistä alwaysRun-funktion kanssa: Siivousmenetelmien tulisi olla asetettu alwaysRun = true joten purku jatkuu, vaikka ylävirran ryhmä epäonnistuisi.

Tämä malli on yleinen kokonaisvaltaisissa ratkaisuissa, joissa API-asennus on suoritettava loppuun ennen käyttöliittymän vahvistusten käynnistymistä.

ajaa TestNG Ryhmittele, sisällytä, sulje pois koodi (videodemo)

Alla on läpikäynti aiheesta Java koodi ja XML-paketti, jotka ohjaavat ryhmittele, sulje pois ja sisällytä käyttäytymistä.

Testi skenaario: Käynnistä Guru99 demopankkisivustoa, tarkista muutama elementti kirjautumissivulla, anna tunnistetiedot ja tarkista muutama kohde uudelleen kojelaudassa kirjautumisen jälkeen.

ajaa TestNG Ryhmittele, Sisällytä, Sulje pois Code

Huomautus: Jokainen vaihe elää omassa metodissaan, mutta suorituksen aikana järjestys riippuu XML-paketin merkinnöistä.

  • Menetelmä 1: Käynnistä selain ja alusta se URL (tc01LaunchURL()).
  • Menetelmä 2: Tarkista kirjautumissivun otsikko (tc02VerifyLaunchPage()).
  • Menetelmä 3: Kirjoita käyttäjätunnus ja salasana kirjautumislomakkeelle (tc03EnterCredentials()).
  • Menetelmä 4: Varmista, että pääkäyttäjän tunnus näkyy käyttäjän kojelaudassa (tc04VerifyLoggedInPage()).
  • Menetelmä 5: Tarkista lisälinkit käyttäjän kojelaudassa (tc05VerifyHyperlinks()).

Code skenaariolle:

paketti com.ryhmä.guru99;

tuoda java.util.concurrent.TimeUnit;

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

julkinen luokka TC_Luokka1 {
julkinen staattinen lopullinen web-ajuri webDriver = uusi Firefoxkuljettaja();

jono käynnistyssivunOtsikko = "//h3[teksti()='Guru99 Pankki]”;
lopullinen jono käyttäjänimi_elementti = “//syöttö[@nimi='uid']”, salasanan_elementti = “//syöte[@nimi='salasana']”,
sisäänkirjautumiselementti = “//input[@nimi='btnLogin']”;
lopullinen jono käyttäjänimi_arvo = ”Mngr28642”, salasanan_arvo = ”ydAnate”;
lopullinen jono päällikön tunnus = “//td[sisältää(text();'Pääkäyttäjän tunnus')]”;
lopullinen jono uusiAsiakas = “//a[@href='addcustomerpage.php']”, rahastonsiirto = “//a[@href='FundTransInput.php']”;

/** Tämä testitapaus alustaa webDriverin */
@Testata(ryhmät = { "sidonta", ”vahvat_siteet” })
julkinen tyhjiö tc01LaunchURL() {
webDriver.manage().window().maximize();
webDriver.manage().timeouts().implicitlyWait(20, AikaYksikkö.SEKUNNIT);
webDriver.get("https://www.demo.guru99.com/V4/");
}

/** Tarkistaa otsikon olemassaolon kirjautumissivulla */
@Testata(ryhmät = { "sidonta" })
julkinen tyhjiö tc02VerifyLaunchPage() {
Assert.assertTrue(webDriver.findElement(By.xpath(launchPageHeading)).isDisplayed(),
"Etusivun otsikkoa ei näytetä");
System.out.println("Etusivun otsikko näkyy");
}

/** Syöttää käyttäjätunnuksen ja salasanan ja napsauttaa sitten Kirjaudu sisään */
@Testata(ryhmät = { "sidonta", ”vahvat_siteet” })
julkinen tyhjiö tc03Syötä tunnistetiedot() {
webDriver.findElement(By.xpath(käyttäjäNimi_elementti)).sendKeys(käyttäjäNimi_arvo);
webDriver.findElement(By.xpath(salasanan_elementti)).sendKeys(salasanan_arvo);
webDriver.findElement(By.xpath(kirjautumiselementti)).click();
}

/** Vahvistaa päällikön tunnuksen kojelaudassa */
@Testata(ryhmät = { ”vahvat_siteet” })
julkinen tyhjiö tc04VahvistaKirjautunutSivu() {
Assert.assertTrue(webDriver.findElement(By.xpath(managerID)).isDisplayed(),
"Päällikön tunnustarraa ei näytetä");
System.out.println("Päällikön tunnus -tunniste näytetään");
}

/** Tarkistaa Uusi asiakas -linkin ja Rahansiirto-linkin kojelaudassa */
@Testata(ryhmät = { "sidonta" })
julkinen tyhjiö tc05VerifyHyperlinkit() {
Assert.assertTrue(webDriver.findElement(By.xpath(newCustomer)).isEnabled(),
”Uuden asiakkaan hyperlinkkiä ei näytetä”);
System.out.println("Uuden asiakkaan hyperlinkki näytetään");

Assert.assertTrue(webDriver.findElement(By.xpath(fundTransfer)).isEnabled(),
"Varainsiirron hyperlinkkiä ei näytetä");
System.out.println("Varainsiirron hyperlinkki näytetään");
}
}

Huomaa: demopankkitunnukset ovat voimassa noin 20 päivää, joten paikallinen suoritus saattaa näyttää virheellisten tunnistetietojen virheen kyseisen ajanjakson umpeutumisen jälkeen.

Koodin selitys:

Viisi testausmenetelmää, yksi toimintoa kohden, kullakin on groups attribuutti @Test merkintä.

Kaksi loogista ryhmätunnistetta ovat strong_ties ja bonding.

  • Ensimmäinen ja kolmas menetelmä sisältävät molemmat bonding ja strong_ties, joten ne suoritetaan aina, kun jompikumpi ryhmä sisältyy pakettiin. Tämä on yleinen kaava jaetuille testitapaus askeleet.
  • Toinen menetelmä on merkitty vain tägeillä bonding, joten se toimii vain silloin, kun bonding ryhmä on mukana.
  • Neljäs menetelmä on merkitty vain tägeillä strong_ties, joten se toimii vain, kun kyseinen ryhmä on mukana.
  • Viides menetelmä on merkitty vain tägeillä bonding, joten se toimii vain silloin, kun bonding ryhmä on mukana.

Seuraavassa on neljä toteutusskenaariota:

Skenaario 1: Suorita jokainen testimenetelmä ryhmästä riippumatta. Poista <groups> lohko käynnissä olevasta XML:stä.

Skenaario 2: Suorita vain valittuun ryhmään sidottuja metodeja, nimittäin strong_ties or bondingKatso alla oleva video.

  • Videon ensimmäisessä osassa mm. <groups> lohko kommentoidaan pois, joten jokainen testimetodi suoritetaan.
  • Toisessa osassa ryhmäsuodatin palautetaan ja vain vastaavat metodit suoritetaan.

Skenaario 3: Käytä poissulkemissuodatinta ohittaaksesi valitut testitapaukset. Katso video.

  • Demo ei sisällä tc02 nimeltä suoritettavassa XML-tiedostossa, ja tulosraportti vahvistaa, että poissuljettua metodia ei suoriteta.

Skenaario 4: Käytä sisällytyssuodatinta vain suoritukseen tc01LaunchURL, tc03EnterCredentialsja tc05VerifyHyperlinksKatso video.

Tässä suorituksessa vain include-suodattimessa luetellut metodit suoritetaan täsmälleen määritetyllä tavalla.

Lataa esimerkkiprojekti alla olevasta linkistä.

Lataa yllä oleva Code

Yhteenveto

Ryhmät sisään TestNG tuoda rakennelman suureksi Selenium ja yksikköpaketteja korvaamalla kertaluonteiset luokkajaot deklaratiivisilla XML-suodattimilla.

Merkitse metodisi tunnisteella @Test(groups = {...}), käytä sitten <include>, <exclude>ja dependsOnGroups ajaa savua, regressiota ja kokonaisvaltaisia ​​suorituksia samasta Maven-projektista TestNG 7.x.

UKK

Ryhmä on looginen nimi, joka on liitetty testimenetelmään groups attribuutti päällä @TestXML-paketti valitsee sitten ryhmät käyttämällä sisällytä- ja poissulkemissuodattimia, joten päätät suorituksen aikana, mitkä tagitetut metodit suoritetaan.

Sisällä <groups><run>, The <include name="..."> tunnisteiden valkoisille listalle lisäävät ryhmät suoritusta varten ja <exclude name="..."> estää ne. TestNG käyttää poissulkemisia sisällytettyjen jälkeen, joten poissuljettu ryhmä ohitetaan aina, vaikka se olisi myös lueteltu sisällytetyssä ryhmässä.

dependsOnGroups attribuutti päällä @Test joukot TestNG suorittaaksesi jokaisen luetellun ryhmän metodin ennen riippuvaisen metodin käynnistymistä. Jos jokin edellytetty metodi epäonnistuu, TestNG merkitsee riippuvaisen metodin ohitetuksi epäonnistuneen sijaan.

Joo. groups attribuutti hyväksyy taulukon, joten @Test(groups = {"smoke", "regression"}) sijoittaa yhden menetelmän molempiin ryhmiin. TestNG suorittaa kyseisen metodin aina, kun jompikumpi ryhmä sisältyy pakettiin, mikä pitää jaetut vaiheet KUIVINA.

TestNG 7.x on ylläpidetty linja, jonka alla on julkaisuja. org.testng:testng Maven-koordinaatti. Se pitää ryhmät, rinnakkaisen suorituksen ja kuuntelijat täysin yhteensopivina modernin kanssa. Selenium 4- ja JDK 17 -projektit.

Tekoälyllä tehtävät testityökalut analysoivat koodin eroavaisuudet ja yhdistävät sitten muutetut luokat niitä kattaviin ryhmiin. Testiputki suorittaa vain nämä tägitetyt ryhmät kussakin pull-pyynnössä, mikä lyhentää palautteenantoaikaa samalla, kun se pitääping riskialttiita polkuja koetuksella.

Kyllä. Tekoälyn klusterointialgoritmit lukevat historiallisia virhelokeja, merkitsevät epävakaat testit ja ehdottavat vakaata osajoukkoa, joka on merkitty tunnisteella regressionInsinöörit hyväksyvät listan, sitten TestNG pyörittää kyseistä ryhmää joka ilta, mikä pitää sviitin tiiviinä menettämättä kuuluvuutta.

Tiivistä tämä viesti seuraavasti: