Gruppi in TestNG
โก Riepilogo intelligente
Gruppi in TestNG Consente di etichettare i metodi di test con etichette logiche, per poi includerli o escluderli tramite una suite XML. Questo approccio semplifica i test di smoke test, di regressione e di dipendenza senza riscrivere Java codice.
TestNG รจ un framework di test che copre test unitari, funzionali, end-to-end, dell'interfaccia utente e di integrazione per Java
ร possibile eseguire un singolo pacchetto o piรน pacchetti (un pacchetto incapsula classi correlate in una struttura di directory definita) creando una suite XML e attivandola tramite Maven.
TestNG Gruppi con esempio
Si utilizzano i gruppi in TestNG quando:
- Non si desidera disperdere i metodi di test in molte classi esclusivamente in base all'area funzionale e
- Si desidera saltare (non eseguire) i casi di test selezionati come se fossero assenti dal codice sorgente.
- Per raggiungere entrambi gli obiettivi, si raggruppano i metodi in categorie logiche. TestNG quindi rispetta i filtri โincludiโ ed โescludiโ dichiarati nella suite XML.
Il frammento di codice seguente mostra la sintassi di raggruppamento dei tag utilizzata in un metodo di test.
Qui vengono utilizzati due nomi di gruppo, vale a dire bonding and strong_tiesSi tratta di etichette logiche che puoi rinominare in base alle esigenze del tuo progetto.
Migliori <groups> Il tag indica l'inizio dei filtri di gruppo all'interno della suite XML.
Successivamente, si personalizza il file XML per selezionare un gruppo specifico tra le classi contrassegnate. L'esempio seguente mostra la sintassi per la dichiarazione del gruppo.
<eseguire il>
<includere Nome=โlegameโ />
</eseguire il>
</gruppi>
Supponiamo che una singola classe contenga 10 metodi di test.
Tra questi metodi:
- 6 metodi portano il
bondinggruppo e - 4 metodi portano il
strong_tiesgruppo.
Successivamente, si configura Maven e Java percorsi e utilizzare il Eclipse IDE per dimostrare l'utilizzo del gruppo tramite file XML all'interno di un Java- progetto Maven.
Crea XML per TestNG con le etichette
- Il file XML (Extensible Markup Language) nel framework Maven memorizza la configurazione per uno o piรน test, dichiarati all'interno del etichetta.
- Ogni voce del test รจ avvolta in un etichetta e puรฒ contenerne uno o piรน TestNG classi.
- A Java classe con uno o piรน @Test le annotazioni sui suoi metodi sono trattate come un TestNG classe.
Per costruire un file testng.xml funzionante, vengono visualizzati in sequenza piรน tag, vale a dire: , , E .
- Migliori il tag contiene il nome a livello di suite utilizzato in TestNG report per i riepiloghi di esecuzione.
- Migliori <test name=โGuru 99 Test di fumo dimostrativoโ> Il tag contiene un nome logico per il test; il report lo utilizza per il conteggio dei test superati, falliti e saltati, oltre al tempo totale di esecuzione e ai metadati di gruppo.
- Migliori Il tag punta alla classe di test, dove
com.group.guru99รจ il pacchetto eTC_Class1รจ il nome della classe.
<!DOCTYPE suite SISTEMA โhttp://testng.org/testng-1.0.dtdโ>
<suite Nome="Suite">
<test Nome="Guru 99 Test di fumo dimostrativoโ>
<gruppi>
<eseguire il>
<includere Nome=โlegami fortiโ />
</eseguire il>
</gruppi>
<classi>
<classe Nome=โcom.group.guru99.TC_Class1โ />
</classi>
</test>
</suite>
Questa configurazione XML viene illustrata nei video tutorial nelle sezioni successive.
"escludere" o "includere" nell'XML di prova
Se il meccanismo di raggruppamento risulta troppo complesso per un filtro di piccole dimensioni, la suite testng.xml consente anche di escludere o includere singoli metodi di test specificandone il nome.
Includi tag: Sintassi per il tag includeincludere Nome=โ${TEST_CASE_NAME}โ />
Nota: ร possibile includere o escludere molti casi di test in una singola esecuzione, e la stessa sintassi si applica ai filtri di gruppo.
Utilizzo di dependsOnGroups per l'esecuzione ordinata
Al di lร della semplice inclusione, TestNG consente a un gruppo di dipendere da un altro utilizzando il dependsOnGroups attributo. Il runner garantisce che ogni metodo nel gruppo padre termini prima che inizi qualsiasi metodo dipendente, il che mantiene affidabili le precondizioni.
- Prima effettua il login, poi le transazioni: Tagga i metodi di accesso con
group = "auth"e test di trasferimento tag condependsOnGroups = {"auth"}I test di trasferimento vengono eseguiti solo dopo che l'accesso รจ andato a buon fine. - Salta in caso di errore: Se un metodo nel gruppo padre fallisce, TestNG contrassegna i metodi dipendenti come ignorati anzichรฉ come fallimenti diretti, garantendo cosรฌ l'accuratezza dei report.
- Da abbinare ad alwaysRun: I metodi di pulizia dovrebbero essere impostati
alwaysRun = truequindi la procedura di pulizia continua a essere eseguita anche quando un gruppo a monte fallisce.
Questo schema รจ comune per le suite end-to-end in cui la configurazione delle API deve essere completata prima che inizino le asserzioni dell'interfaccia utente.
Correre TestNG Raggruppa, includi, escludi codice (video demo)
Di seguito รจ riportata una guida dettagliata Java codice e la suite XML che guidano il raggruppare, escludere e includere comportamento.
Scenario di prova: Avviare il Guru99 sito demo di banking, verifica alcuni elementi nella pagina di accesso, inserisci le credenziali e riverifica alcuni elementi nella dashboard dopo l'accesso.
Nota: Ogni passaggio risiede in un metodo separato, ma in fase di esecuzione l'ordine dipende dalle voci presenti nella suite XML.
- Metodo 1: Inizializza il browser e avvia il URL (
tc01LaunchURL()). - Metodo 2: Verificare l'intestazione della pagina di accesso (
tc02VerifyLaunchPage()). - Metodo 3: Inserisci nome utente e password nel modulo di accesso (
tc03EnterCredentials()). - Metodo 4: Verificare la presenza dell'ID Manager nella dashboard utente (
tc04VerifyLoggedInPage()). - Metodo 5: Verificare i collegamenti aggiuntivi nella dashboard utente (
tc05VerifyHyperlinks()).
Code per lo scenario:
importare java.util.concurrent.TimeUnit;
importare org.openqa.selenium.By;
importare org.openqa.selenium.WebDriver;
importare org.openqa.selenium.firefox.FirefoxAutista;
importare org.testng.Assert;
importare org.testng.annotations.Test;
classe pubblica TC_Class1 {
finale statica pubblica webdriver webDriver = new FirefoxGuidatore();
Corda launchPageHeading = โ//h3[text()='Guru99 Bank']โ;
finale Corda elemento_nomeutente = โ//input[@name='uid']โ, elemento_password = โ//input[@name='password']โ,
elemento_di_accesso = โ//input[@name='btnLogin']โ;
finale Corda userName_value = โmngr28642โ, valore_password = โydAnateโ;
finale Corda managerID = โ//td[contains(text(),'ID del responsabile')]โ;
finale Corda nuovoCliente = โ//a[@href='addcustomerpage.php']โ, trasferimento fondi = โ//a[@href='FundTransInput.php']โ;
/** Questo caso di test inizializza il webDriver */
@Test(gruppi = { โlegameโ, โlegami fortiโ })
vuoto pubblico tc01LaunchURL() {
webDriver.manage().window().maximize();
webDriver.manage().timeouts().implicitlyWait(20, Unitร di tempo SECONDI);
webDriver.get(โhttps://www.demo.guru99.com/V4/โ);
}
/** Verifica la presenza dell'intestazione nella pagina di accesso */
@Test(gruppi = { โlegameโ })
vuoto pubblico tc02VerifyLaunchPage() {
Assert.assertTrue(webDriver.findElement(By.xpath(launchPageHeading)).isDisplayed(),
L'intestazione della pagina iniziale non viene visualizzata.);
System.out.println("Viene visualizzata l'intestazione della pagina iniziale");
}
/** Inserisce nome utente e password, quindi fa clic su Accedi */
@Test(gruppi = { โlegameโ, โlegami fortiโ })
vuoto pubblico tc03EnterCredentials() {
webDriver.findElement(By.xpath(userName_element)).sendKeys(userName_value);
webDriver.findElement(By.xpath(password_element)).sendKeys(password_value);
webDriver.findElement(By.xpath(signIn_element)).click();
}
/** Verifica l'ID del responsabile sulla dashboard */
@Test(gruppi = { โlegami fortiโ })
vuoto pubblico tc04VerifyLoggedInPage() {
Assert.assertTrue(webDriver.findElement(By.xpath(managerID)).isDisplayed(),
"L'etichetta ID responsabile non viene visualizzata");
System.out.println("Viene visualizzata l'etichetta ID responsabile");
}
/** Verifica il link "Nuovo cliente" e il link "Trasferimento fondi" nella dashboard */
@Test(gruppi = { โlegameโ })
vuoto pubblico tc05VerifyHyperlinks() {
Assert.assertTrue(webDriver.findElement(By.xpath(newCustomer)).isEnabled(),
Il collegamento ipertestuale per i nuovi clienti non viene visualizzato.);
System.out.println("Viene visualizzato il collegamento ipertestuale per i nuovi clienti");
Assert.assertTrue(webDriver.findElement(By.xpath(fundTransfer)).isEnabled(),
Il collegamento ipertestuale per il trasferimento fondi non viene visualizzato.);
System.out.println("Viene visualizzato il collegamento ipertestuale per il trasferimento fondi");
}
}
Nota bene: le credenziali di accesso alla demo bancaria rimangono valide per circa 20 giorni, pertanto, una volta scaduto tale periodo, un'esecuzione in locale potrebbe visualizzare un errore di credenziali non valide.
Spiegazione del codice:
Cinque metodi di prova, uno per azione, ciascuno dei quali comporta un groups attributo sul @Test annotazione.
Le due etichette di gruppo logico sono strong_ties and bonding.
- Il primo e il terzo metodo comportano entrambi
bondingandstrong_ties, quindi vengono eseguiti ogni volta che uno dei due gruppi รจ incluso nella suite. Questo รจ uno schema comune per la condivisione caso di prova gradini. - Il secondo metodo รจ contrassegnato solo con
bonding, quindi viene eseguito solo quandobondingil gruppo รจ incluso. - Il quarto metodo รจ etichettato solo con
strong_ties, quindi viene eseguito solo quando quel gruppo รจ incluso. - Il quinto metodo รจ etichettato solo con
bonding, quindi viene eseguito solo quandobondingil gruppo รจ incluso.
Seguono quattro scenari di esecuzione:
Scenario 1: Eseguire ogni metodo di test indipendentemente dal gruppo. Rimuovere il <groups> blocco dal file XML in esecuzione.
Scenario 2: Eseguire solo i metodi legati al gruppo scelto, vale a dire strong_ties or bondingSi prega di fare riferimento al video qui sotto.
- Nella prima parte del video, il
<groups>Il blocco รจ commentato, quindi tutti i metodi di test vengono eseguiti. - Nella seconda parte, il filtro di gruppo viene ripristinato e vengono eseguiti solo i metodi corrispondenti.
Scenario 3: Applica il filtro di esclusione per saltare i casi di test selezionati. Fai riferimento al video.
- La demo esclude
tc02per nome nell'XML in esecuzione e il report dei risultati conferma che il metodo escluso non viene eseguito.
Scenario 4: Applica il filtro di inclusione per eseguire solo tc01LaunchURL, tc03EnterCredentialse tc05VerifyHyperlinksSi prega di fare riferimento al video.
In questa esecuzione, vengono eseguiti solo i metodi elencati nel filtro di inclusione, esattamente come configurato.
Scarica il progetto di esempio dal link sottostante.
Conclusione
Gruppi in TestNG portare struttura a grandi Selenium e suite di unitร sostituendo le suddivisioni di classe una tantum con filtri XML dichiarativi.
Etichetta i tuoi metodi con @Test(groups = {...}), quindi utilizzare <include>, <exclude>e dependsOnGroups per condurre test di fumo, regressione e test end-to-end dallo stesso progetto Maven su TestNG 7.x.


