TestNG @Test Priorità in Selenium

TestNG è un Testing framework, che copre diversi tipi di progetti di test come 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 Test codice.

Se la priorità del test non è definita durante l'esecuzione di più casi di test, TestNG assegna a tutti i @Test una priorità pari a zero (0).

Ora, mentre corri; le priorità inferiori verranno programmate per prime.

Demo di TestNG codice 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 codificato deve essere eseguito in metodi separati

Metodo 1: Apri il browser, ad esempio Firefox (openBrowser())

Metodo 2: avvia Google.com (avviaGoogle())

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 {		
    WebDriver driver;			

	    // Method 1: Open Brower say Firefox			
	    @Test		
	    public void openBrowser() {				
	        driver = new FirefoxDriver();				
	    }		

	    // Method 2: Launch Google.com			
	    @Test		
	    public void launchGoogle() {				
	        driver.get("http://www.google.co.in");						
	    }		
        
	    // Method 3: Perform a search using "Facebook"			
	    @Test		
	    public void peformSeachAndClick1stLink() {				
	        driver.findElement(By.xpath(".//*[@title='Search']")).sendKeys("Facebook");								
	    }		

	    // Method 4: Verify Google search page title.			
	    @Test		
	    public void FaceBookPageTitleVerification() throws Exception {				
	        driver.findElement(By.xpath(".//*[@value='Search']")).click();						
	        Thread.sleep(3000);		
	        Assert.assertEquals(driver.getTitle().contains("Facebook - Google Search"), true);				
	    }		
	}		

Spiegazione del codice

