Testing funcional con SoapUI y Groovy

En este tutorial veremos cómo realizar testing funcional con SoapUI y Apache Groovy.

Índice de contenidos

1. Introducción

En este tutorial veremos cómo incorporar test funcionales a un API REST con la herramienta open source SoapUI utilizando scripts en Apache Groovy. SoapUI es una potente herramienta con muchas posibilidades, ya os hemos contado algunas de ellas en los diferentes tutoriales, pero hoy os mostraremos la potencia del scripting utilizando Groovy. Desarrollaremos un par de tests funcionales de un API en un escenario end to end.

Disponéis del código fuente en el siguiente enlace.

2. Entorno

El tutorial está escrito usando el siguiente entorno:

  • Hardware: Portátil Mac Book Pro 15″ (2,5 Ghz Intel Core i7, 16 GB DDR3)
  • Sistema Operativo: Mac OS Sierra 10.12.6
  • SoapUI 5.3.0
  • Groovy 2.1.7
  • H2 versión 1.4.196

3. Definiciones

Dependiendo de con quién hables puede haber ciertos matices con respecto a lo que se entiende por test funcionales. Os hago este pequeño inciso porque muchas veces los test no tienen un objetivo claro y no aportan la seguridad que necesitamos. Para nuestro tutorial me basaré en la definición que se utiliza en la comunidad TDD: “Un test funcional es un subconjunto de los tests de aceptación. Es decir, comprueban alguna funcionalidad con valor de negocio.”

4. Groovy

Groovy es un lenguaje dinámico opcionalmente tipado que se ejecuta sobre la JVM, tiene características que están inspiradas en lenguajes como Python, Ruby y Smalltalk y utiliza una sintaxis similar a Java. Su sintaxis permite reducir la cantidad de código a desarrollar. A diferencia de otros lenguajes alternativos, está diseñado para ser un complemento, no un sustituto de Java. Y no… no es Java sin los puntos y coma. 😉

5. API REST a probar

En este tutorial utilizaremos un API REST para la gestión de usuarios securizada con JWT. Disponéis de los detalles de la misma en el siguiente enlace. En esta ocasión utilizaremos una base de datos H2 en modo servidor (estará escuchando en un puerto) para simular un servidor real de BD y poder acceder directamente por JDBC.

Nuestro testing funcional verificará que el API está debidamente securizada y que registra la información correctamente en la BD. Como hemos dicho anteriormente estas pruebas se centran en los requisitos de negocios.

Para comenzar, necesitaremos iniciar la base de datos en modo servidor. En la web de H2 podemos ver todos los detalles acerca de la misma, para nuestro ejemplo basta con arrancarla en modo servidor. A continuación, arrancaremos nuestra API con Spring Boot

Por último, tendremos que copiar el jar de H2 en las librerías de SoapUI para que podamos acceder por JDBC a la BD. Consultad la ruta concreta, en mi caso está en $SOAPUI_HOME/Contents/java/app/lib/ . Ya podemos arrancar SoapUI.

Estructura del proyecto SoapUI

6. Scripting con SoapUI

Para realizar las pruebas generamos un proyecto de tipo REST y declaramos las URLs (recursos) que se utilizan en el API. A continuación, creamos el testsuite y los testcase que se van a utilizar. Como podéis observar en la siguiente imagen, los test están compuestos de llamadas y scripts. A continuación, podemos ver la estructura del proyecto.

Por ejemplo, en el testcase de login, lanzamos una llamada de login y validamos con el script la respuesta devuelta. El script verifica las cabeceras de la respuesta para poder afirmar que disponemos de un token (JWT) tras la autenticación. En el script ValidarLogin podéis observar cómo se accede al API Java de SoapUI para recuperar la repuesta HTTP e incorporar las validaciones correspondientes. ¡Todo ello en 4 líneas!

ValidarLogin

En el test de alta de Usuario observamos cómo se realiza primeramente el login y se utiliza el token proporcionado por el login para realizar el alta de un usuario y para recuperar la información del mismo.

Recuperar JWT del Login

En el script ValidarListado podemos acceder al JSON devuelto en la consulta de un usuario y navegar por el resultado de una forma sencilla.

ValidarListado

Para concluir con el script de limpieza restauramos el estado inicial eliminando el usuario dado de alta accediendo por JDBC directamente a la base de datos. ¡ Imaginad que tuviésemos que realizar este mismo script con Java !

Limpieza BD

7. Conclusiones

Aunque una parte de las validaciones desarrolladas se pueden realizar utilizando directamente los formularios de SoapUI (puede que haga falta la versión de pago), hemos visto que con Groovy podemos realizar dichas validaciones de una forma muy simple. Groovy permite acceder a todo el ecosistema Java e incorpora funcionalidades que simplifican el desarrollo de los scripts.

Los test funcionales son una pequeña parte de los test a realizar e intentan reproducir la interacción con el usuario. Tened en cuenta que son frágiles en la medida que cualquier cambio externo (cambio en la password del usuario, modificación en la base de datos…etc.) rompe dicho test pero son muy útiles para verificar que todas las piezas encajan. Además, con el plugin para Maven podéis incorporar estos test al ciclo de vida de Maven para que se ejecuten en el momento y entorno adecuado.

Espero que os sirva e incentive el uso de test en vuestros desarrollos.

8. Referencias