Grupper i TestNG

โšก Smart opsummering

Grupper i TestNG giver dig mulighed for at tagge testmetoder med logiske etiketter og derefter inkludere eller ekskludere dem via en XML-suite. Denne tilgang forenkler rรธg-, regressions- og afhรฆngighedsdrevne kรธrsel uden omskrivning. Java kode.

  • ๐Ÿท๏ธ Annotationssyntaks: Brug @Test(groups = {"smoke","regression"}) at mรฆrke en hvilken som helst metode med et eller flere logiske gruppenavne.
  • ๐Ÿ“œ XML-kontrol: <groups><run><include> og <exclude> Taggene i testng.xml bestemmer, hvilke taggede metoder der rent faktisk udfรธres.
  • ๐Ÿ”— Afhรฆngigheder: dependsOnGroups Attributtstyrker rรฆkkefรธlge, sรฅ forudsatte grupper altid afsluttes, fรธr afhรฆngige tests starter.
  • ๐Ÿค– AI-valg: AI-test-pรฅvirkningsvรฆrktรธjer knytter kodeรฆndringer til relevante grupper, sรฅ kun berรธrte suiter kรธrer pรฅ hver commit.
  • ๐Ÿงช TestNG 7.x: Moderne udgivelser holder grupper fuldt kompatible med parallel udfรธrelse, lyttere og Maven Surefire-pipelines.

Grupper i TestNG

TestNG er et testframework, der dรฆkker enheds-, funktionelle-, end-to-end-, UI- og integrationstests for Java projekter.

Du kan kรธre en enkelt pakke eller mange pakker (en pakke indkapsler relaterede klasser i et defineret mappelayout) ved at oprette en XML-suite og udlรธse den via Maven.

TestNG Grupper med eksempel

Du bruger grupper i TestNG hvornรฅr:

  • Du รธnsker ikke at sprede testmetoder pรฅ tvรฆrs af mange klasser udelukkende efter funktionelt omrรฅde, og
  • Du รธnsker at springe over (ikke udfรธre) udvalgte testcases, som om de var fravรฆrende i kodebasen.
  • For at opnรฅ begge mรฅl, tagger du metoder i logiske grupper. TestNG respekterer derefter filtrene "include" og "exclude", der er deklareret i XML-pakken.

Uddraget nedenfor viser den gruppemรฆrkningssyntaks, der bruges i en testmetode.

@Prรธve (grupper = { "binding", "stรฆrke_bรฅnd" })

Her bruges to gruppenavne, nemlig bonding og strong_tiesDisse er logiske etiketter, som du kan omdรธbe, sรฅ de passer til dit projekt.

<groups> Tagget markerer starten pรฅ gruppefiltre i XML-pakken.

Derefter tilpasser du XML'en til at vรฆlge en valgt gruppe fra de taggede klasser. Eksemplet nedenfor viser gruppedeklarationens syntaks.

<grupper>
<kรธre>
<omfatter navn="binding" />
</kรธre>
</grupper>

Antag, at en enkelt klasse indeholder 10 testmetoder.

Ud af disse metoder:

  • 6 metoder bรฆrer bonding gruppe, og
  • 4 metoder bรฆrer strong_ties gruppe.

Dernรฆst konfigurerer du Maven og Java stier og brug Eclipse IDE til at demonstrere gruppebrug gennem XML-filer inde i en Java-baseret Maven-projekt.

Opret XML til TestNG med tags

  • XML-filen (Extensible Markup Language) i Maven-frameworket gemmer konfigurationen for en eller flere tests, der er deklareret i tag.
  • Hver testindtastning er pakket ind i en mรฆrke og kan indeholde en eller flere TestNG klasser.
  • A Java klasse med en eller flere @Prรธve annotationer pรฅ dens metoder behandles som en TestNG klasse.

Flere tags vises i rรฆkkefรธlge for at opbygge en fungerende testng.xml-fil, nemlig , , og .

  • tag indeholder navnet pรฅ suite-niveau, der bruges i TestNG rapporter til udfรธrelsesresumรฉer.
  • <test name=โ€Guru 99 Rรธgtestdemoโ€> Tagget indeholder et logisk testnavn; rapporten bruger det til antallet af bestรฅede, ikke bestรฅede og oversprungne testpersoner plus den samlede udfรธrelsestid og gruppens metadata.
  • tag peger pรฅ testklassen, hvor com.group.guru99 er pakken og TC_Class1 er klassens navn.

