Ejecución paralela en Selenium
⚡ Resumen inteligente
Sesiones, ejecución en paralelo y dependencia en Selenium combine un sessionId único por instancia de WebDriver con TestNG Los controles de la suite permiten que varias ventanas del navegador ejecuten scripts independientes o ordenados a la vez y finalicen el ciclo de regresión más rápidamente.

Para entender cómo ejecutar scripts en paralelo, primero necesitas saber cómo Selenium Aísla cada navegador mediante sesiones.
¿Por qué necesitamos el manejo de sesiones?
Durante la ejecución de la prueba, el Selenium WebDriver debe interactuar con el navegador en cada paso para ejecutar los comandos indicados. Mientras se ejecuta esa prueba, otro usuario puede iniciar un segundo script en la misma máquina y con el mismo tipo de navegador.
En tal situación, necesitamos un mecanismo para que las dos ejecuciones no se superpongan. Selenium Esto se soluciona mediante la gestión de sesiones.
Cómo lograr el manejo de sesiones en Selenium ¿Conductor web?
Si inspeccionas el Selenium En el código fuente de WebDriver, encontrará una variable llamada sessionIdCada vez que creas una nueva instancia de WebDriver, se crea una nueva sessionId se genera y se adjunta a eso Firefox, Chrome o controlador de IE.
Cada comando posterior se ejecuta únicamente dentro de esa sesión particular del navegador.
Dado que esta funcionalidad está integrada en WebDriver, no es necesario asignar el sessionId manualmente.
Code Ejemplo: Se generan dos sesiones diferentes para dos instancias de WebDriver.
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/"); } }
Cómo ejecutar pruebas paralelas con Selenium
Hay situaciones en las que se desea ejecutar varias pruebas al mismo tiempo, como por ejemplo: comprobaciones entre navegadores o grandes salas de fumadores.
En tales casos, el parallel Atributo en el TestNG La etiqueta de suite hace el trabajo.
El atributo parallel de la etiqueta suite acepta cuatro valores:
| Valor de atributo | Significado |
|---|---|
| pruebas | Todos Casos de prueba dentro de un etiqueta de la las pruebas El archivo XML se ejecuta en paralelo. |
| privadas | Todos los casos de prueba dentro de un Java Las clases se ejecutan en paralelo. |
| métodos | Todos los métodos anotados con @Test se ejecutan en paralelo. |
| instancias | Las pruebas en la misma instancia se ejecutan en paralelo, mientras que dos métodos de dos instancias diferentes se ejecutan en hilos diferentes. |
El thread-count El atributo decide cuántos subprocesos se asignan para esa ejecución. Combínalo con el TestNG marco y instalar TestNG in Eclipse antes de ejecutar. Para escalar más allá de una sola máquina, enrute el mismo conjunto a través de Selenium Cuadrícula 4 para ejecución paralela distribuida.
Ejemplo completo: tres casos de prueba se ejecutan en paralelo y completan los datos de inicio de sesión en https://demo.guru99.com/.
El proyecto completo tiene el siguiente aspecto:
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>
Orden de casos de prueba y dependencia
Puedes establecer el orden y la dependencia de caso de prueba ejecución. Supongamos que tiene dos casos de prueba, testGuru99TC1 y testGuru99TC2, Y tu quieres testGuru99TC2 correr antes testGuru99TC1. Utilizar el dependsOnMethods atributo (o dependsOnGroups para encadenamiento a nivel de grupo) para corregir ese orden. Para un orden más amplio marco de automatización diseño, comparar JUnit vs TestNG, y revisa el encontrarElemento Consulte esta referencia si sus pruebas dependientes comparten localizadores.
<?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>
El TestNG tiempo de ejecución, alojado en testng.org, evalúa estas declaraciones antes de lanzar los hilos, por lo que los métodos dependientes siempre se inician después de que finalicen sus prerrequisitos.





