Ejecución paralela en Selenium: Manejo de sesiones y TestNG Dependencia
Para comprender cómo ejecutar scripts en paralelo, primero comprendamos
¿Por qué necesitamos el manejo de sesiones?
Durante la ejecución de la prueba, el 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.
En tal situación, necesitamos un mecanismo mediante el cual nuestras dos ejecuciones diferentes no se superpongan entre sí. Esto se puede lograr usando el manejo de sesiones en Selenium.
Cómo lograr el manejo de sesiones en Selenium ¿Conductor web?
Si revisa 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 ().
Entonces, todo lo que hagamos después de esto se ejecutará solo en ese particular Firefox sesión del navegador.
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"
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í:
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"); } }
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>
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>
Resum
- 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.