Ejecución paralela de pruebas en TestNG

Ejecución paralela de pruebas en TestNG
MIN
19 Mar 2024

En las pruebas automatizadas, a menudo queremos reducir el tiempo de ejecución de las pruebas para obtener resultados lo antes posible. Cuando ejecutamos pruebas Selenium utilizando el paquete testNG, por defecto las pruebas se ejecutan en serie. Pero testNG proporciona soporte inherente para ejecutar pruebas en paralelo. Con este tutorial, podremos realizar la ejecución paralela de pruebas en Selenium o en cualquier herramienta de automatización de pruebas compatible con Java.

Antes de empezar con la ejecución paralela, repasemos brevemente el archivo testNG.xml (quienes estén familiarizados con el archivo testng.xml pueden saltarse esta sección y pasar al siguiente párrafo: «Ejecución paralela de pruebas»).

El archivo testng.xml facilita la ejecución de pruebas y la agrupación de varias pruebas diferentes de la misma clase o de clases diferentes. Este archivo XML tiene varias etiquetas para suite, pruebas, clases y/o paquetes, siendo la etiqueta raíz suite.

Archivo de ejemplo testNG.xml :

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">

<suite name="ITtesterTestSuite" verbose="1" >

  <test name="parallelExecutionTests" >

    <classes>

       <class name="testsInParallel" />

    <class name="testsInParallel" />

    </classes>

  </test>

</suite>

Cuando haces clic con el botón derecho en el archivo testng.xml y lo ejecutas como un conjunto TestNG, TestNG encuentra las pruebas con la anotación @Test en la clase testsInParallel.java y comienza a ejecutar las pruebas.

Ejecutar pruebas paralelas

Para ejecutar las pruebas en paralelo, sólo tienes que añadir estos dos pares clave-valor en el conjunto:

  • parallel=»{métodos/pruebas/clases}»
  • thread-count=»{número de hilos que quieres ejecutar al mismo tiempo}».
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">

<suite name="ITtesterTestSuite" verbose="1" parallel="methods" thread-count="5">

  <test name="parallelExecutionTestsA" >

    <classes>

       <class name="testsInParallelA1" />

    <class name="testsInParallelA2" />

    </classes>

  </test>

  <test name="parallelExecutionTestsB" >

    <classes>

       <class name="testsInParallelB1" />

    <class name="testsInParallelB2" />

    </classes>

  </test>

</suite>

Veamos la finalidad de las tres opciones que pueden establecerse como valor del parámetro «paralelo» –

métodos – el valor del método para el atributo paralelo ejecuta todas las pruebas independientemente en hilos separados (máximo de hilos disponibles). En el ejemplo anterior, todos los métodos de prueba de las cuatro clases se ejecutarán en paralelo en un máximo de 5 subprocesos.

pruebas – el valor de la prueba ejecutará los métodos indicados en la bandera de prueba en el mismo hilo. En el ejemplo anterior, todos los métodos de prueba bajo la etiqueta «parallelExecutionTestsA» se ejecutan en el mismo hilo, y todos los métodos de prueba bajo la etiqueta «parallelExecutionTestsB» se ejecutan en el mismo hilo. Así, habrá dos hilos, cada uno de los cuales ejecutará los métodos de prueba en paralelo, pero independientemente el uno del otro, dentro de las pruebas parallelExecutionTestsA y parallelExecutionTestsB.

clase – el valor de clase activará todos los métodos de prueba enumerados en la clase en el mismo hilo y cada método de la clase se activará en otro hilo. Así que habría cuatro hilos ejecutando pruebas en cuatro clases: pruebasEnParaleloA1,pruebasEnParaleloA2,pruebasEnParaleloB1,pruebasEnParaleloB2.