Come accennato in precedenza, abbiamo creato 4 casi di test per eseguire ciascuna azione con metodi indipendenti.

  • Il primo metodo (apriBrowser) stati da inizializzare Firefox browser.
  • Il secondo metodo (lancia Google) afferma che l'avvio di Google.com avviene nel browser inizializzato.
  • Il terzo metodo (eseguiSeachAndClick1stLink)stati che eseguono una ricerca nella casella di ricerca (con xpath (“.//*[@title='Cerca']”) con un termine di ricerca come Facebook e
  • Il quarto e ultimo metodo (Verifica del titolo della pagina Facebook) 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 troverai tutto Test Case stanno fallendo. Il motivo del fallimento: poiché esiste una dipendenza dal test case precedente, verrà superato solo il test case corrente.

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 provando a fare clic sul pulsante di ricerca e a 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.
PASSED: openBrowser
FAILED: FaceBookPageTitleVerification
FAILED: launchGoogle
FAILED: peformSeachAndClick1stLink

Demo di TestNG codice senza priorità in ordine alfabetico

Se non menzioniamo alcuna priorità, testng eseguirà i metodi @Test in base all'ordine alfabetico dei nomi dei metodi, indipendentemente dal luogo di implementazione nel codice.

package com.guru.testngannotations;

import org.testng.annotations.Test;

public class TestNG_Priority_Annotations {

@Test
public void c_method(){
System.out.println("I'm in method C");
}
@Test
public void b_method(){
System.out.println("I'm in method B");
}
@Test
public void a_method(){
System.out.println("I'm in method A");
}
@Test
public void e_method(){
System.out.println("I'm in method E");
}
@Test
public void d_method(){
System.out.println("I'm in method D");
}

}

Uscita

I'm in method A 
I'm in method B 
I'm in method C 
I'm in method D 
I'm in method E 

Sebbene abbiamo definito i metodi in modo casuale (c, b, a, e, d), testing ha eseguito i metodi in base ai nomi dei metodi considerando l'ordine alfabetico e lo stesso si è riflesso anche nell'output.

Come impostare la priorità in TestNG

Come hai visto nell'esempio precedente, è necessaria la sequenza per superare questo scenario, quindi modificheremo la parte di codice precedente con Parametro prioritario in modo che ogni test venga eseguito rispetto alla priorità loro assegnata.

Ora, come puoi vedere, abbiamo assegnato la priorità a ciascun caso di test, il che significa che il caso di test con il valore di priorità più basso verrà eseguito per primo.

Priorità nel 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 {		
    WebDriver driver;			

    // Method 1: Open Browser say Firefox			
    @Test (priority=1)		
    public void openBrowser() {				
        driver = new FirefoxDriver();				
    }		

    // Method 2: Launch Google.com			
    @Test (priority=2)		
    public void launchGoogle() {				
        driver.get("http://www.google.co.in");						
    }		

    // Method 3: Perform a search using "Facebook"			
    @Test (priority=3)		
    public void peformSeachAndClick1stLink() {				
        driver.findElement(By.xpath(".//*[@title='Search']")).sendKeys("Facebook");								
    }		

    // Method 4: Verify Google search page title.			
    @Test (priority=4)		
    public void FaceBookPageTitleVerification() throws Exception {				
        driver.findElement(By.xpath(".//*[@value='Search']")).click();						
        Thread.sleep(3000);		
        Assert.assertEquals(driver.getTitle().contains("Facebook - Google Search"), true);				
    }		
}

Spiegazione del codice

Dopo aver assegnato la priorità a ciascun test case, esegui il codice precedente utilizzando 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à più bassa vengono eseguiti per primi, ovvero ora c'è un'esecuzione sequenziale in base alla priorità nei casi di test. Quindi, tutti i casi di test stanno superando ora.

Nota la console di Eclipse:

Uscita :

PASSED: openBrowser
PASSED: launchGoogle
PASSED: peformSearchAndClick1stLink
PASSED: FaceBookPageTitleVerification

Il numero 0 ha la priorità più alta (verrà eseguito per primo) e la priorità varia in base al numero specificato, ovvero 0 ha la priorità più alta di 1. 1 ha la priorità più alta di 2 e così via.

package com.guru.testngannotations;
import org.testng.annotations.Test;

public class TestNG_Priority_Annotations {

    @Test(priority=6)
    public void c_method(){
    System.out.println("I'm in method C");
    }
    @Test(priority=9)
    public void b_method(){
    System.out.println("I'm in method B");
    }
    @Test(priority=1)
    public void a_method(){
    System.out.println("I'm in method A");
    }
    @Test(priority=0)
    public void e_method(){
    System.out.println("I'm in method E");
    }
    @Test(priority=3)
    public void d_method(){
    System.out.println("I'm in method D");
    }

}

Uscita

I'm in method E 
I'm in method A 
I'm in method D 
I'm in method C 
I'm in method B

Qui abbiamo fornito le priorità come 0,1,3,6,9. Pertanto, il metodo con priorità 0 viene eseguito per primo, 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à

Potrebbe esserci la possibilità che i metodi contengano la stessa priorità. In questi casi, testing considera l'ordine alfabetico dei nomi dei metodi la cui priorità è la stessa.

package com.guru.testngannotations;
import org.testng.annotations.Test;

public class TestNG_Priority_Annotations {

    @Test(priority=6)
    public void c_method(){
    System.out.println("I'm in method C");
    }
    @Test(priority=9)
    public void b_method(){
    System.out.println("I'm in method B");
    }
    @Test(priority=6)
    public void a_method(){
    System.out.println("I'm in method A");
    }
    @Test(priority=0)
    public void e_method(){
    System.out.println("I'm in method E");
    }
    @Test(priority=3)
    public void d_method(){
    System.out.println("I'm in method D");
    }

}

Uscita

I'm in method E 
I'm in method D 
I'm in method A 
I'm in method C 
I'm in method B 

Qui 'e' e 'd' vengono eseguiti in base ai loro valori di priorità. Ma i metodi 'a' e 'c' contengono lo stesso valore di priorità(6). Quindi, qui testing considera l'ordine alfabetico di "a" e "c" e li esegue di conseguenza.

Combinando metodi con priorità (aventi la stessa priorità) e senza priorità

In questo caso, tratteremo due casi in una lezione di test.

  1. Metodi aventi lo stesso valore di priorità.
  2. Più di un metodo senza priorità.
package com.guru.testngannotations;

import org.testng.annotations.Test;

public class TestNG_Priority_Annotations {

	@Test()
	public void c_method(){
		System.out.println("I'm in method C");
	}
	@Test()
	public void b_method(){
		System.out.println("I'm in method B");
	}
	@Test(priority=6)
	public void a_method(){
		System.out.println("I'm in method A");
	}
	@Test(priority=0)
	public void e_method(){
		System.out.println("I'm in method E");
	}
	@Test(priority=6)
	public void d_method(){
		System.out.println("I'm in method D");
	}
}

Produzione:

I'm in method B 
I'm in method C 
I'm in method E 
I'm in method A 
I'm in method D
PASSED: b_method 
PASSED: c_method 
PASSED: e_method 
PASSED: a_method 
PASSED: d_method

Spiegazione:

Prima preferenza: Metodi senza priorità: 'c' e 'b': in base all'ordine alfabetico è stata eseguita prima 'b' e poi 'c'.

Seconda preferenza: Metodi con priorità: '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, testing ha considerato l'ordine alfabetico dei nomi dei metodi. Quindi, tra loro, è stata eseguita prima la "a" e poi la "d".

Con distinzione tra maiuscole e minuscole TestNG

Solo per tua informazione esiste una sintassi standard per definire la priorità in testNG, ad es @Test (priorità=4), supponiamo che tu lo stia definendo in qualche altra sintassi, ad esempio @Test (PRIORITÀ=1) quindi il tuo IDE lo mostrerà come un errore di compilazione. Fare riferimento all'immagine qui sotto:

Con distinzione tra maiuscole e minuscole TestNG

Conclusione

Come hai visto, se è necessario eseguire una serie di casi di test in una sequenza specifica, è possibile farlo facilmente utilizzando Priorità utilizzando testNG come strumento di esecuzione.

Questo tutorial è reso possibile grazie al contributo di Ramandeep Singh e Rama Krishna Gaddà