Enmilocalfunciona

Thoughts, stories and ideas.

Cómo generar un informe en Allure Report e integración de resultados con XRay

Publicado por Cristina Lopez-Goicochea Juarez el

QAAllure ReportXRay

En este artículo mostraremos cómo crear y configurar un proyecto de automatización con Maven cuyos resultados de ejecución serán mostrados en un report de Allure. Asimismo, veremos la configuración del correspondiente job en Jenkins y cómo volcar el resultado de las pruebas en XRay.

Este proyecto de ejemplo realiza dos tests. El primer test busca en Google un término que provoca la obtención de resultados y comprueba que se obtienen correctamente. El segundo test, genera un error para conseguir que en el report de Allure se pueda visualizar el error un su correspondiente screenshot. Finalmente, veremos cómo se muestran los resultados en XRay.

Este proyecto lo podréis encontrar en: https://github.com/cristinalopezgj/allure-report-testng-xray-jenkins

Para ejecutar el proyecto ejecutaremos la siguiente sentencia:

mvn clean test  

Si lo ejecutamos dentro de un editor como Eclipse o IntelliJ, deberemos lanzar manualmente la sentencia para la generación del report de Allure. Para ello, nos ubicaremos en la ruta donde se ubica la carpeta "allure-results" y ejecutaremos la siguiente sentencia:

allure serve allure-results  

Configuración del proyecto

Crearemos un proyecto Maven y configuraremos en el pom.xml las siguientes librerías:

<properties>  
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>

    <webdrivermanager.version>3.8.1</webdrivermanager.version>
    <selenium.version>3.141.59</selenium.version>
    <testng.version>6.14.3</testng.version>
    <ashot.version>1.5.4</ashot.version>
    <allure.testng.version>2.12.0</allure.testng.version>
    <allure.version>1.5.4</allure.version>
    <aspectj.version>1.9.4</aspectj.version>
    <allure.jira.version>2.13.1</allure.jira.version>
    <converter.jackson.version>2.7.1</converter.jackson.version>
</properties>

<dependencies>  
    <dependency>
        <groupId>io.github.bonigarcia</groupId>
        <artifactId>webdrivermanager</artifactId>
        <version>${webdrivermanager.version}</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-java</artifactId>
        <version>${selenium.version}</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-support</artifactId>
        <version>${selenium.version}</version>
    </dependency>
    <dependency>
        <groupId>org.testng</groupId>
        <artifactId>testng</artifactId>
        <version>${testng.version}</version>
    </dependency>
    <dependency>
        <groupId>ru.yandex.qatools.ashot</groupId>
        <artifactId>ashot</artifactId>
        <version>${ashot.version}</version>
    </dependency>
    <dependency>
        <groupId>io.qameta.allure</groupId>
        <artifactId>allure-testng</artifactId>
        <version>${allure.testng.version}</version>
    </dependency>
    <dependency>
        <groupId>io.qameta.allure</groupId>
        <artifactId>allure-jira-commons</artifactId>
        <version>${allure.jira.version}</version>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>com.squareup.retrofit2</groupId>
        <artifactId>converter-jackson</artifactId>
        <version>${converter.jackson.version}</version>
    </dependency>
</dependencies>  

Aplicaremos también la configuración de los plugins necesarios:

<build>  
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>${maven.compiler.source}</source>
                <target>${maven.compiler.target}</target>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>3.0.0-M4</version>
            <configuration>
                <suiteXmlFiles>
                    <suiteXmlFile>testng.xml</suiteXmlFile>
                </suiteXmlFiles>
                <argLine>
                    -javaagent:"${settings.localRepository}/org/aspectj/aspectjweaver/${aspectj.version}/aspectjweaver-${aspectj.version}.jar"
                </argLine>
            </configuration>
            <dependencies>
                <dependency>
                    <groupId>org.aspectj</groupId>
                    <artifactId>aspectjweaver</artifactId>
                    <version>${aspectj.version}</version>
                </dependency>
            </dependencies>
        </plugin>
    </plugins>
</build>  

Dentro del plugin maven-surefire-plugin, configuraremos el report de Allure y la suite de TestNG a ejecutar. Para ello indicaremos en la configuración del plugin la ruta y nombre del fichero testng.xml a ejecutar y configuraremos la librería para la generación del report de Allure, además de indicar la propia dependencia dentro del plugin.

