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.

Gestione della sessione

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 ().

Ottieni la gestione della sessione Selenium webdriver

Quindi tutto ciò che facciamo dopo verrà eseguito solo in quel particolare Firefox sessione del browser.

Ottieni la gestione della sessione Selenium webdriver

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".

Esegui test paralleli con Selenium

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:

Esegui test paralleli con Selenium

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