Seminario web destacado: MISRA C++ 2023: todo lo que necesita saber | Vea ahora

De cero a héroe: una guía de prueba de GraphQL para desarrolladores

Foto de cabeza de Grigori Trofimov, arquitecto senior de soluciones de Parasoft
8 de mayo de 2023
8 min leer

Lograr pruebas GraphQL simplificadas puede ser posible si emplea la automatización de pruebas. Siga leyendo para descubrir cómo Parasoft SOAtest simplifica la creación, administración y orquestación de pruebas GraphQL.

Probar los endpoints de GraphQL es tan necesario como cualquier otra prueba de endpoint y las pruebas automatizadas están aquí para ayudar. ¡Exploremos cómo probar los puntos finales de GraphQL con la automatización de pruebas!

¿Qué es GraphQL?

GraphQL es un lenguaje de consulta para API que fue desarrollado por Facebook a partir de 2012 para resolver un problema específico: con el auge de los teléfonos inteligentes y los navegadores web móviles, el uso de llamadas API RESTful era lento e ineficiente, especialmente en redes móviles. Múltiples llamadas de API a múltiples puntos finales tomaban tiempo, y a menudo devolvían más información de la necesaria o no la suficiente. Las grandes cantidades de datos que se devolvieron, combinadas con varias llamadas a la API, dieron como resultado una experiencia de usuario deficiente.

Cuando se implementó en la aplicación de Facebook para iOS en 2015, el mundo de la tecnología vio las ventajas de la nueva tecnología, lo que resultó en una rápida adopción por parte de muchas empresas líderes. En 2015, GraphQL era de código abierto y, en 2019, se creó GraphQL Foundation para seguir desarrollando la especificación y las implementaciones de referencia. Aunque originalmente se diseñó teniendo en cuenta la informática móvil, la implementación se ha extendido a la informática de escritorio y servidor. La adopción de GraphQL se ha ampliado para incluir empresas y organizaciones como GitHub, Pinterest, Intuit, Coursera y Shopify.

GraphQL frente a las API REST tradicionales

Hay muchas ventajas que GraphQL puede proporcionar sobre las interfaces API REST tradicionales. Si bien cada implementación de tecnología tiene sus ventajas y desventajas, GraphQL ofrece más flexibilidad para recuperar información. Una sola consulta de GraphQL bien escrita puede devolver información que requeriría varias llamadas a la API RESTful con solicitudes HTTP. Los investigadores y desarrolladores han descubierto que las llamadas de GraphQL devuelven conjuntos de datos que son un 90 % más pequeños que el uso de API RESTful para adquirir los mismos datos.

Cuando utiliza una API RESTful para recuperar datos, a menudo tiene que realizar varias llamadas a la API para obtener toda la información que busca. Por ejemplo, si está iniciando sesión en su banco, primero debe obtener su número de cliente. Una vez que tenga su número de cliente, puede obtener su número de cuenta. Desde allí, puede obtener el saldo de su cuenta:

Imagen que muestra el código cuando se usa una API RESTful para recuperar datos del saldo de la cuenta.

No hay nada de malo con las API REST, pero las múltiples llamadas API suelen ser lentas, con muchos datos e ineficientes. En el ejemplo anterior, para obtener el saldo de su cuenta bancaria, tuvo que crear una secuencia de tres llamadas API encadenadas, cada una de las cuales es una solicitud adecuada y una respuesta completa definida por el esquema. Una solicitud de GraphQL es más sencilla y específica, ya que trata solo los tres valores de ID de cliente, ID de cuenta y saldo:

Imagen del código lean GraphQL para datos de clientes: ID de cliente, ID de cuenta y saldo.

El ejemplo anterior puede parecer trivial, pero muestra cómo una solicitud que tradicionalmente se realizaría con tres llamadas API se puede realizar con solo una mediante una consulta GraphQL. La mejor parte es que no requiere la reimplementación de su funcionalidad existente.

Existen muchas ventajas y desventajas adicionales entre REST y GraphQL, pero es importante tener en cuenta que las API de GraphQL y REST no se excluyen mutuamente, y la adopción de una no excluye a la otra. De hecho, los dos trabajan muy armoniosamente juntos.

¿Cuándo debería usar GraphQL?

Al decidir si usar API REST o GraphQL, considere la complejidad de sus datos y la flexibilidad que necesita en sus consultas y mutaciones. Si sus datos son relativamente simples y su API requiere una interfaz bien definida basada en recursos, las API REST pueden ser el camino a seguir.

