miércoles, 23 de mayo de 2018

REST Assured vs. JMeter: Una comparación de las Herramientas de Prueba de REST

Este articulo fue escrito por Nemanja Veskovic. Originalmente publicado en Toptal.
Probar las API de transferencia de estado representacional (REST) puede ser complicado. Muchos de los que recurren a la prueba manual de API REST pasan por alto los detalles y se pierden formas de ahorrar tiempo.
Cualquier servicio REST API que se pruebe correctamente tendrá estas áreas cubiertas:
  • Prueba de si el servicio API cumple con los estándares REST
  • Prueba de códigos de respuesta de servicio API
  • Afirmación del contenido de respuesta del servicio API
  • Evaluación comparativa del rendimiento del servicio API
Herramientas para la prueba REST
Para esto necesitas las herramientas adecuadas. Apache JMeter y REST Assured son dos herramientas populares de prueba REST para probar los servicios API REST. Puedes obtener más información sobre cómo puede usarlos en la práctica desde aquí y aquí.
En este artículo, aprenderás los pros y los contras de estas dos herramientas y dónde se ajustan mejor en sus proyectos REST API existentes.

Facilidad de configuración

Hay un requisito previo: JMeter y REST Assured requieren Java, por lo que debe tener Java instalado en su computadora para poder ejecutar JMeter o REST Assured.
Instalar Apache JMeter es muy simple: ve a la página de descarga, elige el ZIP o TAR, descarga el archivo, descomprímelo y ya estás listo para comenzar .
Ve a la carpeta donde ha descomprimido el archivo, a la subcarpeta bin y ejecuta jmeter.bat (o similar para tu sistema operativo, si no es Windows). Para obtener información más detallada sobre cómo configurar Apache JMeter, consulta esta página.
Instalar REST Assured es una experiencia un poco diferente. REST Assured no es una herramienta independiente. Es una biblioteca de Java. Para usarlo, debes configurar un nuevo proyecto Java e incluirlo como una biblioteca para su proyecto. Por supuesto, hay soporte para muchas herramientas de compilación, por lo que puede simplemente apuntar tu resolvedor de dependencias a algún repositorio público (Maven). Puedes encontrar información más detallada sobre cómo configurar REST Assured [aquí](https://semaphoreci.com/community/tutorials/testing-rest-endpoints-using-rest-assured.

Documentación

Apache JMeter documentación se puede encontrar en el sitio web oficial de JMeter. Proporciona una documentación bastante completa desde el inicio hasta funciones complejas como oyentes. Además, en el sitio web oficial de JMeter, puedes encontrar enlaces a algunos recursos muy ricos, como videos tutoriales. Si te gusta menos leer y más mirar, esto definitivamente es una ventaja para ti.
La documentación de REST Assured, como la herramienta/biblioteca en sí, se puede encontrar dentro del repositorio de Github. Tiene una gran lista de características enumeradas en la documentación en línea con explicaciones muy detalladas de cómo lograr algo. Sin embargo, toda la documentación es una gran página web, no la forma más fácil de explorar una herramienta.

Creación y mantenimiento automáticos de pruebas REST

Apache JMeter, como una aplicación independiente con una interfaz gráfica de usuario (GUI), le permite crear sus pruebas desde la GUI. Esto puede ser útil especialmente debido a la jerarquía de entidades introducida desde JMeter: todo lo que cree dentro de su prueba se mostrará en una representación similar a un árbol en la GUI de JMeter.
Para crear una prueba, uno no tiene que tener ninguna habilidad de codificación. Sin embargo, la GUI no limita ninguna de las posibilidades con respecto a la planificación de pruebas. Si aún desea agregar alguna programación/flujo personalizado, los componentes de BeanShell le permitirán hacer eso.
Captura de pantalla de JMeter GUI
Cuando guardes su proyecto JMeter, todo lo que hayas creado se guardará en un gran archivo XML (con la extensión .jmx). En general, incluso para un pequeño cambio en una de las pruebas, (muy probablemente) tendrás que volver a abrir el proyecto en la GUI para realizar el cambio.
Si necesitas colaborar con otros en el mismo archivo de proyecto JMeter, este gran archivo XML no será fácil de mantener utilizando cualquiera de los sistemas de gestión de control de origen (SCM) (como Git, SVN, Perforce, etc.).
REST Assured por otro lado, requiere habilidades de codificación Java para crear las pruebas. No hay una GUI fácil de usar para la creación de pruebas. Sin embargo, REST Assured te permite escribir las pruebas usando el lenguaje Gherkin (sintaxis de Given-When-Then), por lo que incluso si necesitas algunas habilidades de codificación Java, las pruebas son bastante legibles.
given(http://via.placeholder.com/2000x200?text=image+placeholder).
    config(RestAssured.config(http://via.placeholder.com/2000x200?text=image+placeholder).jsonConfig(jsonConfig(http://via.placeholder.com/2000x200?text=image+placeholder).numberReturnType(BIG_DECIMAL))).
when(http://via.placeholder.com/2000x200?text=image+placeholder).
    get(“/price”).
then(http://via.placeholder.com/2000x200?text=image+placeholder).
    body(“price”, is(new BigDecimal(12.12)));
Como REST Assured es una biblioteca y las pruebas están escritas en realidad en Java, puedes organizar tus pruebas en archivos Java separados, por lo que cuando necesites cambiar una prueba, solo necesitas abrir un archivo. No necesitas una GUI, por lo que puedes editar la prueba fácilmente incluso a través de un terminal SSH. La colaboración con otros es bastante simple porque es fácil mantener los archivos Java usando cualquier SCM.

Tipos de pruebas REST

JMeter es bien conocido como una herramienta de prueba de rendimiento para probar aplicaciones y servicios web. Tiene buenas opciones de fábrica, como informes con diferentes tipos de gráficos que puedes usar para mostrar las métricas de prueba de rendimiento.
Captura de pantalla de JMeter Response Times
Por otro lado, tampoco es el escenario de uso principal para JMeter. Puede crear pruebas funcionales para API REST con JMeter, incluida la aserción de respuesta.
El escenario de uso primario de REST Assured es para las pruebas funcionales de los servicios API REST. Incluso viene con su propio mecanismo de afirmación de respuesta (la sintaxis de Gherkin). Como REST Assured es una biblioteca Java, puede integrarse fácilmente con pruebas unitarias.
Cuando se trata de pruebas de rendimiento, REST Assured no admite pruebas de rendimiento listas para usar. Sin embargo, si deseas utilizarlo para las pruebas de rendimiento, deberás desarrollar tu propio marco de trabajo personalizado para realizar pruebas de rendimiento en REST Assured.

Ejecución de pruebas

Las pruebas de JMeter se pueden invocar de dos maneras.
Desde la interfaz de usuario haciendo clic en el botón Ejecutar:
Captura de pantalla del boton “ejectuar” de JMeter
Desde la línea de comando:
jmeter -n -t your_script.jmx
La recomendación oficial de JMeter es no ejecutar las pruebas de rendimiento con la GUI, ya que las pruebas se ejecutarán más lentamente (en términos de número de solicitudes por segundo) en comparación con ejecutarlas desde la línea de comandos.
REST Assured, por otro lado, requiere un corredor de prueba por separado, por ejemplo jUnit o TestNG (o de cualquier otra manera para ejecutar el código de Java).
De Eclipse usando TestNG:
Captura de pantalla de REST Assured Eclipse
Desde la línea de comando usando, por ejemplo, la herramienta de compilación Ant:
ant run-tests

Tipos de Reportes

Apache JMeter debido a su propósito principal tiene una gran cantidad de tipos de informes que puedes crear a partir de los resultados de sus pruebas. Dado que puedes ejecutar pruebas de rendimiento desde JMeter, las métricas de rendimiento generalmente se muestran usando gráficos como este:
JMeter Performance Report
Puedes obtener más información sobre los informes de JMeter y los tipos de informes que puedes crear desde aquí.
REST Assured no crea ningún informe, por lo que depende de ti y del marco de prueba que elijas. Sin embargo, cuando se integra con algún marco de prueba de unidades, puedes obtener informes útiles en formato HTML, texto o XML.
Informe REST Assured HTML

Integración con Jenkins

Cuando se trata de la integración continua de los productos bajo prueba, es muy importante integrar tu marco de automatización de pruebas con las herramientas de CI tanto para ejecutar pruebas como para informar sobre los resultados.
Las pruebas automatizadas de JMeter se pueden integrar fácilmente con Jenkins utilizando el plugin Performance que te permiten configurar acciones Post-build y obtener un bonita página de tablero de una página de trabajo de Jenkins.
Captura de pantalla de JMeter Jenkins
REST Assured también se puede integrar fácilmente con Jenkins porque éste tiene complementos para casi todos los frameworks de prueba; por ejemplo, el plugin TestNG que nuevamente puede crear un cuadro de tendencias sólido para los resultados de las pruebas.
Captura de pantalla de REST Assured Jenkins

Actividad comunitaria

Esta es una categoría que no se puede medir fácilmente. La actividad de la comunidad depende de varios factores, como el vencimiento de la herramienta o el número de contribuyentes.
Apache JMeter tiene una comunidad más grande hoy en día. Esto se debe principalmente al hecho de que JMeter se presentó en el mercado hace mucho tiempo y se considera un estándar de la industria cuando se trata de pruebas de rendimiento de aplicaciones y servicios web. JMeter publica lanzamientos oficiales cada 5-6 meses. Su repositorio de GitHub es muy activo, con nuevas confirmaciones diariamente. JMeter usa Bugzilla como rastreador de problemas y tiene una lista de problemas abiertos que se cambian con frecuencia. Hay más de 23000 resultados para JMeter en la búsqueda StackOverflow. Desde los sitios de redes sociales, JMeter tiene una cuenta oficial de Twitter. En Facebook y LinkedIn, no hay una cuenta oficial para JMeter, pero hay dos grupos, el mayor de los cuales es este grupo de Facebook y este grupo de LinkedIn.
REST Assured está llegando a la etapa principal y se ha convertido en la primera opción, una recomendación de múltiples fuentes cuando se trata de automatizar las pruebas funcionales del servicio REST API. REST Assured ha estado publicando lanzamientos oficiales una vez cada 6 meses durante los últimos dos años. El repositorio de GitHub tiene muchos contribuyentes y es un poco menos activo que el de JMeter, pero también es muy activo. REST Assured está rastreando problemas en el repositorio GitHub, así que todo está en un solo lugar. En StackOverflow, hay más de 2000 resultados de búsqueda para REST Assured, por lo que podemos decir que es significativamente menor en comparación con los resultados de búsqueda de JMeter. En cuanto a los grupos de redes sociales, solo el grupo de LinkedIn se encontró con un número significativamente menor de miembros en comparación con JMeter. La comunidad REST Assured puede no ser tan grande como la comunidad JMeter, pero es muy activa.

Resumen

Tanto JMeter como REST Assured tienen sus ventajas entre sí. Pero según el proyecto en el que esté trabajando, uno será mejor que el otro para su automatización de prueba REST API. Ambos son muy robustos, tienen opciones de prueba útiles, cuentan con buenas capacidades de generación de informes y pueden integrarse fácilmente con marcos de prueba personalizados.
Aquí hay un resumen de todos los criterios de comparación explorados en este artículo para estas dos herramientas populares de prueba REST:

 Apache JMeterREST Assured
Requiere habilidades de codificaciónNoSi (Java)
Doc completoSiSi
Pruebas funcionalesSi (pero excesivo)Si
Pruebas de rendimientoSiNo (fuera de la caja)
Adecuado para SCM (Git, P4...)NoSi
Informes de las pruebasSiNo
Integración con herramientas de CISiSi
Integración con pruebas unitariasNoSi
Paralelización de pruebaSiSi
Actividad comunitariaSi

No hay comentarios:

Publicar un comentario

El administrador se reserva el derecho de publicar los mensajes