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.

  • ๐Ÿงฉ Principio chiave: Ogni nuova istanza di WebDriver genera un nuovo sessionId, quindi due driver non condividono mai comandi o cookie sulla stessa macchina.
  • โš™๏ธ Implementazione Imposta parallel=โ€methodsโ€ (o test, classi, istanze) piรน thread-count su TestNG Utilizzare il tag suite di testng.xml per distribuire l'esecuzione.
  • ๐Ÿงต Parallelismo: Utilizzare un WebDriver per ogni metodo @Test per evitare condizioni di competizione sulle finestre del browser condivise durante le esecuzioni simultanee.
  • ๐Ÿ”— Dipendenza: Ordina i test con dependsOnMethods all'interno di testng.xml include tag o l'annotazione @Test quando un metodo deve precedere un altro.
  • ๐Ÿค– Utilizzo dell'IA: I moderni sistemi di intelligenza artificiale prevedono il numero ottimale di thread, raggruppano i metodi paralleli sicuri e individuano i candidati instabili a partire dai dati storici di esecuzione.

Come eseguire l'esecuzione parallela in Selenium

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.

Gestione della sessione

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.

Ottieni la gestione della sessione Selenium webdriver

Ogni comando successivo viene eseguito solo all'interno di quella specifica sessione del browser.

Ottieni la gestione della sessione Selenium webdriver

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.

SessionHandling.java
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.

Esegui test paralleli con Selenium

L'attributo parallel del tag suite accetta quattro valori:

Valore attributoSignificato
testTutti casi test all'interno di un etichetta del analisi Esecuzione parallela del file XML.
classiTutti i casi di test all'interno di un Java Le lezioni vengono eseguite in parallelo.
metodiTutti i metodi annotati con @Test vengono eseguiti in parallelo.
istanzeI 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รฌ:

Esegui test paralleli con Selenium

TestGuru99MultipleSession.java
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

testng.xml (metodi paralleli)
<?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.

testng.xml (dipende dai metodi)
<?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.

DOMANDE FREQUENTI

Una sessione รจ un ID di sessione univoco generato ogni volta che viene creata una nuova istanza di WebDriver. Ogni comando proveniente da quel driver viene instradato alla sessione del browser corrispondente, isolando un test dall'altro.

L'attributo parallel sul tag suite accetta test, classi, metodi o istanze. TestNG Crea piรน thread (in base al valore di thread-count) ed esegue l'unitร  selezionata in parallelo, riducendo il tempo totale di esecuzione.

Utilizza l'attributo dependsOnMethods all'interno del tag include di testng.xml, oppure @Test(dependsOnMethods = โ€œnameโ€) nel codice. TestNG Esegue prima il prerequisito e, in caso di errore, salta il test dipendente.

Gli strumenti di intelligenza artificiale raggruppano i test correlati, prevedono il numero ottimale di thread in base alle prestazioni precedenti e riordinano le suite in modo che i test piรน lenti vengano eseguiti per primi, riducendo il tempo totale di esecuzione della pipeline di build.

Sรฌ. L'IA analizza i grafici delle chiamate e i registri storici degli errori per suggerire collegamenti dependsOnMethods, segnalare le dipendenze circolari e proporre gruppi paralleli sicuri, riducendo la manutenzione manuale del file testng.xml.

Riassumi questo post con: