Esecuzione parallela in Selenium
โก Riepilogo intelligente
Sessioni, esecuzione parallela e dipendenza in Selenium combinare un sessionId univoco per ogni istanza di WebDriver con TestNG I controlli della suite consentono a piรน finestre del browser di eseguire script indipendenti o ordinati contemporaneamente e di completare piรน rapidamente il ciclo di regressione.

Per capire come eseguire gli script in parallelo, devi prima sapere come Selenium isola ciascun browser tramite sessioni.
Perchรฉ abbiamo bisogno della gestione delle sessioni?
Durante l'esecuzione del test, il Selenium WebDriver deve interagire con il browser a ogni passaggio per eseguire i comandi impartiti. Mentre il test รจ in corso, un altro utente potrebbe avviare un secondo script sulla stessa macchina e con lo stesso tipo di browser.
In una situazione del genere, abbiamo bisogno di un meccanismo che impedisca la sovrapposizione delle due esecuzioni. Selenium Risolve questo problema tramite la gestione delle sessioni.
Come ottenere la gestione della sessione in Selenium WebDriver?
Se ispezioni il Selenium Nel codice sorgente di WebDriver, troverai una variabile chiamata sessionId. Ogni volta che crei una nuova istanza di WebDriver, viene creata una nuova istanza di WebDriver. sessionId viene generato e collegato a quello Firefox, Chrome o driver IE.
Ogni comando successivo viene eseguito solo all'interno di quella specifica sessione del browser.
Poichรฉ questa funzionalitร รจ integrata in WebDriver, non รจ necessario assegnare manualmente l'ID di sessione.
Code Esempio: Per ogni istanza di WebDriver vengono generate due sessioni distinte.
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(); // Go to guru99 demo site driver.get("https://demo.guru99.com/V4/"); // Second session of WebDriver WebDriver driver2 = new FirefoxDriver(); // Go to guru99 demo site driver2.get("https://demo.guru99.com/V4/"); } }
Come eseguire test paralleli con Selenium
Ci sono situazioni in cui si desidera eseguire piรน test contemporaneamente, come ad esempio verifiche cross-browser o grandi suite per fumatori.
In tali casi, il parallel attributo sul TestNG Il tag suite fa il lavoro.
L'attributo parallel del tag suite accetta quattro valori:
| Valore attributo | Significato |
|---|---|
| test | Tutti casi test all'interno di un etichetta del analisi Esecuzione parallela del file XML. |
| classi | Tutti i casi di test all'interno di un Java Le lezioni vengono eseguite in parallelo. |
| metodi | Tutti i metodi annotati con @Test vengono eseguiti in parallelo. |
| istanze | I test nella stessa istanza vengono eseguiti in parallelo, mentre due metodi di due istanze diverse vengono eseguiti in thread diversi. |
Migliori thread-count L'attributo decide quanti thread vengono allocati per quell'esecuzione. Abbinalo a TestNG contesto and install TestNG in Eclipse prima dell'esecuzione. Per scalare oltre una singola macchina, instradare la stessa suite attraverso Selenium Grid 4 per l'esecuzione parallela distribuita.
Esempio completo: tre casi di test vengono eseguiti in parallelo e riempiono i dati di accesso su https://demo.guru99.com/.
Il progetto completo si presenta cosรฌ:
import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import org.testng.annotations.Test; public class TestGuru99MultipleSession { @Test public void executeSessionOne() { // First session of WebDriver System.setProperty("webdriver.chrome.driver", "chromedriver.exe"); WebDriver driver = new ChromeDriver(); driver.get("https://demo.guru99.com/V4/"); // Find the 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(); driver.get("https://demo.guru99.com/V4/"); driver.findElement(By.name("uid")).sendKeys("Driver 2"); } @Test public void executeSessionThree() { // Third session of WebDriver System.setProperty("webdriver.chrome.driver", "chromedriver.exe"); WebDriver driver = new ChromeDriver(); driver.get("https://demo.guru99.com/V4/"); 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"/> </classes> </test> </suite>
Ordine e dipendenza dei casi di test
ร possibile impostare l'ordine e la dipendenza di caso di prova esecuzione. Supponiamo di avere due casi di test, testGuru99TC1 and testGuru99TC2, e tu vuoi testGuru99TC2 correre prima testGuru99TC1. Usa il dependsOnMethods attributo (o dependsOnGroups per il concatenamento a livello di gruppo) per fissare quell'ordine. Per un'applicazione piรน ampia quadro di automazione progettare, confrontare JUnit vs TestNG, e rivedere il trovaElemento Se i test dipendenti condividono gli stessi localizzatori, fare riferimento a questo punto.
<?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 name="testGuru99TC1" dependsOnMethods="testGuru99TC2"/> <include name="testGuru99TC2"/> </class> </classes> </test> </suite>
Migliori TestNG runtime, ospitato su testng.org, valuta queste dichiarazioni prima di avviare i thread, quindi i metodi dipendenti iniziano sempre dopo che i loro prerequisiti sono terminati.