<!DOKTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite navn="Suite">
<prรธve navn="Guru 99 Rรธgtestdemoโ€>
<grupper>
<kรธre>
<omfatter navn="stรฆrke_bรฅnd" />
</kรธre>
</grupper>
<klasser>
<klasse navn="com.group.guru99.TC_Class1" />
</klasser>
</prรธve>
</suite>

Denne XML-konfiguration refereres til i videogennemgangene i de nรฆste afsnit.

"exclude" eller "include" i test-XML

Hvis gruppemekanismen fรธles tung for et lille filter, giver testng.xml-pakken dig ogsรฅ mulighed for at ekskludere eller inkludere individuelle testmetoder efter navn.

Ekskluder tagSyntaks for ekskluderingstagudelukke navn="${TEST_CASE_NAME}" />
Inkluder tagSyntaks for include-taggetomfatter navn="${TEST_CASE_NAME}" />

Bemรฆrk: Du kan inkludere eller ekskludere mange testtilfรฆlde i en enkelt kรธrsel, og den samme syntaks gรฆlder for gruppefiltre.

Brug af dependsOnGroups til ordret udfรธrelse

Ud over almindelig inkludering, TestNG lader รฉn gruppe vรฆre afhรฆngig af en anden ved hjรฆlp af dependsOnGroups attribut. Lรธberen sikrer, at alle metoder i den overordnede gruppe afsluttes, fรธr en afhรฆngig metode starter, hvilket holder forudsรฆtningerne pรฅlidelige.

  • Log ind fรธrst, derefter transaktioner: Tag loginmetoder med group = "auth"og tagoverfรธrselstests med dependsOnGroups = {"auth"}Overfรธrselstestene kรธrer kun efter login er gennemfรธrt.
  • Spring over ved fejl: Hvis en metode i den overordnede gruppe fejler, TestNG markerer de afhรฆngige metoder som sprunget over i stedet for at fejle direkte, hvilket holder rapporterne รฆrlige.
  • Kombinรฉr med alwaysRun: Oprydningsmetoder bรธr indstilles alwaysRun = true sรฅ nedbrydningen fortsรฆtter, selv nรฅr en upstream-gruppe fejler.

Dette mรธnster er almindeligt for end-to-end-pakker, hvor API-opsรฆtningen skal fuldfรธres, fรธr UI-pรฅstande starter.

Kรธr TestNG Grupper, medtag, ekskludรฉr kode (videodemo)

Nedenfor er en gennemgang af Java kode og XML-pakken, der driver gruppere, ekskludere og inkludere adfรฆrd.

Testscenarie: Start Guru99 demobankside, bekrรฆft et par elementer pรฅ loginsiden, indtast legitimationsoplysninger, og bekrรฆft et par elementer pรฅ dashboardet igen efter login.

Kรธr TestNG Gruppรฉr, inkludรฉr, ekskludรฉr Code

Bemรฆrk: Hvert trin har sin egen metode, men rรฆkkefรธlgen afhรฆnger under kรธrsel af posterne i XML-pakken.

  • Metode 1: Initialiser browseren og start den URL (tc01LaunchURL()).
  • Metode 2: Bekrรฆft overskriften pรฅ loginsiden (tc02VerifyLaunchPage()).
  • Metode 3: Indtast brugernavn og adgangskode pรฅ loginformularen (tc03EnterCredentials()).
  • Metode 4: Bekrรฆft tilstedevรฆrelsen af โ€‹โ€‹Manager-ID'et pรฅ brugerdashboardet (tc04VerifyLoggedInPage()).
  • Metode 5: Bekrรฆft yderligere links pรฅ brugerdashboardet (tc05VerifyHyperlinks()).

Code for scenariet:

pakke com.gruppe.guru99;

importere java.util.concurrent.TimeUnit;