Por otro lado, si tiene datos complejos que requieren consultas flexibles y mutaciones y desea minimizar la obtención excesiva y la obtención insuficiente, entonces GraphQL puede ser una mejor opción.

Requiere un diseño cuidadoso para crear consultas y API de GraphQL con el esquema y la organización de tipos. Las API REST pueden ser más fáciles de diseñar y consultar, ya que puede separar las solicitudes de datos individuales, pero también pueden tardar más en ejecutarse. En términos generales, las API REST son mejores para consultas muy complejas, mientras que las consultas GraphQL pueden ofrecer una mayor optimización y un funcionamiento más rápido.

Además, si los datos en tiempo real y varias versiones de API son importantes para su aplicación, GraphQL puede proporcionar estos beneficios, mientras que las API REST pueden requerir más esfuerzo para implementar. En última instancia, la elección entre las API REST y GraphQL depende de los requisitos específicos de su proyecto y de las compensaciones que esté dispuesto a hacer.

Use GraphQL cuando desee crear una interfaz simple y eficiente para los consumidores que desean aprovechar sus API. También puede aprovechar GraphQL para reducir el tráfico total intercambiado entre su interfaz y el backend como lo hizo Facebook para el tráfico móvil. Si desea recuperar todos los datos relevantes en una sola consulta, GraphQL puede hacerlo muy bien.

Por qué debería escribir pruebas para GraphQL

Al igual que con otras pruebas funcionales, es importante probar las API de GraphQL para asegurarse de que la lógica comercial del software funcione correctamente. Debe verificar que las consultas, los esquemas y cualquier mutación se comporten y respondan como se esperaba. Escribir y ejecutar pruebas ayuda a los desarrolladores y al control de calidad a encontrar errores antes de que lleguen a la producción. También garantiza que tenga suficiente cobertura de prueba para la API y la aplicación.

Cómo probar las implementaciones de la API de GraphQL

GraphQL es una capa de abstracción que existe entre los sistemas de front-end y las API de back-end, por lo que es esencial realizar pruebas. Las consultas GraphQL le permiten acceder a múltiples recursos en el backend y agregar esos datos en una única respuesta significativa.

Captura de pantalla de GraphQL que muestra ejemplos de código de datos descriptivos, pregunte qué desea y obtenga resultados predecibles.

Las API de back-end suelen ser granulares porque queremos crear bloques de construcción nuevos y reutilizables para nuestras aplicaciones. Sin embargo, eso no se traduce directamente en nuestras historias de usuario o en las acciones que queremos poder realizar desde la interfaz. GraphQL es una forma de simplificar las interacciones con sus datos de back-end mediante el uso de una interfaz con esquemas que describen el comportamiento del sistema para que pueda obtener datos eficientes de sus API.

Cada uno de los esquemas de GraphQL se asigna a funciones. Estas funciones luego realizarán llamadas posteriores al backend contra sus API, bases de datos y cualquier otro recurso necesario para recopilar los datos que se solicitaron.

Luego, las funciones ensamblarán los datos necesarios en una respuesta que mantendrá la misma forma que la solicitud, lo que hará que sea muy fácil comprender qué datos están asociados a qué elementos de la solicitud.

Pregunta lo que necesites,
obtener exactamente eso.

-Graphql.org

Además, GraphQL se puede configurar para llamar a varios servicios de backend a medida que ensambla su respuesta a la consulta. Esto reduce el tiempo total que un consumidor necesita pasar navegando por los documentos de la API para comprender y leer qué información está disponible en una llamada.

Tipos de pruebas

Pruebas de consulta

Una prueba de consulta es una solicitud de datos de una o más tablas de base de datos. Una consulta puede ser una solicitud de resultados de datos, una acción sobre los datos o ambas.

Pruebas de mutación

Una prueba de mutación es una forma de prueba que modifica componentes específicos del código de una aplicación para ver si una herramienta de prueba puede detectar los cambios. Las pruebas de mutación generalmente se usan para realizar pruebas unitarias para ver si una herramienta de software puede detectar código que no se probó correctamente o que tiene defectos ocultos que otros métodos de prueba no detectan.

Pruebas de carga

Una prueba de carga es un tipo de prueba de rendimiento que somete a su aplicación o sitio web a una tensión que se asemeja a las condiciones del mundo real. Sin pruebas de carga, su software podría fallar cuando realmente cuenta. Las herramientas de prueba de carga examinan el rendimiento de su aplicación durante cargas normales y altas.

Pruebas de seguridad

Una prueba de seguridad es una forma de prueba que descubre vulnerabilidades, riesgos y amenazas en una aplicación de software y previene ataques de piratas informáticos. Una prueba de seguridad identifica posibles debilidades del sistema que podrían poner en riesgo su aplicación, información, usuarios o empresa.

Pruebas de esquema

Las pruebas de esquema, también llamadas pruebas de mapeo, son una forma de prueba de software que valida objetos de una aplicación front-end con los objetos de base de datos correspondientes. Las pruebas de esquema se utilizan para encontrar objetos no asignados en una base de datos, como tablas, vistas o columnas.

Pruebas automatizadas de puntos finales GraphQL

GraphQL es una tecnología poderosa que permite a los consumidores de su API acceder a su información de una manera más eficiente. Para asegurarse de que la experiencia funcione de la manera que desea, debe validar sus API de GraphQL. Aquí es donde prueba de automatización entra en juego.

Hay muchas herramientas de automatización disponibles para probar sus API de GraphQL. En este caso, estoy usando Parasoft SOAtest, un muy utilizado Pruebas de API solución que simplifica el desafío, a menudo desalentador, de validar sus API críticas en múltiples tecnologías. Es compatible con una amplia gama de formatos y protocolos de mensajes, incluido GraphQL.

Los puntos finales de GraphQL aceptan consultas como cadenas y devuelven respuestas JSON con los resultados de la consulta. Esto encaja muy bien con SOAtest, ya que los clientes REST pueden realizar consultas para enviar las consultas y la validación se puede realizar mediante las herramientas de verificación JSON existentes.

Considere el siguiente ejemplo simple de consulta de GraphQL.

Imagen de ejemplo de código simple para una consulta de GraphQL.

Un retorno esperado sería algo como:

Imagen de código que muestra un retorno esperado de una consulta de GraphQL.

Esta misma consulta se puede crear en Parasoft SOAtest a través de GraphQL Client en modo Literal o Formulario.

Captura de pantalla de Parasoft SOAtest que muestra el cliente GraphQL.

En SOAtest, las consultas de GraphQL se envían como una cadena denominada consulta. Las respuestas se devuelven en JSON, que SOAtest puede interpretar y representar fácilmente en su visor de tráfico.

Captura de pantalla de Parasoft SOAtest que muestra una consulta de GraphQL.

Los valores devueltos son los esperados. Necesitamos una forma automatizada de verificar estos resultados. El asertor SOAtest JSON es útil aquí.

Verificación de las respuestas de GraphQL

SOAtest verifica las respuestas JSON mediante aserciones que se configuran con su herramienta de afirmación JSON. Aquí hay un ejemplo de verificación para ver si el primer nombre devuelto es una cadena "Luis" que sabemos que no es un valor válido.

Captura de pantalla de Parasoft SOAtest que muestra el asertor JSON.

Ejecutando la prueba de nuevo, la prueba falla.

Captura de pantalla de Parasoft SOAtest que muestra una prueba fallida en un conjunto de pruebas de GraphQL Client.

Como puede ver, la prueba de GraphQL es sencilla en SOAtest utilizando capacidades ya existentes.

Captura de pantalla de Parasoft SOAtest que muestra los resultados de la prueba de GraphQL comparando el contenido esperado y el real.

¿Qué pasa con la autenticación? Esto lo maneja SOAtest y las herramientas de autenticación de clientes existentes también funcionarán con los puntos finales de GraphQL.

Captura de pantalla de Parasoft SOAtest que muestra una herramienta de autenticación de cliente GraphQL.

¿Por qué Parasoft SOAtest para pruebas GraphQL?

Los beneficios que SOAtest brinda a REST, SOAP y otras pruebas de API siguen siendo los mismos para GraphQL. Diseñado para adaptarse a la infraestructura de pruebas existente, Parasoft SOAtest acelera las pruebas que permiten el desarrollo Agile al ayudar a los evaluadores a trabajar de manera más inteligente con pruebas sin scripts que facilitan la colaboración entre los equipos de desarrollo, pruebas, rendimiento y seguridad.

Parasoft SOAtest hace que las pruebas sean fáciles de crear, administrar, orquestar, ejecutar, escribir y analizar. Más allá de GraphQL, la compatibilidad de SOAtest con más de 120 formatos y protocolos de mensajes, además de la generación de pruebas con la ayuda de IA y aprendizaje automático, facilita las pruebas de API.

Vea las pruebas de GraphQL en acción

Mire este video, donde le mostramos cómo usar SOAtest para enviar consultas de GraphQL a las API que tienen GraphQL implementado. Si encuentras esto útil, ¡compártelo con otros!

Vea en acción la solución líder de pruebas funcionales de API y UI con tecnología AI y ML.