Trabajando con varios archivos testng.xml

Trabajando en un proyecto de código abierto GitHub creado para mostrar el funcionamiento del marco Selenium WebDriver con Java, a medida que creció el proyecto, surgió la necesidad de crear varios archivos testng.xml para ejecutar diferentes pruebas.

Estos varios archivos se crearon para separar las pruebas y colocar todas las pruebas relacionadas con un sitio web respectivo en un solo testng.xml (He utilizado diferentes sitios web de demostración para demostrar diferentes acciones que se pueden automatizar utilizando Selenium WebDriver).

Pensé en iluminar sobre el uso de varios archivos testng.xml y cómo ejecutar pruebas. Dado que Maven es la herramienta de construcción que se utiliza, se requiere un solo archivo testng.xml para ejecutar todas las pruebas del proyecto. También hubo casos que tuvieron que ser depurados para las fallas de prueba ejecutando un solo archivo testng.xml.

En este proyecto, he creado 9 archivos testng.xml diferentes que contienen varias pruebas, y estoy ejecutando todas las pruebas en estos 9 archivos testng.xml diferentes usando un solo archivo testng.xml. ¡Sí, eso es posible!

Así que, únase a mi viaje donde demostraré cómo ejecutar varios archivos testng.xml usando un solo archivo testng.xml. También echaré algo de luz sobre la ejecución de un solo archivo testng.xml de los 9 disponibles y ejecutarlo desde la línea de comandos utilizando Maven.

Ejecución de múltiples archivos testng.xml utilizando un solo archivo testng.xml

Primero vamos a centrarnos en ejecutar todas las pruebas con los 9 archivos testng.xml diferentes. La solución para esto es utilizar la etiqueta <suite-files> </suitefiles>  en su archivo testng.xml y proporcionar la ruta del otro archivo testng.xml  entre esta etiqueta. Aquí tiene el archivo de ejemplo para demostrar de lo que estoy hablando:

XML

 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Selenium 4 POC Tests ">
<suite-files>
    <suite-file path="testng-saucedemo.xml"/>
    <suite-file path="testng-automationpractice.xml"/>
    <suite-file path="testng-theinternet.xml"/>
    <suite-file path="testng-juice-shop.xml"/>
    <suite-file path="testng-lambdatestecommerce.xml"/>
    <suite-file path="testng-seleniumgrid-theinternet.xml"/>
    <suite-file path="testng-lambdatest-selenium-playground.xml"/>
    <!--        <suite-file path="testng-seleniumgrid-juiceshop.xml"/>-->
</suite-files>
</suite> 

Una vez que ejecute este archivo, ejecutará los respectivos testng.xml en el orden actualizado entre la etiqueta <suite-files>. Así, “testng-saucedemo.xml” se ejecutará primero, y luego, “testng-automationpractice.xml” se ejecutará, y así sucesivamente.

Todos los archivos testng.xml proporcionados en el ejemplo anterior tienen varias pruebas en ellos. Así, todas las pruebas dentro de los respectivos testng.xml  se ejecutarán y una vez completada la ejecución, se seleccionará el siguiente archivo XML para la ejecución.

Los siguientes son los contenidos del archivo testng-saucedemo.xml :

XML

 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Sauce Demo Website Tests" parallel="tests" thread-count="4" verbose="2">
<test name="selenium 4 Tests with Chrome Browser">
    <parameter name="browser" value="chrome"/>
    <classes>
        <class name="io.github.mfaisalkhatri.tests.saucedemo.SauceDemoTests">
            <methods>
                <include name="loginSauceDemoTest"/>
                <include name="logOutSauceDemoTest"/>
            </methods>
        </class>
    </classes>
</test> <!-- Test -->
<test name="selenium 4 Tests with Firefox Browser">
    <parameter name="browser" value="firefox"/>
    <classes>
        <class name="io.github.mfaisalkhatri.tests.saucedemo.SauceDemoTests">
            <methods>
                <include name="loginSauceDemoTest"/>
                <include name="logOutSauceDemoTest"/>
            </methods>
        </class>
    </classes>
</test> <!-- Test -->
<test name="selenium 4 Tests with Edge Browser" enabled="false">
    <parameter name="browser" value="edge"/>
    <classes>
        <class name="io.github.mfaisalkhatri.tests.saucedemo.SauceDemoTests">
            <methods>
                <include name="loginSauceDemoTest"/>
                <include name="logOutSauceDemoTest"/>
            </methods>
        </class>
    </classes>
