Integración de test de QUnit con Selenium y JUnit 4

Como todo el mundo sabe cada día está más de moda el TDD, tanto del lado del servidor como del cliente, y para esto integrar los resultados de los test de QUnit en el reporte de los test de JUnit resulta muy útil.
Integración de los resultados de los test de QUnit en el reporte de JUnit

En el de desarrollo funcionalidades en javascript, cada vez más importantes debido a la proliferación de SAAS, una buena cobertura de test pasa de ser algo muy interesante a algo vital dado el carácter caótico que pueden llegar a adquirir desarrollos en este lenguaje.
Por este motivo para cubrir las necesidades de testing en javascript han surgido diversas herramientas entre las que se encuentra  QUnit. Uno de sus puntos flojos es la dificultad de integrar sus resultados con los de JUnit, lo cual es de gran utilidad a la hora de hacer testing de integración/funcional.
Lo que planteo es una forma sencilla de integrar los resultados de los test de QUnit en el reporte de test de JUnit, pensando sobretodo en entornos de integración continua como el que puede montarse con un Jenkins.

La técnica que voy a exponer consiste en crear test JUnit 4 usando como runner Parameterized.class en combinación con Selenium, que se encarga tanto de parametrizar los test JUnit como de acceder al resultado de los test de QUnit.

Al que le interese puede descargarse un proyecto web maven con la prueba de concepto del siguiente repositorio de GitHub -->  https://github.com/andrestraspuesto/PruebaConceptoQUnitSelenium.git

A continuación se indican puntos clave para aplicar esta técnica:

Constructor estático
  1. Tener instalado el plugin de Selenium en el navegador, en el caso del ejemplo Firefox, así como las librerías necesarias.
  2. Crear en la clase de test de JUnit un constructor estático en el que se utiliza Selenium para lanzar los test de QUnit y obtener los parámetros de nombre de test e identificador de cara a poder parametrizar la clase de test de JUnit.
    Parametrización de los test
  3. El método testValues anotado con Parameter, que debe devolver un collection de arrays con los parámetros que debe usar el runner para crear los test de JUnit.
  4. Una definición de test que acceda por xpath mediante selenium al resultado de test que corresponda. Con definir uno al estar parametrizado se cubren todos los test de QUnit.
Cabe destacar que se trata de un código fácilmente reutilizable y sostenible debido a que la parametrización del test JUnit se hace de forma automática en el constructor estático, sin necesidad de indicarle los test de QUnit que debe integrar.

Es importante tener en cuenta que la página de resultados de QUnit puede tardar en cargarse, sobre todo cuando se trata del testeo de funcionalidades asíncronas, por este motivo se ha colocado un constructor estático en el que se impone una condición de espera hasta que han acabado de ejecutarse todos los test, sería interesante además añadir un tiempo máximo de espera, que si se alcanza cierre el navegador lanzado por Selenium y produzca un fail, para evitar dejar colgados servidores en la máquina de integración.

En el siguiente vídeo he colgado una demo del resultado de esta técnica.


No hay comentarios:

Publicar un comentario