Las APIs son críticas en el desarrollo de apps. Conoce qué son, qué tipos existen, cuáles son sus beneficios y algunas buenas prácticas para iniciarte en este tipo de pruebas de software.
Gracias a la evolución de miles de aplicaciones que se integran con APIs, se hace indispensable realizar API Testing para obtener una mayor cobertura de las pruebas y aportar mayor calidad al producto final.
Partamos definiendo: ¿qué es una API?, ¿por qué se habla tanto de ellas y por qué soluciona grandes problemas del desarrollo?
¿Qué son las APIs y para qué sirven?
Las interfaces de programación de aplicaciones conocidas comúnmente como APIs (Application Programming Interfaces) son un conjunto de comandos, funciones y protocolos que permiten la comunicación entre software.
Cuando un desarrollador está trabajando en una aplicación o en la web de una tienda online, no necesita crear desde cero el sistema de pago y control de stock, ya que esto le llevaría demasiado tiempo. En cambio, es posible que pueda conectar el sistema a una API de terceros que cumple dichas funciones.
Ahora bien, ¿qué ventajas tiene esto? Básicamente, el proceso de desarrollo va a ser mucho más rápido y menos costoso, al aprovechar la infraestructura ya existente.
De esta forma, adentrados en qué es una API, hablaremos de una parte de ellas: los Web Services o Servicios Web.
¿Qué son los Web Services?
Los Web Services son un conjunto de estándares y protocolos para intercambiar datos entre aplicaciones. Esto suena muy similar a la definición de API, ¿verdad? Y es que efectivamente un Servicio Web es una API que se conecta a la aplicación pero a través de internet.
Entonces, ¿cuál es la diferencia entre una API y un Web Service? Un Web Service es una API que se ofrece solamente a través de internet, o sea de HTTP; en cambio, las API pueden utilizar cualquier otro protocolo de comunicación.
¿Cómo hacer una integración con un Web Service?
Basándonos en la gráfica anterior, en donde, por un lado se encuentra la aplicación web y por otro el sistema externo al que se conectará, se presenta el siguiente escenario: ¿qué sucede si la aplicación está desarrollada con un lenguaje de programación en específico, y el otro sistema está desarrollado con un lenguaje diferente?, ¿cómo va a ser posible la comunicación entre sí?
Pongamos un ejemplo simple, una persona que habla solamente español que trata de comunicarse con otra persona que solo habla inglés, la comunicación va a ser imposible, en este caso lo mejor es tener un lenguaje intermedio, un lenguaje que ambas partes puedan entender.
En los Web Services, el lenguaje intermedio sería a través de XML con el protocolo SOAP. Otra forma de comunicación posible es a través de la arquitectura REST, aplicando el lenguaje XML o JSON. En este contexto, ¿de qué va a depender si la comunicación se hará a través de SOAP o REST? La respuesta es que dependerá de cómo esté desarrollado el Web Service.
SOAP y REST
SOAP es un protocolo diseñado para poder facilitar la comunicación entre plataformas, basado en XML y en otro lenguaje denominado WSDL. Del mismo modo, REST es una arquitectura más moderna y liviana, y es la más común en la que se prueba actualmente.
El hecho de que la arquitectura REST utilicé lenguaje JSON la hace más reducida y fácil de utilizar. Una gran ventaja de REST es que tiene operaciones bien definidas como son GET, POST, PUT, PATH y DELETE, siendo estas las más comunes y que detallamos a continuación.
Métodos HTTP
Debemos utilizar GET para leer la información de la API, POST en el caso de que debamos crear información nueva, utilizar PUT y PATCH para modificar y actualizar información y DELETE cuando debamos eliminar información.
Ahora que vimos los conceptos más teóricos de las API y los Web Services, hablaremos del rol del tester para explicar en detalle en qué consiste el testing de APIs.
¿Qué es API Testing?
De acuerdo a la Pirámide de Automatización, API Testing hace parte de las pruebas de integración.
Las pruebas de API buscan validar y verificar que las funcionalidades responden correctamente. Se considera un tipo de prueba a bajo nivel, es decir, que no interactúa directamente con la interfaz de usuario.
En el caso de que estemos probando una API REST, cuando interactuamos con un Web Service por HTTP, ¿cómo sabemos que los resultados son correctos? Básicamente, por las respuestas de los códigos de estado cuando consultan información a la API.
El flujo consiste en enviar los datos de entrada, la API REST la procesa y se obtiene como resultado la salida con los siguientes códigos de respuesta:
- Códigos 200: cuando son respuestas exitosas
- Códigos 300: cuando son mensajes de redirección
- Códigos 400: cuando son errores del cliente
- Códigos 500: cuando existen problemas con el servidor
Ahora bien, ¿por qué hacer API testing? ¿Cuáles son los beneficios de probar esto? Veamos sus principales ventajas a continuación.
Beneficios de API Testing
Promueve el Shift Left Testing
Decimos que fomenta el enfoque shif left ya que no es necesario contar con el producto totalmente terminado para comenzar a probar, basta con tener conexión a las API para ir testeando sus funcionalidades.
Mantenimiento más simple
Al ser más sencillo que las pruebas de interfaz de usuario, lo ideal es tener pruebas de API robustas para que las pruebas de UI sean solamente preventivas.
Sabemos que las pruebas de interfaz de usuario son cambiantes y hay que reescribirlas y mantenerlas constantemente. En cambio, con las pruebas de API es poco usual que se produzcan cambios y en caso de que haya algún cambio es más fácil poder controlarlo.
Mayor velocidad de ejecución
Es posible probar 300 pruebas de API en tres minutos aproximadamente. Esto significa que hay más tiempo para corregir y por consiguiente, para probar.
Reducción de errores
Al estar probando y corrigiendo en una capa intermedia, van a mejorar los resultados de las pruebas en general.
Integración del trabajo
Al probar una API, como testers requerimos de mucho apoyo de parte del equipo de desarrollo. De esta manera podemos conocer los aspectos más técnicos del proyecto.
Tipos de Pruebas API
En las API no solamente podemos ejecutar pruebas funcionales, también es posible ejecutar otro tipo de pruebas que nos van a ser útiles para potenciar la calidad de los tests
Es importante considerar que el tipo de prueba que vamos a utilizar siempre va a depender del tipo de API que estemos probando.
Pruebas Funcionales
Con el testing funcional vamos a validar las funcionalidades de la API. Por ejemplo al contar con una API REST, primero se validan los códigos de estado para saber que la API se encuentra disponible.
También es posible validar las operaciones dependiendo de los casos de prueba, aunque no siempre es recomendable confiar en las pruebas de interfaz de usuario, por lo que realizar uno que otro flujo a nivel de API permite validar el correcto funcionamiento.
Pruebas de Seguridad
Con el testing de seguridad en API es posible probar la autenticación, si utiliza algún tipo de key o token y verificar si hay datos sensibles encriptados, entre otros aspectos. Lo anterior es lo más básico que se debe verificar en cuanto a seguridad.
Si queremos ser un poco más exhaustivos y tener un tipo de checklist de seguridad, podemos aplicar el Top 10 API Security de OWASP. Es recomendable que la aplicación de estos criterios deba realizarse en conjunto con el área de desarrollo o seguridad, al ser pruebas mucho más técnicas.
Pruebas de Performance
En este punto aparecen distintos tipos de pruebas de rendimiento, como pruebas de carga, pruebas de estrés, pruebas de escalabilidad, pruebas de volumen, etc. Estas pruebas sirven para validar la carga de usuarios y que la API pueda responder correctamente a esta carga.
Pruebas de Integración
Para validar la integración, podemos hacerlo verificando la integración con otras API vinculadas en un mismo proyecto.
Documentación
La documentación es muy importante al momento de probar. No podemos comenzar a probar API si no tenemos documentación asociada a ella. Contar con documentación representa un significativo ahorro de tiempo y esfuerzo, tanto para el tester como para el desarrollador.
Herramientas para API Testing
Cuando hablamos de herramientas para probar, siempre vienen a la cabeza las más populares: SoapUI y Postman. Sin embargo, herramientas como JMeter y Rest Assured también nos ayudan en esta tarea.
SoapUI
Primero hablemos de SoapUI, una herramienta desarrollada en Java que inicialmente se utilizaba para probar servicios SOAP pero que luego se extendió para los servicios REST. Si bien SoapUI cuenta con una versión pagada, la versión gratuita contiene todo lo necesario para probar, se puede integrar con scripts de pruebas con lenguaje Groovy, y en definitiva es una de las herramientas más poderosas en el mercado.
Sin embargo, no es una herramienta muy intuitiva, en especial para aquellos que están iniciándose en el mundo del API testing, por lo que va a ser necesario requerir algún curso o tutorial sobre cómo utilizarla.
Postman
Por otro lado tenemos Postman, una herramienta que principalmente se utiliza para probar API de tipo REST. Postman es una herramienta muy completa que además de probar, documentar y ayudar incluso en el proceso de desarrollo de APIs, sirve para automatizar: se pueden agregar scripts de prueba en lenguaje JavaScript.
Una de las ventajas de Postman frente a SoapUI, es que su interfaz de usuario es mucho más amigable e intuitiva, dispone de colecciones y agrupaciones de peticiones, lo que la hacen más simple de entender, incluso para aquellos que están recién comenzando.
JMeter
Igualmente contamos con JMeter, la herramienta líder para probar performance, y que es ampliamente utilizada para probar API REST. JMeter emplea múltiples lenguajes de programación y es de código abierto, por lo que se puede integrar con otras plataformas para hacer las pruebas de performance mucho más robustas.
Rest Assured
Finalmente, tenemos a Rest Assured, un framework escrito en Java que se utiliza principalmente para probar servicios REST escritos en Json o XML. La mayor ventaja que tiene Rest Assured es que al ser un framework se puede integrar con las librerías de pruebas más utilizadas, tales como JUnit, TestNG o maven. Para quienes cuentan con mayores conocimientos en programación, es una herramienta sencilla de usar y en la web hay bastante documentación.
En este video, Renzo Parente, Test Automation Engineer en Abstracta, explica conceptos introductorios a Rest Assured en un pequeño proyecto Maven con algunos ejemplos y utilizando una API pública.
Tips para iniciarse en API Testing
Hacerse amigo del Código
En un trabajo de testing que requiere de ciertas habilidades (independiente de que estemos utilizando JavaScript, Groovy o Java), es recomendable contar con algunos conocimientos de programación para ir interiorizándonos en como probar todo.
Aprender del equipo de Desarrollo del proyecto
Esta práctica es muy importante ya que el equipo de desarrollo maneja la información contundente de la integración con API. Por lo tanto, toda la información que se maneja, en especial la documentación, es importante conocerla y apoyarnos como testers en quienes las crearon.
Comenzar con Postman
En caso que no haya que crear un proyecto robusto en donde tengamos que ocupar herramientas más integradoras como Rest Assured, Postman es la mejor alternativa para iniciarse en el mundo del API Testing.
Investigación continua de herramientas
Existe un sin fin de herramientas que no fueron mencionadas en este post que también son ampliamente utilizadas.
API Testing desde cero
Las API se están volviendo cada vez más críticas en el desarrollo de aplicaciones, al ayudar a los sistemas a comunicarse entre sí.
Gracias a la evolución de las apps que hoy se integran con APIs, es indispensable realizar API testing para obtener una mayor cobertura de las pruebas y aportar mayor calidad al producto final.
En esta charla impartida en la quinta edición de Testing Day Chile, además de abordar algunos conceptos básicos teóricos e introductorios al API testing, se realizó una demo en la que se presentó la herramienta Postman utilizando una API de Prueba, realizando una automatización de una petición con método GET.
Asimismo, se presentó la herramienta Newman usando la misma colección automatizada en Postman, pero a través de líneas de comandos.
Esperamos que hayas encontrado interesante esta guía para iniciarte en API Testing. Si conoces alguna buena práctica o herramienta para realizar pruebas de API, ¡déjanos tu aporte en los comentarios!
¡Síguenos en LinkedIn, Twitter, Facebook, Instagram y Youtube para ser parte de nuestra comunidad y enterarte de más tips para iniciarte en el mundo del API Testing!
Otros contenidos relacionados
Postman: Explorando una herramienta para Automatizar Pruebas de API
Posts Relacionados
Ciberseguridad: nuevas tecnologías, nuevas vulnerabilidades
Las disrupciones a nivel global empujan la aceleración de la transformación digital y la necesidad de repensar el sector de la ciberseguridad. ¿Cuál es el rol del testing de software? ¿Qué es el Pentesting? ¡Descúbrelo aquí!
Abstracta entre las principales compañías de control de calidad
Nos apasiona el desafío de ayudar a empresas disruptivas para que logren introducir mejores prácticas de gestión de calidad y pruebas de software, en el ciclo de vida de sus desarrolladores.