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.

  • ๐Ÿงฑ Struttura principale: TestNG si estende JUnit idee con annotazioni, gruppopinge l'esecuzione parallela dei test per Selenium suite.
  • ๐Ÿท๏ธ Le annotazioni guidano il flusso: Impostazione, test e smantellamento della sequenza @Test, @BeforeMethod, @AfterMethod, @BeforeTest e @AfterTest.
  • ๐Ÿ—‚๏ธ Eclipse Setup: Costruire un TestNG progetto, aggiungi il TestNG biblioteca e Selenium Scarica i file JAR e genera le classi di test tramite la procedura guidata.
  • ๐Ÿ“Š Reporting: TestNG Genera report testuali, grafici e HTML nella cartella di output dei test, incluse visualizzazioni cronologiche.
  • โš™๏ธ parametri: Utilizzate priority, alwaysRun e dataProvider per controllare l'ordine di esecuzione e fornire dati ai test.
  • ๐Ÿค– Potenziamento AI: Gli assistenti di programmazione basati sull'IA accelerano TestNG Generazione delle classi, aggiornamenti dei localizzatori e creazione automatica del dataProvider.

TestNG Tutorial

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.xml file nella test-output cartella. 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.xml file, 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 Esempio di report HTML per Selenium test

  • TestNG Semplifica il codice di test. Non รจ piรน necessario un metodo main statico; le annotazioni decidono cosa viene eseguito e quando.

Solito Java struttura della classe di test con metodo principale

TestNG testare la struttura della classe utilizzando le annotazioni

  • 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.

Esempio TestNG annotazione sopra un Java metodo

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:

  1. Scrivi la tua logica aziendale e posizionala TestNG annotazioni sopra ciascun metodo.
  2. Aggiungi metadati come il nome della classe, il nome del gruppo e il nome del pacchetto.
  3. 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.

Eclipse menu per creare un nuovo Java progetto

Passo 2) entra NomeTestNGProgetto come nome del progetto e fai clic Avanti.

New Java procedura guidata del progetto con nome PrimoTestNGProgetto

Passo 3) Importa il TestNG biblioteche. Fare clic su Biblioteche scheda e poi Aggiungi alla libreriaโ€ฆ.

Scheda Librerie con l'opzione Aggiungi libreria in Eclipse

Passo 4) Nel Aggiungi libreria dialogo, scegliere TestNG e fare clic su Avanti.

Selezione TestNG nella finestra di dialogo Aggiungi libreria

Passo 5) Clicchi Finitura.

Completamento della procedura guidata Aggiungi libreria.

TestNG Ora dovrebbe comparire nell'elenco delle biblioteche.

TestNG visibile 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.

Finestra di dialogo Aggiungi JAR esterni Eclipse

Vai alla cartella in cui si trova Selenium I file JAR vengono memorizzati.

Selezione Selenium File JAR per il percorso di compilazione

Dopo aver aggiunto i file JAR esterni, la schermata dovrebbe apparire cosรฌ.

Selenium File JAR aggiunti all'elenco delle librerie

Passo 7) Clicchi Finitura. La nuova NomeTestNGProgetto appare in Esplora pacchetti.

NomeTestNGProgetto visibile 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โ€ฆ.

Nuovo menu Altro dalla cartella src in Eclipse

Passo 2) espandere la TestNG cartella, selezionare TestNG classee fare clic Avanti.

TestNG opzione classe nella nuova procedura guidata

Passo 3) Inserisci i valori mostrati di seguito e fai clic Finitura. Java il file si chiama NomeTestNGCompila il .

TestNG mago di classe con PrimoTestNGvalori dei file

Passo 4) Eclipse genera il TestNG modello mostrato di seguito.

generated TestNG modello di classe in Eclipse editore

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.Assert verifica 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.

TestNG Finestra dei risultati con l'esito del test

Eclipse Finestra della console con TestNG output di testo

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.

Testo vs. grafica TestNG confronto dei risultati

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.

Opzione di aggiornamento per TestNG progetto in Eclipse

Passo 2) A output di prova appare la cartella. Espandila e individua index.html โ€” il report HTML dell'esecuzione piรน recente.

cartella di output del test con index.html evidenziato

Passo 3) Double-clic index.html per aprirlo dall'interno Eclipsebrowser. Premi F5 per aggiornare dopo le esecuzioni successive.

TestNG Rapporto indice HTML visualizzato in Eclipse

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.

Metodi @Test multipli in un singolo TestNG classe

Esegui il codice e apri index.html. Clic Vista cronologica.

Visione cronologica di piรน TestNG metodi

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 annotazione con sintassi di parametri e valori

TestNG Esegue le annotazioni @Test dal valore di prioritร  piรน basso a quello piรน alto. I numeri di prioritร  non devono essere consecutivi.

Codice completo con parametri di prioritร  @Test

Il report HTML conferma che i metodi sono stati eseguiti in ordine di prioritร  crescente.

TestNG report che mostra i metodi 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)

Esempio di piรน parametri all'interno di un'annotazione @Test

@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.

TestNG Risultato che conferma l'ordine nonostante le annotazioni confuse.

@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.

Tre collegamenti da Mercury Home page dei tour

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.

TestNG sequenza di report utilizzando BeforeMethod e AfterMethod

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.

DOMANDE FREQUENTI

JUnit 5 modernizzato JUnit con l'API Jupiter e il modello di estensione. TestNG รจ ancora leader nell'esecuzione parallela, gruppo a livello di suiteping, dependsOn e DataProvider. Molti Selenium le squadre scelgono TestNG per suite complete e JUnit 5 per i test unitari.

Aggiungi parallel="methods" o parallel="classes" piรน un attributo thread-count su tag all'interno di testng.xml. TestNG quindi distribuisce i metodi di test tra i thread, ideale per Selenium Esecuzione cross-browser su griglia o cloud.

@DataProvider alimenta piรน set di dati in un singolo metodo @Test. Ogni riga nel provider corrisponde a un'esecuzione. รˆ il modello standard per i test basati sui dati. Selenium test su moduli, caselle di ricerca o schermate di accesso.

Sรฌ. Le serrature scorrevoli portatili e i catenacci a superficie possono essere usati per mettere in sicurezza una porta a scomparsa dall'esterno. Alcuni kit con catena di sicurezza consentono anche il bloccaggio esterno con chiave o manopola girevole. AI gli assistenti di programmazione generano TestNG scheletri, annota i metodi @Test, crea classi Page Object e bozze di array DataProvider da file CSV di esempio, riducendo drasticamente i tempi di scaffolding.

L'intelligenza artificiale generativa analizza il file testng-results.xml e i log di Surefire, raggruppa gli errori simili, suggerisce le probabili cause principali e genera ticket Jira. Questo abbrevia la fase di triage dei test instabili e aiuta i responsabili QA a dare prioritร  alle correzioni per la CI (Continuous Integration).

Riassumi questo post con: