Per capire come eseguire gli script in parallelo, dobbiamo prima capire
Perché abbiamo bisogno della gestione delle sessioni?
Durante l'esecuzione del test, Selenium WebDriver deve sempre interagire con il browser per eseguire determinati comandi. Al momento dell'esecuzione, è anche possibile che, prima del completamento dell'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 in base al quale le nostre due diverse esecuzioni non dovrebbero sovrapporsi l'una con l'altra. 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 chiamata "sessionId". Ogni volta che creiamo una nuova istanza di un oggetto WebDriver, verrà generato un nuovo 'sessionId' e allegato a quel particolare driver Firefox / Chrome / IE ().
Quindi tutto ciò che facciamo dopo verrà eseguito solo in quella particolare sessione del browser Firefox.
Poiché si tratta di una funzionalità incorporata, non è necessario assegnare l'ID di sessione
Esempio di codice: qui verranno generate due diverse sessioni per due diversi WebDriver.
import org.openqa.selenium.WebDriver;import org.openqa.selenium.firefox.FirefoxDriver;public class SessionHandling {public static void main (String ... strings) {// Prima sessione di WebDriverDriver WebDriver = nuovo FirefoxDriver ();// Sito Goto guru99driver.get ("http://demo.guru99.com/V4/");// Seconda sessione di WebDriverWebDriver driver2 = nuovo FirefoxDriver ();// Sito Goto guru99driver2.get ("http://demo.guru99.com/V4/");}}
Come eseguire test paralleli con selenio
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 del tag |
classi | Tutti i casi di test all'interno di una classe Java verranno eseguiti 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 riempiranno i dati di accesso in http://demo.guru99.com
Il progetto completo avrà il seguente aspetto:
TestGuru99MultipleSession.java
import org.openqa.selenium.WebDriver;import org.openqa.selenium.chrome.ChromeDriver;import org.testng.annotations.Test;public class TestGuru99MultipleSession {@Testpublic void executSessionOne () {// Prima sessione di WebDriverSystem.setProperty ("webdriver.chrome.driver", "chromedriver.exe");Driver WebDriver = nuovo ChromeDriver ();// Sito Goto guru99driver.get ("http://demo.guru99.com/V4/");// trova la casella di testo del nome utente e riempiladriver.findElement (By.name ("uid")). sendKeys ("Driver 1");}@Testpublic void executeSessionTwo () {// Seconda sessione di WebDriverSystem.setProperty ("webdriver.chrome.driver", "chromedriver.exe");Driver WebDriver = nuovo ChromeDriver ();// Sito Goto guru99driver.get ("http://demo.guru99.com/V4/");// trova la casella di testo del nome utente e riempiladriver.findElement (By.name ("uid")). sendKeys ("Driver 2");}@Testpublic void executSessionThree () {// Terza sessione di WebDriverSystem.setProperty ("webdriver.chrome.driver", "chromedriver.exe");Driver WebDriver = nuovo ChromeDriver ();// Sito Goto guru99driver.get ("http://demo.guru99.com/V4/");// trova la casella di testo del nome utente e riempiladriver.findElement (By.name ("uid")). sendKeys ("Driver 3");}}
TestNG.XML
xml version = "1.0" encoding = "UTF-8"?>
Ordine e dipendenza dello scenario di test
È possibile impostare l'ordine e la dipendenza dell'esecuzione del test case.
Supponiamo di avere due casi di test, "testGuru99TC1" e "testGuru99TC2" e di voler eseguire lo scenario di test "testGuru99TC2" prima di "testGuru99TC1". In tal caso useremo l'attributo "dipendeOnMethods" per creare dipendenza e ordine di esecuzione.
xml version = "1.0" encoding = "UTF-8"?>
Sommario
- Viene creato un nuovo sessionID per una nuova istanza di WebDriver.
- Una sessione si legherà a un browser particolare.
- Usando l'attributo thread e parallel, esegui i tuoi script in parallelo.
- È possibile utilizzare la dipendenza dagli attributi per impostare l'ordine per testare l'esecuzione