Esecuzione parallela in Selenium: Gestione della sessione e TestNG Dipendenza
Per capire come eseguire gli script in parallelo, capiamo prima
Perché abbiamo bisogno della gestione delle sessioni?
Durante l'esecuzione del test, il Selenium WebDriver deve interagire continuamente con il browser per eseguire determinati comandi. Al momento dell'esecuzione è anche possibile che, prima che venga completata l'esecuzione corrente, qualcun altro inizi l'esecuzione di un altro script, nella stessa macchina e nello stesso tipo di browser.
In tale situazione, abbiamo bisogno di un meccanismo grazie al quale le nostre due diverse esecuzioni non dovrebbero sovrapporsi tra loro. Ciò può essere ottenuto utilizzando Session Handling in Selenium.
Come ottenere la gestione della sessione in Selenium WebDriver?
Se controlli il codice sorgente di Selenium WebDriver, troverai una variabile denominata "sessionId". Ogni volta che creiamo una nuova istanza di un oggetto WebDriver, un nuovo 'sessionId' verrà generato e allegato a quel particolare Firefox/Chrome/IEDriver ().
Quindi tutto ciò che facciamo dopo verrà eseguito solo in quel particolare Firefox sessione del browser.
Poiché si tratta di una funzionalità integrata, non è necessario assegnare esplicitamente l'ID di sessione
Esempio di codice: Qui verranno generate due sessioni diverse per due WebDriver diversi.
import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver; public class SessionHandling { public static void main(String...strings ){ //First session of WebDriver WebDriver driver = new FirefoxDriver(); //Goto guru99 site driver.get("https://demo.guru99.com/V4/"); //Second session of WebDriver WebDriver driver2 = new FirefoxDriver(); //Goto guru99 site driver2.get("https://demo.guru99.com/V4/"); } }
Come eseguire test paralleli con Selenium
Ci sono situazioni in cui desideri eseguire più test contemporaneamente.
In questi casi, è possibile utilizzare l'attributo "parallelo".
L'attributo parallelo del tag suite può accettare quattro valori:
test | Tutti i casi di test all'interno etichetta di Testing xml verrà eseguito in parallelo. |
classi | Tutti i casi di test all'interno di a Java la lezione si svolgerà in parallelo |
metodi | Tutti i metodi con l'annotazione @Test verranno eseguiti in parallelo. |
istanze | I casi di test nella stessa istanza verranno eseguiti in parallelo, ma due metodi di due istanze diverse verranno eseguiti in thread diversi. |
L'attributo thread-count consente di specificare quanti thread devono essere allocati per questa esecuzione.
Esempio completo: in questo esempio, tre casi di test verranno eseguiti in parallelo e verranno inseriti i dati di accesso https://demo.guru99.com/
Il progetto completo sarà simile a:
TestGuru99MultipleSession.java
import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import org.testng.annotations.Test; public class TestGuru99MultipleSession { @Test public void executSessionOne(){ //First session of WebDriver System.setProperty("webdriver.chrome.driver","chromedriver.exe"); WebDriver driver = new ChromeDriver(); //Goto guru99 site driver.get("https://demo.guru99.com/V4/"); //find user name text box and fill it driver.findElement(By.name("uid")).sendKeys("Driver 1"); } @Test public void executeSessionTwo(){ //Second session of WebDriver System.setProperty("webdriver.chrome.driver","chromedriver.exe"); WebDriver driver = new ChromeDriver(); //Goto guru99 site driver.get("https://demo.guru99.com/V4/"); //find user name text box and fill it driver.findElement(By.name("uid")).sendKeys("Driver 2"); } @Test public void executSessionThree(){ //Third session of WebDriver System.setProperty("webdriver.chrome.driver","chromedriver.exe"); WebDriver driver = new ChromeDriver(); //Goto guru99 site driver.get("https://demo.guru99.com/V4/"); //find user name text box and fill it driver.findElement(By.name("uid")).sendKeys("Driver 3"); } }
TestNG.XML
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> <suite name="TestSuite" thread-count="3" parallel="methods" > <test name="testGuru"> <classes> <class name="TestGuru99MultipleSession"> </class> </classes> </test> </suite>
Ordine e dipendenza dei casi di test
È possibile impostare l'ordine e la dipendenza di Test Case esecuzione.
Supponiamo di avere due casi di test, "testGuru99TC1" e "testGuru99TC2" e di voler eseguire il caso di test "testGuru99TC2" prima di "testGuru99TC1". In tal caso utilizzeremo l'attributo 'dependsOnMethods' per creare dipendenza e ordine di esecuzione.
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> <suite name="TestSuite" thread-count="3" parallel="methods" > <test name="testGuru"> <classes> <class name="TestGuru99MultipleSession"> <include value="testGuru99TC1" dependsOnMethods=" testGuru99TC2"/> <include value="testGuru99TC2"/> </class> </classes> </test> </suite>
Sommario
- Viene creato un nuovo sessionID per una nuova istanza di WebDriver.
- Una sessione si collegherà a un browser particolare.
- Utilizzando gli attributi thread e parallel, esegui i tuoi script in parallelo.
- È possibile utilizzare la dipendenza degli attributi per impostare l'ordine per testare l'esecuzione