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.

  • 🧩 Principio clave: Cada nueva instancia de WebDriver genera un sessionId nuevo, por lo que dos controladores nunca comparten comandos ni cookies en la misma máquina.
  • ⚙️ Implementación: Establezca parallel=”methods” (o tests, classes, instances) más thread-count en el TestNG Etiqueta suite de testng.xml para distribuir la ejecución.
  • 🧵 Paralelismo: Utilice un WebDriver por cada método @Test para evitar condiciones de carrera en ventanas de navegador compartidas durante ejecuciones simultáneas.
  • 🔗 Dependencia: Ordena las pruebas con dependsOnMethods dentro de las etiquetas include de testng.xml o la anotación @Test cuando un método deba preceder a otro.
  • 🤖 Uso de la IA: Los sistemas modernos de IA predicen el número óptimo de hilos, los métodos paralelos seguros para grupos y detectan candidatos inestables a partir de datos históricos de ejecución.

Cómo ejecutar en paralelo en Selenium

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.

Manejo de sesiones

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.

Lograr el manejo de sesiones en Selenium Controlador web

Cada comando posterior se ejecuta únicamente dentro de esa sesión particular del navegador.

Lograr el manejo de sesiones en Selenium Controlador web

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.

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/");
    }
}

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.

Ejecute pruebas paralelas con Selenium

El atributo parallel de la etiqueta suite acepta cuatro valores:

Valor de atributoSignificado
pruebasTodos Casos de prueba dentro de un etiqueta de la las pruebas El archivo XML se ejecuta en paralelo.
privadasTodos los casos de prueba dentro de un Java Las clases se ejecutan en paralelo.
métodosTodos los métodos anotados con @Test se ejecutan en paralelo.
instanciasLas 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:

Ejecute pruebas paralelas con Selenium

PruebaGuru99MultipleSession.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 (métodos paralelos)
<?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.

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

Preguntas Frecuentes

Una sesión es un ID de sesión único que se genera cada vez que se crea una nueva instancia de WebDriver. Cada comando de ese controlador se dirige a la sesión del navegador correspondiente, aislando así una prueba de otra.

El atributo parallel de la etiqueta suite acepta pruebas, clases, métodos o instancias. TestNG Crea múltiples hilos (según el número de hilos configurado) y ejecuta la unidad elegida simultáneamente, reduciendo el tiempo total de ejecución.

Utilice el atributo dependsOnMethods dentro de la etiqueta include de testng.xml, o @Test(dependsOnMethods = “name”) en el código. TestNG Primero ejecuta el requisito previo y, en caso de fallo, omite la prueba dependiente.

Las herramientas de IA agrupan las pruebas relacionadas, predicen el número óptimo de subprocesos a partir de tiempos de ejecución anteriores y reordenan los conjuntos de pruebas para que las pruebas lentas comiencen primero, lo que reduce el tiempo total de ejecución del proceso de compilación.

Sí. La IA analiza los gráficos de llamadas y los registros históricos de fallos para sugerir enlaces dependsOnMethods, señalar dependencias circulares y proponer grupos paralelos seguros, lo que reduce el mantenimiento manual de testng.xml.

Resumir este post con: