Pruebas funcionales con Geb en una aplicación web Java

Escrito por pico.dev el , actualizado el .
java planeta-codigo programacion
Comentarios

Geb
Java

Las pruebas automatizados permiten comprobar que una aplicación se comporta de la manera esperada en los casos probados, creando pruebas automatizadas se evita hacer las aburridas y repetitivas pruebas manuales que consumen gran cantidad de tiempo. Hay diferentes categorías de pruebas: unitarias, de integración y las funcionales. Para las pruebas unitarias y de integración en la plataforma Java unas de las más populares herramientas son JUnit y Spock, para las pruebas funcionales están Selenium y la herramienta que explicaré en este artículo Geb que puede usarse junto con Spock haciendo que el código de los teses sea muy descriptivo.

Geb soporta una APi similar a la que emplea jQuery para la interacción con los elementos de la página bajo pruebas. Este ejemplo prueba a ir a la página del buscador Google y que el resultado es el esperado usando alguna de las múltiples formas de interacción con el contenido de la página.

Para hacer más sencillos las pruebas se pueden describir las páginas, sus URLs y los elementos que contienen. Para ello hay que crear una clase que extienda de Page y definir propiedades como url, at y content, se pueden incluso definir métodos. En la documentación de Geb está más detallado la definición de las páginas. También se pueden crear módulos para definir elementos comunes a varias páginas.

La automatización de las pruebas además de comprobar que la página devuelva es la esperada, en el caso de estos ejemplo con una propiedad meta o con el título de la página, consiste en realizar las interacciones que un usuario realizaría como introducir datos en formularios, hacer clic en elementos de una página y comprobar la presencia de elementos que valide la prueba. Con esta herramienta se pueden probar los casos y flujos funcionales más importantes de la aplicación como sería el proceso de compra en una aplicación de comercio electrónico y la búsqueda, alta y modificación de un registro en la aplicación de gestión.

En este ejemplo se realiza una búsqueda en Google y se comprueba el resultado devuelto. Primero se accede a ella con la sentencia to, se introduce el texto de búsqueda Chuck Norris y se pulsa el botón de búsqueda. La comprobación consiste en asegurar que la página devuelta es la página de resultados de búsqueda con la sentencia at y que el primer resultado de la búsqueda contiene la palabra Chuck, GoogleHomePage define la página de búsqueda, GoogleResultsPage la página de resultados y GoogleSearchSpec contiene la interacción de la prueba.

Las dependencias de Geb necesarias a incluir en el archivo de configuración de la herramienta de gestión del proyecto usando Gradle son las siguientes:

Usando una aplicación con Spring Boot para ejecutar los teses de integración se debe iniciar la aplicación web previamente con la anotación SpringBootTest mostrado en el caso IndexSpec además de excluir los teses de integración y los unitarios de los funcionales. En el ejemplo con la tarea de Gradle integrationTest se ejecutan los teses de funcionales de Geb.

Con Gradle el informe de resultados de las pruebas se genera en build/reports/tests/integrationTest en una colección de páginas HTML con el siguiente aspecto. Si hubiese algún error se mostraría un mensaje descriptivo del fallo ocurrido. La prueba IndexSpec tarda medio minuto ya que previamente ha de iniciar el servidor de aplicaciones con la aplicación, en este caso usando Spring Boot.

Informe de las pruebas funcionales

Algunas otras herramientas que son ampliamente usadas en proyectos Java son las que comentaba en el artículo Nueva visita a herramientas para un proyecto Java.

El código fuente completo del ejemplo puedes descargarlo del repositorio de ejemplos de Blog Bitix alojado en GitHub y probarlo en tu equipo ejecutando el comando ./gradlew integrationTest.