</test> <!-- Test -->
<test name="selenium 4 Tests with Opera Browser" enabled="false">
    <parameter name="browser" value="opera"/>
    <classes>
        <class name="io.github.mfaisalkhatri.tests.saucedemo.SauceDemoTests">
            <methods>
                <include name="loginSauceDemoTest"/>
                <include name="logOutSauceDemoTest"/>
            </methods>
        </class>
    </classes>
</test> <!-- Test -->
</suite> <!-- Suite -->

Una vez que se ejecuten todas las pruebas actualizadas en este archivo XML (no importa si pasan o fallan), y se complete la ejecución, se seleccionará el siguiente archivo para ejecutar otro conjunto de pruebas.

No se soporta ejecutar archivos de suite en paralelo por testng.

Ejecutar un archivo testng.xml Simple Usando Maven

Tiene una opción en su IDE para ejecutar sus pruebas usando el archivo testng.xml mediante un clic derecho sobre él y seleccionando la opción para ejecutar las pruebas. Sin embargo, cuando se trata de ejecutar las pruebas en el pipeline CI/CD, esa opción no es adecuada, ya que necesita ejecutar las pruebas usando comandos en el pipeline automatizado.

Configurando Su Proyecto Para Ejecutar el Archivo suite-xml Usando la Línea de Comandos

Necesitamos configurar lo siguiente para poder ejecutar el archivo testng.xml usando Maven.

Actualizar el plugin Maven Surefire en su pom.xml:

Observe la etiqueta <SuiteXmlFile> en la captura de pantalla anterior. El valor para suiteXmlFile se establece como ${suite-xml}. Vamos a establecer el valor predeterminado para esta declaración en el bloque de propiedades del archivo pom.xml de la siguiente manera:

La ruta predeterminada para testng.xml se establece para el archivo que usamos en la sección anterior de este blog y hemos actualizado la ruta de suite-files en él.

Así, si ejecutamos el comando mvn clean install o mvn clean test, Maven seleccionará el archivo predeterminado testng.xml basado en la ruta de archivo actualizada en el bloque de propiedades y ejecutará todas las pruebas.

Ahora, la pregunta que viene a la mente es: “¿Qué debo hacer si quiero ejecutar cualquier otro archivo testng.xml, es posible hacerlo?”

La respuesta es “Sí”: podemos ejecutar cualquier archivo testng.xml en nuestro proyecto añadiendo -Dsuite-xml=<testng.xml file path> en nuestro comando mvn .

Recuerda, anteriormente habíamos configurado esto en nuestro bloque del plugin Maven Surefire en pom.xml.

Solo necesitamos pasar los valores para la variable de propiedad suite-xml en la línea de comandos, lo cual se puede hacer utilizando la opción -D en el comando mvn:

 
mvn clean test -Dsuite-xml=<testng.xml file path>

Ahora, intentemos hacerlo con la línea de comandos y ejecutar diferentes archivos testng.xml usando Maven desde la línea de comandos, tal como acabamos de aprender.

Ejecutaremos el archivo testng-internet.xml, comprobando que debería sobrescribir el testng.xml predeterminado existente, y ejecutar solo el que pasemos en el comando. Necesitamos pasar la ruta completa donde se guarda el testng.xml, y en nuestro caso, está disponible en la carpeta test-suite, por lo que la ruta completa es test-suites\testng-theinternet.xml. Aquí está el comando que ejecutaremos (asegúrate de estar en la ruta de la carpeta raíz del proyecto en la ventana de la línea de comandos antes de ejecutar el comando Maven):

Plain Text

 

mvn clean test -Dsuite-xml=test-suite\testng-theinternet.xml


La opción “-Dsuite-xml” se puede utilizar con otros comandos de Maven como los siguientes: mvn clean install/ mvn clean verify, etc.

Se ejecutaron las pruebas con éxito y los resultados se imprimieron en la consola. Dice que se ejecutaron 32 pruebas y se aprobaron con éxito.

Para confirmar que se seleccionó el archivo XML correcto y se ejecutaron las pruebas, vamos a ejecutar las pruebas para el archivo testng-theinternet.xml usando la IDE y comprobar el número de pruebas ejecutadas.

Podemos ver que se ejecutaron 32 pruebas y se aprobaron, lo que confirma que las pruebas que ejecutamos usando el comando mvn se ejecutaron correctamente para el archivo testng.xml que proporcionamos.

Conclusión

Podemos tener múltiples archivos testng.xml para separar las pruebas basadas en los diferentes módulos/sitios web en nuestro proyecto y estos múltiples archivos testng.xml se pueden ejecutar usando un solo archivo testng.xml.

Asimismo, podemos ejecutar un archivo testng.xml desde la línea de comandos usando el plugin Maven Surefire.

Source:
https://dzone.com/articles/working-with-multiple-testngxml-files