Por otro lado, el fichero testng.xml, ubicado en la raíz del proyecto tiene el aspecto siguiente:

<?xml version="1.0" encoding="UTF-8"?>  
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">  
<suite name="Allure TestNG Suite Example" verbose="1" thread-count="1" configfailurepolicy="continue">  
    <listeners>
        <listener class-name="com.example.test.utils.Listeners.TestListener"/>
    </listeners>
    <test name="Allure TestNG Test">
    <classes>
        <class name="com.example.test.Launch"/>
    </classes>
</test>  
</suite>  

En este fichero indicaremos, dentro de la suite, la lista de listeners que se ejecutarán según los eventos que configuremos en el proyecto. Para este caso, el listener "TestListener" actuará en consecuencia según el resultado obtenido en cada test, obteniendo el screenshot en caso de fallo y volcándolo en el report de Allure.

La clase "Launch.java", clase principal y que contiene los métodos @Test con los dos tests que forman el proyecto, tiene la estructura siguiente:

En la parte superior de la clase Launch vemos que está indicado el listener que hará de escucha de todas las acciones derivadas con el estado de los tests. Los tags @Severity, @Description y @Story son tags propios de Allure y nos servirán para dotar de información a los métodos en el report de Allure.

El @tag TmsLink corresponde a la issue de XRay, cuya integración explicaremos más adelante.

Creación del job en Jenkins

Configuraremos un job en Jenkins para lanzar el proyecto de automatización y visualizar los reports. Antes de nada, deberemos instalar el plugin de Jenkins "Allure Reports" desde la administración de Jenkins:

Una vez instalado, crearemos un job de estilo libre y configuraremos el acceso al código fuente del proyecto.
Configuramos la acción de ejecución con Maven:

Por último, configuramos el report de Allure tras la ejecución. Simplemente hay que indicar la ruta donde crearemos los reports. Es importante no crearlo dentro de la carpeta "target" ya que esa carpeta se elimina con cada ejecución y perderíamos el historial de ejecuciones:

Al ejecutar el job, que lógicamente por el error provocado acabará como failed, veremos que se nos crea un icono de Allure al lado de la ejecución. Al hacer clic podremos ver el informe generado:

Al hacer clic en el icono que aparece a la derecha de la ejecución podremos ver el informe de Allure completo:

Accediendo a Suites podremos ver la información completa de los tests:

En caso de errores podremos ver el screenshot generado automáticamente en el momento del error:

Accediendo a Graphs, podremos ver la información de una forma más gráfica:

Integración con XRay

Para realizar la integración con Jira, en primer lugar deberemos instalar el add-on "Allure for Jira" descargándolo del Marketplace de Atlassian o bien buscándolo desde el apartado de plugins de Jira. Este add-on es libre y no tiene licencia:

Una vez instalado correctamente, dentro de XRay, generaremos dos issues de tipo Test y una issue de tipo Test Execution:

Dentro de la issue de tipo Test Execution, encontraremos un botón Add, desde el cual añadiremos los dos tests creados anteriormente:

Una vez configurada la parte de XRay deberemos indicar en el proyecto de automatización, para cada uno de los tests, el identificador de la issue tipo Test. Si observamos la clase "Launch.java" veremos que cada test contiene el tag @TmsLink("idissue") donde "idissue" será el identificador de la issue tipo Test creada y asignada a cada caso:

Por último, deberemos modificar el job de Jenkins añadiendo variables de entorno referentes a la URL de Jira, credenciales y la issue de tipo Test Execution, que contiene a su vez, añadidos y vinculados, los dos tests creados.

Introducimos un parámetro, que será el identificador de la issue Test Execution:

Antes de la ejecución, añadimos las variables de entorno. Justo en la variable ALLUREXRAYEXECUTION_ISSUES, pasaremos el identificador del parámetro, la issue de XRay tipo Test Execution:

Al ejecutar los tests, si está todo configurado, veremos el Test Execution con el siguiente aspecto:

Conclusión

A modo de conclusión, Allure Reports nos permite visualizar los resultados de la ejecución de un proyecto automatizado de una forma más clara y gráfica, mostrando información relativa al tiempo de ejecución, steps ejecutados y screenshots en caso de error.

Asimismo la integración con XRay nos permite el control de los resultados de ejecución dentro de las issues definidas en XRay.

Si te ha gustado, ¡síguenos en Twitter para estar al día de próximos posts!