TestNG Tutorial
โก Riepilogo intelligente
TestNG รจ di nuova generazione Java framework di test che si abbina con Selenium per l'automazione strutturata, la creazione di report dettagliati e l'esecuzione parallela. Questo tutorial illustra le annotazioni principali e la configurazione del progetto in Eclipse, scrivendo il primo caso di test, report HTML e utilizzo avanzato dei parametri.
Cosa รจ TestNG?
TestNG รจ un framework di test automatizzato in cui "NG" sta per "Next Generation" (Nuova generazione). TestNG รจ ispirato da JUnit e usi Java annotazioni (@) per controllare il flusso di test. Supera JUnit's precedenti limitazioni ed รจ progettato per rendere test end-to-end Piรน facile.
Con TestNG ร possibile generare un report dettagliato e visualizzare immediatamente quanti test sono stati superati, falliti o saltati. ร anche possibile rieseguire solo i casi falliti.
Per esempio:
- Supponiamo di avere cinque casi di test, ciascuno nel proprio metodo, scritti senza TestNGTre tentativi vanno a buon fine; il quarto fallisce. Dopo aver corretto il quarto, si desidera rieseguire solo quello, dato che i primi tre sono giร andati a buon fine. Questo รจ difficile da fare con il semplice codice del metodo main().
- TestNG fornisce un
testng-failed.xmlfile nellatest-outputcartella. L'esecuzione di quel file XML riesegue solo i casi falliti.
Oltre a ciรฒ, imparerai i vantaggi di TestNG, come scrivere metodi di test con annotazioni @Test e come convertire le tue classi in una suite di test che viene eseguita da Eclipse o dalla riga di comando.
Perchรฉ usare TestNG con Selenium?
Per impostazione predefinita, Selenium I test non producono risultati ben formattati. Con TestNG Una volta collegato, il test runner genera un report strutturato che รจ possibile condividere con il team.
ponte Selenium gli utenti preferiscono TestNG ancora JUnit grazie al suo set di funzionalitร piรน ampio. Le caratteristiche principali per Selenium siamo:
- Report che includono il numero di casi di test eseguiti, superati, falliti e saltati.
- Gruppo facileping di casi di test tramite un
testng.xmlfile, con prioritร di esecuzione. - Ripeti un test piรน volte senza cicli utilizzando
invocationCount. - Esegui piรน test su piรน browser โ cross-test del browser supporto.
- Integrazione fluida con Maven, Jenkinse altri strumenti di integrazione continua (CI).
- Readable annotazioni โ ad esempio, @BeforeMethod, @AfterMethod, @BeforeTest, @AfterTest.
- Selenium WebDriver non dispone di funzionalitร di reporting native; TestNG colma quella lacuna con un report HTML pulito come quello qui sotto.
- TestNG Semplifica il codice di test. Non รจ piรน necessario un metodo main statico; le annotazioni decidono cosa viene eseguito e quando.
- Le eccezioni non gestite vengono gestite con grazia da TestNGVengono segnalati come passaggi non riusciti senza interrompere l'intera esecuzione.
Vantaggi di TestNG ancora JUnit
TestNG Offre tre vantaggi principali rispetto a JUnit:
- Le annotazioni sono piรน facili da comprendere e utilizzare.
- I casi di test possono essere raggruppati e classificati in ordine di prioritร con meno sforzo.
- L'esecuzione parallela dei test รจ supportata nativamente.
Che cos'รจ un'annotazione in TestNG?
Annotazioni in TestNG sono righe di codice poste sopra un metodo per controllarne l'esecuzione. Iniziano sempre con il simbolo @. Un semplice esempio รจ mostrato qui sotto.
Le annotazioni sono trattate in dettaglio nella sezione โAnnotazioni utilizzate in TestNG". Piรน avanti in questo tutorial, quindi l'esempio sopra serve solo a chiarire le aspettative. TestNG le annotazioni sono piรน facili da codificare e leggere rispetto alle JUnit equivalenti, e sono essenziali quando si eseguono test su Selenium Griglia dove l'esecuzione parallela รจ importante.
Come scrivere casi di test in TestNG
Scrivi TestNG Il caso di test si articola in tre fasi:
- Scrivi la tua logica aziendale e posizionala TestNG annotazioni sopra ciascun metodo.
- Aggiungi metadati come il nome della classe, il nome del gruppo e il nome del pacchetto.
- Corri il TestNG classe dal tuo IDE o dalla riga di comando.
Crea un caso di test utilizzando TestNG Annotazioni
Ora creeremo il nostro primo caso di test utilizzando TestNG annotazioni in Selenium. Prima di scrivere il test, imposta un nuovo TestNG progetto in Eclipse e chiamalo NomeTestNGProgetto.
Configurazione di un nuovo TestNG Progetto
Passo 1) Clicchi File > Nuovo > Java Progetto.
Passo 2) entra NomeTestNGProgetto come nome del progetto e fai clic Avanti.
Passo 3) Importa il TestNG biblioteche. Fare clic su Biblioteche scheda e poi Aggiungi alla libreriaโฆ.
Passo 4) Nel Aggiungi libreria dialogo, scegliere TestNG e fare clic su Avanti.
Passo 5) Clicchi Finitura.
TestNG Ora dovrebbe comparire nell'elenco delle biblioteche.
Passo 6) Aggiungi i file JAR che contengono Selenium API. Questi provengono dall' Java driver client scaricato da selenium.dev/downloads.
Vai alla cartella in cui si trova Selenium I file JAR vengono memorizzati.
Dopo aver aggiunto i file JAR esterni, la schermata dovrebbe apparire cosรฌ.
Passo 7) Clicchi Finitura. La nuova NomeTestNGProgetto appare in Esplora pacchetti.
Come crearne uno nuovo TestNG File di prova
Con il progetto pronto, crea un nuovo TestNG file.
Passo 1) Fare clic con il tasto destro del mouse su src cartella e scegliere Nuovo > Altroโฆ.
Passo 2) espandere la TestNG cartella, selezionare TestNG classee fare clic Avanti.
Passo 3) Inserisci i valori mostrati di seguito e fai clic Finitura. Java il file si chiama NomeTestNGCompila il .
Passo 4) Eclipse genera il TestNG modello mostrato di seguito.
Programmare il tuo primo TestNG Test Case
Crea il primo caso di prova che verifica il titolo del Mercury Home page dei tour.
package firsttestngpackage;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.Assert;
import org.testng.annotations.Test;
public class FirstTestNGFile {
public String baseUrl = "https://demo.guru99.com/test/newtours/";
public WebDriver driver;
@Test
public void verifyHomepageTitle() {
System.out.println("launching firefox browser");
// Selenium 4 ships Selenium Manager, so the driver path is no longer required.
driver = new FirefoxDriver();
driver.get(baseUrl);
String expectedTitle = "Welcome: Mercury Tours";
String actualTitle = driver.getTitle();
Assert.assertEquals(actualTitle, expectedTitle);
driver.quit();
}
}
Cose da notare:
- TestNG non ha bisogno di un file
main()metodo. - I metodi non devono necessariamente essere statici.
- Migliori @Test segni di annotazione
verifyHomepageTitle()come caso di prova. - Le annotazioni vivono nel
org.testng.annotations.*pacchetto. - Migliori Affermare classe da
org.testng.Assertverifica le unitร .
ร possibile avere piรน annotazioni @Test in un singolo TestNG file. Trattiamo questo nel โAnnotazioni utilizzate in TestNG". .
Esecuzione del test
Fai clic con il pulsante destro del mouse sul file ed eseguilo come TestNG test. Eclipse produce due output: un risultato testuale nella finestra della console e un risultato grafico nella TestNG Finestra dei risultati.
Controllo dei report creati da TestNG
La finestra Console fornisce un riepilogo basato su testo mentre la TestNG La finestra dei risultati mostra una rappresentazione grafica.
Generazione di report HTML
TestNG puรฒ anche generare report HTML completi.
Passo 1) Dopo aver corso NomeTestNGCompila il , fai clic con il pulsante destro del mouse sul progetto e scegli ricaricare.
Passo 2) A output di prova appare la cartella. Espandila e individua index.html โ il report HTML dell'esecuzione piรน recente.
Passo 3) Double-clic index.html per aprirlo dall'interno Eclipsebrowser. Premi F5 per aggiornare dopo le esecuzioni successive.
Annotazioni utilizzate in TestNG
Avete giร visto l'annotazione @Test. Il resto di questa sezione illustra le annotazioni avanzate piรน utili.
Casi di test multipli
Un singolo TestNG Il file puรฒ contenere piรน annotazioni @Test. Per impostazione predefinita, i metodi annotati con @Test vengono eseguiti in ordine alfabetico. Nel codice seguente, i metodi c_test, a_teste b_test esegui in ordine alfabetico indipendentemente dall'ordine delle sorgenti.
Esegui il codice e apri index.html. Clic Vista cronologica.
Scheda Sintetica
Per sovrascrivere l'ordinamento predefinito, utilizzare priority parametro. I parametri sono parole chiave che modificano il comportamento di un'annotazione.
- Assegna un valore con
=. - I parametri vanno racchiusi tra parentesi posizionate immediatamente dopo l'annotazione, come mostrato di seguito.
TestNG Esegue le annotazioni @Test dal valore di prioritร piรน basso a quello piรน alto. I numeri di prioritร non devono essere consecutivi.
Il report HTML conferma che i metodi sono stati eseguiti in ordine di prioritร crescente.
Parametri multipli
Oltre a priority, @Test accetta il alwaysRun parametro (vero o falso). Per utilizzare due o piรน parametri in una singola annotazione, separarli con una virgola:
@Test(priority = 0, alwaysRun = true)
@BeforeTest e @AfterTest
| @Prima del test | I metodi sotto questa annotazione vengono eseguiti prima del primo caso di prova nel TestNG filetto. |
| @DopoTest | I metodi sotto questa annotazione vengono eseguiti dopo tutti i casi di test in TestNG file completato. |
Considera il codice qui sotto.
package firsttestngpackage;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.Assert;
import org.testng.annotations.*;
public class FirstTestNGFile {
public String baseUrl = "https://demo.guru99.com/test/newtours/";
public WebDriver driver;
@BeforeTest
public void launchBrowser() {
System.out.println("launching firefox browser");
driver = new FirefoxDriver();
driver.get(baseUrl);
}
@Test
public void verifyHomepageTitle() {
String expectedTitle = "Welcome: Mercury Tours";
String actualTitle = driver.getTitle();
Assert.assertEquals(actualTitle, expectedTitle);
}
@AfterTest
public void terminateBrowser() {
driver.quit();
}
}
Dalla tabella e dal codice, possiamo prevedere che la sequenza sarร :
- 1ยฐ โ
launchBrowser() - 2ยฐ โ
verifyHomepageTitle() - 3ยฐ โ
terminateBrowser()
La posizione dei blocchi di annotazione nel file sorgente non influisce sul loro ordine di esecuzione. Prova a riorganizzare i metodi come mostrato di seguito.
package firsttestngpackage;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.Assert;
import org.testng.annotations.*;
public class FirstTestNGFile {
public String baseUrl = "https://demo.guru99.com/test/newtours/";
public WebDriver driver;
@AfterTest // Jumbled
public void terminateBrowser() {
driver.quit();
}
@BeforeTest // Jumbled
public void launchBrowser() {
System.out.println("launching firefox browser");
driver = new FirefoxDriver();
driver.get(baseUrl);
}
@Test // Jumbled
public void verifyHomepageTitle() {
String expectedTitle = "Welcome: Mercury Tours";
String actualTitle = driver.getTitle();
Assert.assertEquals(actualTitle, expectedTitle);
}
}
Esegui il codice e verifica il risultato.
@BeforeMethod e @AfterMethod
| @PrimaMetodo | I metodi sotto questa annotazione vengono eseguiti prima di ogni metodo di prova. |
| @DopoMetodo | I metodi sotto questa annotazione vengono eseguiti dopo ogni metodo di prova. |
In Mercury Tour, supponiamo di voler verificare i titoli di due pagine di destinazione raggiunte dalla homepage.
Il flusso del test รจ il seguente:
- Apri la pagina iniziale e verifica il titolo.
- Fai clic su REGISTRATI e verifica il titolo della pagina di destinazione.
- Torna alla pagina iniziale e verifica il titolo.
- Fai clic su SUPPORTO e verifica il titolo della pagina di destinazione.
- Torna alla pagina iniziale e verifica nuovamente il titolo.
Il codice seguente mostra come le annotazioni @BeforeMethod e @AfterMethod gestiscono i passaggi ripetuti.
package firsttestngpackage;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.Assert;
import org.testng.annotations.*;
public class FirstTestNGFile {
public String baseUrl = "https://demo.guru99.com/test/newtours/";
public WebDriver driver;
public String expected = null;
public String actual = null;
@BeforeTest
public void launchBrowser() {
System.out.println("launching firefox browser");
driver = new FirefoxDriver();
driver.get(baseUrl);
}
@BeforeMethod
public void verifyHomepageTitle() {
String expectedTitle = "Welcome: Mercury Tours";
String actualTitle = driver.getTitle();
Assert.assertEquals(actualTitle, expectedTitle);
}
@Test(priority = 0)
public void register() {
driver.findElement(By.linkText("REGISTER")).click();
expected = "Register: Mercury Tours";
actual = driver.getTitle();
Assert.assertEquals(actual, expected);
}
@Test(priority = 1)
public void support() {
driver.findElement(By.linkText("SUPPORT")).click();
expected = "Under Construction: Mercury Tours";
actual = driver.getTitle();
Assert.assertEquals(actual, expected);
}
@AfterMethod
public void goBackToHomepage() {
driver.findElement(By.linkText("Home")).click();
}
@AfterTest
public void terminateBrowser() {
driver.quit();
}
}
Dopo aver eseguito il test, TestNG riporta la sequenza seguente.
In breve: inserire i passaggi di configurazione all'interno @PrimaMetodo e pulizia o ripristino della navigazione all'interno @DopoMetodo Pertanto, ogni caso di test inizia e termina in uno stato noto.
Riepilogo delle TestNG Annotazioni
- @BeforeSuite: Viene eseguito prima di tutti i test della suite.
- @AfterSuite: Viene eseguito dopo tutti i test della suite.
- @PrimaDelTest: viene eseguito prima di qualsiasi metodo di test appartenente alle classi all'interno di un etichetta.
- @AfterTest: viene eseguito dopo tutti i metodi di test appartenenti alle classi all'interno di un etichetta.
- @BeforeGroups: viene eseguito poco prima del primo metodo di test appartenente a uno qualsiasi dei gruppi elencati.
- @AfterGroups: viene eseguito subito dopo l'ultimo metodo di test appartenente a uno qualsiasi dei gruppi elencati.
- @PrimaDellaLezione: viene eseguito prima del primo metodo di test nella classe corrente.
- @DopoLezioni: Viene eseguito dopo tutti i metodi di test nella classe corrente.
- @BeforeMethod: viene eseguito prima di ogni metodo di test.
- @AfterMethod: viene eseguito dopo ogni metodo di test.
- @Test: contrassegna il metodo come caso di test.


































