Ejecución paralela en Selenium: manejo de sesiones y dependencia de TestNG

Para comprender cómo ejecutar scripts en paralelo, primero comprendamos

¿Por qué necesitamos el manejo de sesiones?

Durante la ejecución de la prueba, Selenium WebDriver tiene que interactuar con el navegador todo el tiempo para ejecutar comandos determinados. En el momento de la ejecución, también es posible que, antes de que se complete la ejecución actual, alguien más inicie la ejecución de otro script, en la misma máquina y en el mismo tipo de navegador.

Manejo de sesiones

En tal situación, necesitamos un mecanismo mediante el cual nuestras dos ejecuciones diferentes no se superpongan entre sí. Esto se puede lograr utilizando el manejo de sesiones en Selenium.

¿Cómo lograr el manejo de sesiones en Selenium WebDriver?

Si verifica el código fuente de Selenium WebDriver, encontrará una variable denominada "sessionId". Cada vez que creamos una nueva instancia de un objeto WebDriver, se generará un nuevo 'sessionId' y se adjuntará con ese objeto en particular. Firefox/Chrome/IE Controlador ().

Logre el manejo de sesiones en Selenium WebDriver

Entonces, todo lo que hagamos después de esto se ejecutará solo en ese particular Firefox sesión del navegador.

Logre el manejo de sesiones en Selenium WebDriver

Como se trata de una funcionalidad incorporada, no existe una necesidad explícita de asignar la identificación de la sesión.

Ejemplo de código: Aquí se generarán dos sesiones diferentes para dos WebDriver diferentes.

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("http://demo.guru99.com/V4/");
    
    //Second session of WebDriver
    WebDriver driver2 = new FirefoxDriver();
    //Goto guru99 site
    driver2.get("http://demo.guru99.com/V4/");
}
}

Cómo ejecutar pruebas paralelas con Selenium

Hay situaciones en las que desea ejecutar varias pruebas al mismo tiempo.

En tales casos, se puede utilizar el atributo "paralelo"

Ejecute pruebas paralelas con Selenium

El atributo paralelo de la etiqueta suite puede aceptar cuatro valores:

pruebas Todos los casos de prueba dentro de la etiqueta de Pruebas El archivo xml se ejecutará en paralelo.
privadas Todos los casos de prueba dentro de un Java la clase se desarrollará en paralelo
métodos Todos los métodos con la anotación @Test se ejecutarán en paralelo.
instancias Los casos de prueba en la misma instancia se ejecutarán en paralelo, pero dos métodos de dos instancias diferentes se ejecutarán en subprocesos diferentes.

El atributo thread-count le permite especificar cuántos subprocesos deben asignarse para esta ejecución.

Ejemplo completo: en este ejemplo, tres casos de prueba se ejecutarán en paralelo y completarán los datos de inicio de sesión en http://demo.guru99.com/

El proyecto completo se verá así:

Ejecute pruebas paralelas 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("http://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("http://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("http://demo.guru99.com/V4/");
        //find user name text box and fill it
        driver.findElement(By.name("uid")).sendKeys("Driver 3");
        
        }        
}

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

Orden de casos de prueba y dependencia

Puede establecer el orden y la dependencia de Caso de prueba ejecución.

Supongamos que tiene dos casos de prueba, "testGuru99TC1" y "testGuru99TC2" y desea ejecutar el caso de prueba "testGuru99TC2" antes de "testGuru99TC1". En ese caso usaremos el atributo 'dependsOnMethods' para crear dependencia y orden de ejecución.

<?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>

Resumen

  • Se crea un nuevo ID de sesión para una nueva instancia de WebDriver.
  • Una sesión se vinculará con un navegador en particular.
  • Usando el atributo thread y paralelo, ejecuta sus scripts en paralelo.
  • Puede utilizar la dependencia de atributos para establecer el orden de prueba de ejecución.