TestNG è un framework di test, che copre diversi tipi di progetti di test come un test unitario, test funzionale, test end to end, test dell'interfaccia utente e test di integrazione.
Puoi eseguire uno o più casi di test nel tuo codice Testng.
Se la priorità del test non è definita durante l'esecuzione di più casi di test, TestNG assegna a tutti i @Test una priorità come zero (0).
Ora, mentre corri; le priorità inferiori verranno programmate per prime.
In questo tutorial imparerai:
- Demo del codice TestNG senza priorità
- Demo del codice TestNG senza priorità in ordine alfabetico
- Come impostare la priorità in TestNG
- Metodi con la stessa priorità
- Combinando metodi prioritari (aventi la stessa priorità) e metodi non prioritari
Demo del codice TestNG senza priorità
Prendiamo uno scenario in cui sarà richiesto il sequenziamento per superare tutti i casi di test:
Scenario: genera un codice in cui ti viene richiesto di eseguire una ricerca su Google con una parola chiave specifica, ad esempio "Facebook". Ora, verifica che il titolo del browser sia cambiato in "Facebook - Ricerca Google".
Nota: ogni passaggio che si codifica dovrebbe essere in metodi separati
Metodo 1 : Apri il browser dì Firefox (openBrowser ())
Metodo 2 : avvia Google.com (launchGoogle ())
Metodo 3 : eseguire una ricerca utilizzando "Facebook" (performSearchAndClick1stLink ())
Metodo 4 : verifica il titolo della pagina di ricerca di Google (FaceBookPageTitleVerification ())
Codice per il nostro scenario :
import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.firefox.FirefoxDriver;import org.testng.Assert;import org.testng.annotations.Test;public class Priority_In_testNG {Driver WebDriver;// Metodo 1: apri Brower dì Firefox@Testpublic void openBrowser () {driver = nuovo FirefoxDriver ();}// Metodo 2: avvia Google.com@Testpublic void launchGoogle () {driver.get ("http://www.google.co.in");}// Metodo 3: eseguire una ricerca utilizzando "Facebook"@Testpublic void peformSeachAndClick1stLink () {driver.findElement (By.xpath (".//*[@ title = 'Search']")). sendKeys ("Facebook");}// Metodo 4: verifica il titolo della pagina di ricerca di Google.@Testpublic void FaceBookPageTitleVerification () genera un'eccezione {driver.findElement (By.xpath (".//*[@ value = 'Search']")). click ();Thread.sleep (3000);Assert.assertEquals (driver.getTitle (). Contiene ("Facebook - Ricerca Google"), true);}}
Spiegazione del codice
Come accennato in precedenza, abbiamo creato 4 casi di test per eseguire ogni azione in un metodo indipendente.
- Il primo metodo (openBrowser) afferma di inizializzare il browser Firefox.
- Il secondo metodo (launchGoogle) afferma che l'avvio di Google.com è nel browser inizializzato.
- Il terzo metodo (peformSeachAndClick1stLink) afferma che eseguire una ricerca nella casella di ricerca (con xpath (".//*[@title='Search ']") con un termine di ricerca come Facebook e
- Il quarto e ultimo metodo (FaceBookPageTitleVerification) afferma che fare clic sull'icona di ricerca di Google e verificare che il titolo del browser sia stato modificato in Facebook - Ricerca Google.
Ora esegui questo codice usando testNG come mostrato nel video, scoprirai che tutti i test case stanno fallendo. Il motivo del fallimento: poiché esiste una dipendenza del test case precedente da superare, verrà superato solo il test case corrente in esecuzione.
In questo caso,
- Il primo metodo che viene eseguito è openBrowser (). È stato approvato perché non ha alcuna dipendenza.
- Il secondo metodo eseguito è FaceBookPageTitleVerification (); non funziona perché stiamo tentando di fare clic sul pulsante di ricerca e di verificare il titolo del browser.
- Puoi vedere che se l'attività di ricerca non viene elaborata, come può essere superato qualsiasi altro passaggio. Quindi, questo è il motivo per cui i miei casi di test falliscono.
SUPERATO: openBrowserNON RIUSCITO: FaceBookPageTitleVerificationNON RIUSCITO: launchGoogleNON RIUSCITO: peformSeachAndClick1stLink
Demo del codice TestNG senza priorità in ordine alfabetico
Se non menzioniamo alcuna priorità, testng eseguirà i metodi @Test in base all'ordine alfabetico dei loro nomi di metodo indipendentemente dalla loro posizione di implementazione nel codice.
pacchetto com.guru.testngannotations;import org.testng.annotations.Test;public class TestNG_Priority_Annotations {@Testpublic void c_method () {System.out.println ("Sono nel metodo C");}@Testpublic void b_method () {System.out.println ("Sono nel metodo B");}@Testpublic void a_method () {System.out.println ("Sono nel metodo A");}@Testpublic void e_method () {System.out.println ("Sono nel metodo E");}@Testpublic void d_method () {System.out.println ("Sono nel metodo D");}}
Produzione
Sono nel metodo ASono nel metodo BSono nel metodo CSono nel metodo DSono nel metodo E
Sebbene abbiamo definito i metodi in modo casuale (c, b, a, e, d), testng ha eseguito i metodi in base ai loro nomi di metodo considerando l'ordine alfabetico e lo stesso si rifletteva anche nell'output.
Come impostare la priorità in TestNG
Come hai visto nell'esempio precedente, la sequenza è necessaria per superare questo scenario, quindi modificheremo la parte di codice precedente con il parametro di priorità in modo che ogni test venga eseguito rispetto alla priorità assegnata.
Ora, come puoi vedere, abbiamo assegnato la priorità a ciascun caso di test, il che significa che il valore di priorità inferiore verrà eseguito per primo.
Priorità in testNG in azione
import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.firefox.FirefoxDriver;import org.testng.Assert;import org.testng.annotations.Test;public class Priority_In_testNG {Driver WebDriver;// Metodo 1: Apri il browser dì Firefox@Test (priorità = 1)public void openBrowser () {driver = nuovo FirefoxDriver ();}// Metodo 2: avvia Google.com@Test (priorità = 2)public void launchGoogle () {driver.get ("http://www.google.co.in");}// Metodo 3: eseguire una ricerca utilizzando "Facebook"@Test (priorità = 3)public void peformSeachAndClick1stLink () {driver.findElement (By.xpath (".//*[@ title = 'Search']")). sendKeys ("Facebook");}// Metodo 4: verifica il titolo della pagina di ricerca di Google.@Test (priorità = 4)public void FaceBookPageTitleVerification () genera un'eccezione {driver.findElement (By.xpath (".//*[@ value = 'Search']")). click ();Thread.sleep (3000);Assert.assertEquals (driver.getTitle (). Contiene ("Facebook - Ricerca Google"), true);}}
Spiegazione del codice
Dopo aver assegnato la priorità a ciascun caso di prova, esegui il codice sopra usando testNG come mostrato nel Video-2 menzionato di seguito.
Qui puoi vedere che i casi di test hanno la priorità. I casi di test con priorità inferiore vengono eseguiti per primi, cioè ora c'è un'esecuzione sequenziale in base alla priorità nei casi di test. Quindi, tutti i casi di test stanno passando ora.
Nota la console di eclipse:
Uscita :
SUPERATO: openBrowserSUPERATO: launchGoogleSUPERATO: peformSearchAndClick1stLinkSUPERATO: FaceBookPageTitleVerification
Il numero 0 ha la priorità più alta (verrà eseguito per primo) e la priorità continua in base al numero dato, cioè 0 ha la priorità più alta di 1. 1 ha la priorità più alta di 2 e così via.
pacchetto com.guru.testngannotations;import org.testng.annotations.Test;public class TestNG_Priority_Annotations {@Test (priorità = 6)public void c_method () {System.out.println ("Sono nel metodo C");}@Test (priorità = 9)public void b_method () {System.out.println ("Sono nel metodo B");}@Test (priorità = 1)public void a_method () {System.out.println ("Sono nel metodo A");}@Test (priorità = 0)public void e_method () {System.out.println ("Sono nel metodo E");}@Test (priorità = 3)public void d_method () {System.out.println ("Sono nel metodo D");}}
Produzione
Sono nel metodo ESono nel metodo ASono nel metodo DSono nel metodo CSono nel metodo B
Qui abbiamo fornito le priorità come 0,1,3,6,9. Quindi, viene eseguito prima il metodo con 0 come priorità, quindi il metodo con priorità 1 e così via. Qui il nome del metodo in ordine alfabetico non verrà considerato poiché abbiamo fornito le priorità
Metodi con la stessa priorità:
È possibile che i metodi contengano la stessa priorità. In questi casi, testng considera l'ordine alfabetico dei nomi dei metodi la cui priorità è la stessa.
pacchetto com.guru.testngannotations;import org.testng.annotations.Test;public class TestNG_Priority_Annotations {@Test (priorità = 6)public void c_method () {System.out.println ("Sono nel metodo C");}@Test (priorità = 9)public void b_method () {System.out.println ("Sono nel metodo B");}@Test (priorità = 6)public void a_method () {System.out.println ("Sono nel metodo A");}@Test (priorità = 0)public void e_method () {System.out.println ("Sono nel metodo E");}@Test (priorità = 3)public void d_method () {System.out.println ("Sono nel metodo D");}}
Produzione
Sono nel metodo ESono nel metodo DSono nel metodo ASono nel metodo CSono nel metodo B
Qui "e" e "d" vengono eseguiti in base ai rispettivi valori di priorità. Ma i metodi "a" e "c" contengono lo stesso valore di priorità (6). Quindi, qui testng considera l'ordine alfabetico di "a" e "c" e li esegue di conseguenza.
Combinazione di metodi prioritari (con la stessa priorità) e non prioritari:
In questo caso, tratteremo due casi in una classe testng.
- Metodi con lo stesso valore di priorità.
- Più di un metodo senza priorità.
pacchetto com.guru.testngannotations;import org.testng.annotations.Test;public class TestNG_Priority_Annotations {@Test()public void c_method () {System.out.println ("Sono nel metodo C");}@Test()public void b_method () {System.out.println ("Sono nel metodo B");}@Test (priorità = 6)public void a_method () {System.out.println ("Sono nel metodo A");}@Test (priorità = 0)public void e_method () {System.out.println ("Sono nel metodo E");}@Test (priorità = 6)public void d_method () {System.out.println ("Sono nel metodo D");}}
Produzione:
Sono nel metodo BSono nel metodo CSono nel metodo ESono nel metodo ASono nel metodo D
SUPERATO: b_methodSUPERATO: c_methodSUPERATO: e_methodSUPERATO: a_methodSUPERATO: d_method
Spiegazione:
Prima preferenza: metodi senza priorità: "c" e "b": in base all'ordine alfabetico è stato eseguito prima "b" e poi "c".
Seconda preferenza: metodi prioritari: "a", "e" e "d": "e" è stato eseguito per primo poiché aveva la priorità più alta (0). Poiché la priorità dei metodi "a" e "d" era la stessa, testng ha considerato l'ordine alfabetico dei nomi dei metodi. Quindi, tra di loro, è stata eseguita prima "a" e poi "d".
Distinzione tra maiuscole e minuscole in TestNG
Solo per tua informazione esiste una sintassi standard per definire la priorità in testNG cioè @Test (priorità = 4) , supponi di definirla in qualche altra sintassi diciamo @Test (PRIORITY = 1), quindi il tuo IDE lo mostrerà come un errore di compilazione . Fare riferimento all'immagine di seguito:
Conclusione:
Come hai visto, se è necessario eseguire una serie di casi di test in una sequenza specifica, è possibile farlo facilmente utilizzando Priority utilizzando testNG come strumento di esecuzione.
Questo tutorial è stato reso possibile grazie ai contributi di Ramandeep Singh e Rama Krishna Gadde