Grupuri în TestNG
⚡ Rezumat inteligent
Grupuri în TestNG vă permit să etichetați metodele de testare cu etichete logice, apoi să le includeți sau să le excludeți printr-o suită XML. Această abordare simplifică rulările bazate pe fum, regresie și dependențe fără rescriere Java cod.
TestNG este un framework de testare care acoperă teste unitare, funcționale, end-to-end, UI și de integrare pentru Java proiecte.
Puteți rula un singur pachet sau mai multe pachete (un pachet încapsulează clase corelate într-un layout de director definit) prin crearea unei suite XML și declanșarea acesteia prin Maven.
TestNG Grupuri cu Exemplu
Folosești grupuri în TestNG cand:
- Nu doriți să împrăștiați metodele de testare în mai multe clase doar după domeniul funcțional și
- Vrei să sari peste (nu să execuți) cazurile de testare selectate ca și cum acestea ar lipsi din baza de cod.
- Pentru a atinge ambele obiective, etichetați metodele în grupuri logice. TestNG apoi onorează filtrele „include” și „exclude” declarate în suita XML.
Fragmentul de mai jos prezintă sintaxa de etichetare a grupurilor utilizată într-o metodă de testare.
Aici se folosesc două nume de grup, și anume bonding și strong_tiesAcestea sunt etichete logice pe care le puteți redenumi pentru a se potrivi proiectului dumneavoastră.
<groups> marchează începutul filtrelor de grup în cadrul suitei XML.
Apoi personalizați fișierul XML pentru a selecta un grup ales din clasele etichetate. Exemplul de mai jos prezintă sintaxa de declarare a grupului.
<alerga>
<include nume=„legătură” />
</alerga>
</Grupuri>
Presupunem că o singură clasă conține 10 metode de testare.
Dintre aceste metode:
- 6 metode poartă
bondinggrup, și - 4 metode poartă
strong_tiesgrup.
Apoi, configurați Maven și Java căi și folosiți Eclipse IDE pentru a demonstra utilizarea grupurilor prin fișiere XML într-un Javaproiect Maven bazat pe .
Creați XML pentru TestNG Cu etichete
- Fișierul XML (Extensible Markup Language) din framework-ul Maven stochează configurația pentru unul sau mai multe teste, declarate în interiorul etichetă.
- Fiecare intrare la test este înfășurată într-o etichetă și poate conține una sau mai multe TestNG clase.
- A Java clasă cu unul sau mai multe @Test adnotările privind metodele sale sunt tratate ca o TestNG clasă.
Mai multe etichete apar în secvență pentru a construi un fișier testng.xml funcțional, și anume , și .
- eticheta conține numele la nivel de suită utilizat în TestNG rapoarte pentru rezumatele execuției.
- <test name=”Guru „Demonstrație test 99 cu fum”> Eticheta conține un nume logic al testului; raportul îl folosește pentru numărătoarea de teste acceptate, eșuate și omise, plus timpul total de execuție și metadatele grupului.
- eticheta indică clasa de test, unde
com.group.guru99este pachetul șiTC_Class1este numele clasei.
<!DOCTIP suită SISTEM „http://testng.org/testng-1.0.dtd”>
<suită nume="Suită">
<test nume= Guru „Demonstrație test 99 cu fum”>
<Grupuri>
<alerga>
<include nume=„legături_puternice” />
</alerga>
</Grupuri>
<clase>
<clasă nume=„com.group.guru99.TC_Class1” />
</clase>
</test>
</suită>
Această configurație XML este menționată în tutorialele video din secțiunile următoare.
„exclude” sau „include” în XML de testare
Dacă mecanismul de grupare pare dificil pentru un filtru mic, suita testng.xml vă permite, de asemenea, să excludeți sau să includeți metode de testare individuale după nume.
Includeți etichetaSintaxa pentru eticheta de includereinclude nume=„${TEST_CASE_NAME}” />
Notă: Puteți include sau exclude mai multe cazuri de testare într-o singură rulare, iar aceeași sintaxă se aplică filtrelor de grup.
Utilizarea dependsOnGroups pentru execuție ordonată
Dincolo de simpla includere, TestNG permite unui grup să depindă de altul folosind dependsOnGroups atribut. Runner-ul asigură că fiecare metodă din grupul părinte se termină înainte de începerea oricărei metode dependente, ceea ce menține fiabilitatea precondițiilor.
- Mai întâi conectați-vă, apoi tranzacțiile: Etichetează metodele de autentificare cu
group = "auth"și teste de transfer de etichete cudependsOnGroups = {"auth"}Testele de transfer rulează numai după ce autentificarea este reușită. - Sari peste eșec: Dacă o metodă din grupul părinte eșuează, TestNG marchează metodele dependente ca omise în loc să le eșueze complet, ceea ce menține rapoartele corecte.
- Combină cu alwaysRun: Metodele de curățare ar trebui stabilite
alwaysRun = trueDeci, demontarea rulează chiar și atunci când un grup din amonte eșuează.
Acest model este comun pentru suitele end-to-end unde configurarea API-ului trebuie finalizată înainte de declanșarea aserțiunilor UI.
Alerga TestNG Grupați, includeți, excludeți codul (demo video)
Mai jos este o prezentare generală a Java codul și suita XML care definesc grupare, excludere și includere comportament.
Scenariul de testare: Lansarea Guru99 site bancar demonstrativ, verificați câteva elemente de pe pagina de conectare, introduceți datele de autentificare și verificați din nou câteva elemente de pe tabloul de bord după conectare.
Notă: Fiecare pas își are propria metodă, dar la momentul execuției ordinea depinde de intrările din suita XML.
- Metoda 1: Inițializați browserul și lansați URL (
tc01LaunchURL()). - Metoda 2: Verificați antetul paginii de conectare (
tc02VerifyLaunchPage()). - Metoda 3: Introduceți numele de utilizator și parola în formularul de conectare (
tc03EnterCredentials()). - Metoda 4: Verificați prezența ID-ului de manager pe tabloul de bord al utilizatorului (
tc04VerifyLoggedInPage()). - Metoda 5: Verificați linkurile suplimentare din tabloul de bord al utilizatorului (
tc05VerifyHyperlinks()).
Code pentru scenariul:
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxȘoferi;
import org.testng.Assert;
import org.testng.annotations.Test;
clasa publica TC_Clasa1 {
final static public webdriver webDriver = nou FirefoxŞofer,
Şir lansareAntPagină = „//h3[text()='Guru„99 Bank’]”;
final Şir nume_utilizator = „//input[@nume='uid']”, element_parolă = „//input[@name='parolă']”,
element_semnalizare = „//input[@nume='btnLogin']”;
final Şir valoare_nume_utilizator = „mngr28642”, valoare_parolă = „ydAnate”;
final Şir ID manager = „//td[conține(text(),'ID manager')]”;
final Şir Client nou = „//a[@href='addcustomerpage.php']”, TransferDeFonduri = „//a[@href='FundTransInput.php']”;
/** Acest caz de testare inițializează webDriver-ul */
@Test(Grupuri = { „legătură”, „legături_puternice” })
vid public Lansare tc01URL() {
webDriver.manage().window().maximize();
webDriver.manage().timeouts().implicitWait(20, UnitateDeTimp.Secunde);
webDriver.get(„https://www.demo.guru99.com/V4/”);
}
/** Verifică prezența titlului pe pagina de autentificare */
@Test(Grupuri = { „legătură” })
vid public tc02VerificăPaginaLansării() {
Assert.assertTrue(webDriver.findElement(By.xpath(launchPageHeading)).isDisplayed(),
„Antetul paginii principale nu este afișat”);
System.out.println(„Se afișează titlul paginii principale”);
}
/** Introduce numele de utilizator, parola, apoi dă clic pe Autentificare */
@Test(Grupuri = { „legătură”, „legături_puternice” })
vid public tc03Introduceți acreditări() {
webDriver.findElement(By.xpath(numeUtilizator_element)).sendKeys(numeUtilizator_valoare);
webDriver.findElement(By.xpath(element_parolă)).sendKeys(valoare_parolă);
webDriver.findElement(By.xpath(element_semnalizare)).click();
}
/** Verifică ID-ul managerului în tabloul de bord */
@Test(Grupuri = { „legături_puternice” })
vid public tc04VerificăPaginaAutentificată() {
Assert.assertTrue(webDriver.findElement(By.xpath(managerID)).isDisplayed(),
„Eticheta de ID manager nu este afișată”);
System.out.println(„Eticheta cu ID-ul managerului este afișată”);
}
/** Verifică linkul pentru clienți noi și linkul pentru FundTransfer în tabloul de bord */
@Test(Grupuri = { „legătură” })
vid public tc05VerificăHyperlink-uri() {
Assert.assertTrue(webDriver.findElement(By.xpath(newCustomer)).isEnabled(),
„Helplinkul clientului nou nu este afișat”);
System.out.println(„Se afișează un hyperlink pentru client nou”);
Assert.assertTrue(webDriver.findElement(By.xpath(fundTransfer)).isEnabled(),
„Hyperlinkul Transfer de fonduri nu este afișat”);
System.out.println(„Se afișează hyperlinkul Transfer de fonduri”);
}
}
Rețineți: acreditările bancare demo rămân valabile timp de aproximativ 20 de zile, așadar o rulare locală poate afișa o eroare de acreditări invalide după expirarea acestei ferestre.
Explicația codului:
Cinci metode de testare, câte una per acțiune, fiecare conținând un groups atribut pe @Test adnotare.
Cele două etichete logice ale grupurilor sunt strong_ties și bonding.
- Prima și a treia metodă le poartă pe amândouă
bondingșistrong_ties, astfel încât acestea rulează ori de câte ori oricare dintre grupuri este inclus în suită. Acesta este un model comun pentru partajate caz de testare pași. - A doua metodă este etichetată doar cu
bonding, deci rulează doar atunci cândbondinggrupul este inclus. - A patra metodă este etichetată doar cu
strong_ties, deci rulează numai atunci când grupul respectiv este inclus. - A cincea metodă este etichetată doar cu
bonding, deci rulează doar atunci cândbondinggrupul este inclus.
Urmează patru scenarii de execuție:
Scenariul 1: Executați fiecare metodă de testare indiferent de grup. Eliminați <groups> bloc din XML-ul care rulează.
Scenariul 2: Execută doar metode legate de un grup ales, și anume strong_ties or bondingVă rugăm să consultați videoclipul de mai jos.
- În prima parte a videoclipului,
<groups>Blocul este comentat, deci rulează fiecare metodă de testare. - În a doua parte, filtrul de grup este restaurat și rulează doar metodele corespondente.
Scenariul 3: Aplicați filtrul de excludere pentru a omite cazurile de testare selectate. Vă rugăm să consultați videoclipul.
- Demonstrația exclude
tc02după nume în fișierul XML care rulează, iar raportul de rezultate confirmă că metoda exclusă nu rulează.
Scenariul 4: Aplicați filtrul de includere doar pentru a rula tc01LaunchURL, tc03EnterCredentials și tc05VerifyHyperlinksVă rugăm să consultați videoclipul.
În această rulare, se execută doar metodele listate în filtrul de includere, exact așa cum sunt configurate.
Descărcați proiectul exemplu de la linkul de mai jos.
Descărcați cele de mai sus Code
Concluzie
Grupuri în TestNG aduce structura la scară largă Selenium și suite de unități prin înlocuirea divizărilor unice de clase cu filtre XML declarative.
Etichetați-vă metodele cu @Test(groups = {...}), apoi folosiți <include>, <exclude> și dependsOnGroups pentru a genera fum, regresie și rulări end-to-end din același proiect Maven pe TestNG 7.x.