importere org.openqa.selenium.By;
importere org.openqa.selenium.WebDriver;
importere org.openqa.selenium.firefox.FirefoxChauffรธrer;
importere org.testng.Assert;
importere org.testng.annotations.Test;

offentlig klasse TC_Klasse1 {
offentlig statisk finale webdriver webDriver = ny FirefoxChauffรธr();

String startSideOverskrift = "//h3[tekst()='Guru99 Bank]โ€;
endelige String brugernavn_element = "//input[@navn='uid']", adgangskodeelement = "//indtast[@navn='adgangskode']",
login_element = "//input[@navn='btnLogin']";
endelige String brugernavn_vรฆrdi = "mngr28642", adgangskodevรฆrdi = "ydAnate";
endelige String leder-ID = "//td[indeholder(tekst(),'Leder-ID')]";
endelige String nyKunde = "//a[@href='tilfรธjkundeside.php']", fondsoverfรธrsel = "//a[@href='FundTransInput.php']";

/** Denne testcase initialiserer webDriveren */
@Prรธve(grupper = { "binding", "stรฆrke_bรฅnd" })
offentligt tomrum tc01LaunchURL() {
webDriver.manage().window().maximize();
webDriver.manage().timeouts().implicitWait(20, Tidsenhed.SEKUNDER);
webDriver.get("https://www.demo.guru99.com/V4/");
}

/** Kontrollerer tilstedevรฆrelsen af โ€‹โ€‹overskriften pรฅ loginsiden */
@Prรธve(grupper = { "binding" })
offentligt tomrum tc02VerifyLaunchPage() {
Assert.assertTrue(webDriver.findElement(By.xpath(launchPageHeading)).isDisplayed(),
"Overskriften pรฅ hjemmesiden vises ikke");
System.out.println("Overskriften for hjemmesiden vises");
}

/** Indtaster brugernavn og adgangskode og klikker derefter pรฅ login */
@Prรธve(grupper = { "binding", "stรฆrke_bรฅnd" })
offentligt tomrum tc03EnterCredentials() {
webDriver.findElement(By.xpath(brugernavn_element)).sendKeys(brugernavn_vรฆrdi);
webDriver.findElement(By.xpath(password_element)).sendKeys(password_value);
webDriver.findElement(By.xpath(signIn_element)).klik();
}

/** Bekrรฆfter manager-ID'et pรฅ dashboardet */
@Prรธve(grupper = { "stรฆrke_bรฅnd" })
offentligt tomrum tc04VerifyLoggedInPage() {
Assert.assertTrue(webDriver.findElement(By.xpath(managerID)).isDisplayed(),
"Leder-ID-mรฆrkat vises ikke");
System.out.println("Manager-ID-mรฆrkat vises");
}

/** Tjekker linket Ny kunde og linket FundTransfer pรฅ dashboardet */
@Prรธve(grupper = { "binding" })
offentligt tomrum tc05VerifyHyperlinks() {
Assert.assertTrue(webDriver.findElement(By.xpath(newCustomer)).isEnabled(),
"Nyt kundehyperlink vises ikke");
System.out.println("Nyt kundehyperlink vises");

Assert.assertTrue(webDriver.findElement(By.xpath(fundTransfer)).isEnabled(),
"Hyperlink til pengeoverfรธrsel vises ikke");
System.out.println("Hyperlink til pengeoverfรธrsel vises");
}
}

Bemรฆrk: Demobankoplysningerne forbliver gyldige i cirka 20 dage, sรฅ en lokal kรธrsel kan vise en fejlmeddelelse om ugyldige legitimationsoplysninger, nรฅr dette vindue er udlรธbet.

Forklaring af koden:

Fem testmetoder, รฉn pr. handling, har hver en groups attribut pรฅ @Test anmรฆrkning.

De to logiske gruppebetegnelser er strong_ties og bonding.

  • Den fรธrste og tredje metode anvender begge bonding og strong_ties, sรฅ de kรธrer, nรฅr en af โ€‹โ€‹grupperne er inkluderet i pakken. Dette er et almindeligt mรธnster for delte test sag trin.
  • Den anden metode er kun mรฆrket med bonding, sรฅ den kรธrer kun nรฅr bonding gruppen er inkluderet.
  • Den fjerde metode er kun mรฆrket med strong_ties, sรฅ den kรธrer kun, nรฅr den pรฅgรฆldende gruppe er inkluderet.
  • Den femte metode er kun mรฆrket med bonding, sรฅ den kรธrer kun nรฅr bonding gruppen er inkluderet.

Fire udfรธrelsesscenarier fรธlger:

Scenario 1: Kรธr alle testmetoder uanset gruppe. Fjern <groups> blok fra den kรธrende XML.

Scenario 2: Kรธr kun metoder knyttet til en valgt gruppe, nemlig strong_ties or bondingSe venligst videoen nedenfor.

  • I den fรธrste del af videoen, <groups> Blokken kommenteres ud, sรฅ alle testmetoder kรธrer.
  • I den anden del gendannes gruppefilteret, og kun de matchende metoder kรธrer.

Scenario 3: Anvend ekskluderingsfilteret for at springe udvalgte testtilfรฆlde over. Se videoen.

  • Demoen udelukker tc02 efter navn i den kรธrende XML, og resultatrapporten bekrรฆfter, at den udeladte metode ikke kรธrer.

Scenario 4: Anvend inkluderingsfilteret til kun at kรธre tc01LaunchURL, tc03EnterCredentialsog tc05VerifyHyperlinksSe venligst videoen.

I denne kรธrsel udfรธres kun de metoder, der er angivet i include-filteret, nรธjagtigt som konfigureret.

Download eksempelprojektet fra linket nedenfor.

Download ovenstรฅende Code

Konklusion

Grupper i TestNG bringe struktur til det store Selenium og enhedssuiter ved at erstatte engangsklasseopdelinger med deklarative XML-filtre.

Mรฆrk dine metoder med @Test(groups = {...}), brug derefter <include>, <exclude>og dependsOnGroups at drive rรธg, regression og end-to-end-kรธrsler fra det samme Maven-projekt pรฅ TestNG 7.x.

Ofte Stillede Spรธrgsmรฅl

En gruppe er en logisk betegnelse, der er knyttet til en testmetode via groups attribut pรฅ @TestXML-pakken vรฆlger derefter grupper ved hjรฆlp af inkluderings- og ekskluderingsfiltre, sรฅ du bestemmer under kรธrsel, hvilke taggede metoder der udfรธres.

Indendรธrs <groups><run>, <include name="..."> tag hvidlistegrupper for kรธrslen, og <exclude name="..."> blokerer dem. TestNG anvender ekskluderinger efter inkluderinger, sรฅ en ekskluderet gruppe altid springes over, selv nรฅr den ogsรฅ er angivet i inkludering.

dependsOnGroups attribut pรฅ @Test krรฆfter TestNG at kรธre alle metoder i den anfรธrte gruppe, fรธr den afhรฆngige metode starter. Hvis en forudsat metode fejler, TestNG markerer den afhรฆngige metode som sprunget over i stedet for mislykket.

Ja. Det groups attributten accepterer et array, sรฅ @Test(groups = {"smoke", "regression"}) placerer รฉn metode i begge grupper. TestNG kรธrer den metode, nรฅr en af โ€‹โ€‹grupperne er inkluderet i pakken, hvilket holder delte trin Tร˜RE.

TestNG 7.x er den vedligeholdte linje, med udgivelser under org.testng:testng Maven-koordinatsystem. Det holder grupper, parallel udfรธrelse og lyttere fuldt kompatible med moderne Selenium 4 og JDK 17 projekter.

AI-test-impact-vรฆrktรธjer analyserer kodeforskelle og knytter derefter รฆndrede klasser til de grupper, der dรฆkker dem. Pipelinen kรธrer kun de taggede grupper pรฅ hver pull request, hvilket reducerer feedbacktiden, samtidig med at den holderping risikable stier under afprรธvning.

Ja. AI-klyngealgoritmer lรฆser historiske fejllogfiler, markerer ustabile tests og foreslรฅr et stabilt delmรฆngde tagget som regressionIngeniรธrerne godkender derefter listen TestNG kรธrer den gruppe hver nat, hvilket holder suiten tรฆt uden at miste dรฆkningen.

Opsummer dette indlรฆg med: