Testeo de APIs (API Testing)


Cuando hablábamos de la pirámide de testing automatizado nombramos el nivel medio o de pruebas de servicios, de ese  nivel vamos a hablar, testeando APIs.

API vs RestAPI

API (Application Programming Interface) es un conjunto de funciones y procedimientos de software, denominado llamadas a la API, que puede ser ejecutado por otras aplicaciones de software. Permite que una pieza de software pueda comunicarse con otro componente utilizando un formato acordado de pedido y de respuesta.

RestAPI (Representational State Transfer API) es un conjunto coordinado de restricciones aplicadas al diseño de componentes  de una API distribuida que puede conducir a una arquitectura más performante y mantenible. También pueden ser RESTful API, la cual tipicamente lleva adelante toda la comunicación mediante HTTP.

Pueden profundizar los conceptos aquí para conocer mas del tema.

¿Como se testea una API?

Hablando en un alto nivel, nuestro trabajo es entender como funciona la API, armar una buena combinación de parámetros de entrada, ejecutar las pruebas contra la API, verificar el resultado y reportar cualquier desviación en la funcionalidad esperada. Las pruebas consisten en hacer peticiones HTTP (get, post, put, delete, etc) y luego verificar la respuesta.

Vamos a ver un rápido checklist que nos puede ser útil como guía para arrancar las pruebas.

CheckList Funcional

  • Paginación  ¿La API devuelve una lista? ¿Cuál es el tamaño de la lista? ¿Soporta paginación? ¿Tiene tamaño por defecto para la paginación? ¿Puedo controlar el número de resultados que obtengo en cada página? ¿Podría ser diferente para cada usuario? ¿Cómo obtiene la API esta información para el usuario? ¿Hay alguna restricción para diferentes consumidores de la API, tales como web, móvil o tableta?
  • Autenticación ¿Quién puede acceder a esta API? ¿Cómo se autentican? ¿Cómo se mantiene la autenticación para llamadas posteriores? ¿Soporta múltiple sesiones para los mismos usuarios? ¿Qué hay de varias autenticaciones desde la misma máquina? ¿Qué debe suceder si el usuario se desconecta de un dispositivo o del navegador? ¿Cuántas veces un usuario puede fallar la autenticación? ¿Por cuánto tiempo autenticación permanece válida?
  • Parámetros / cadenas de consulta ¿Cómo estamos enviando datos en la cadena de consulta? ¿Cuál dato es obligatorio? ¿Cuál es opcional? ¿Lo está validando? ¿Es valida para los tipos  null? ¿Que define  que un los valores son correctos? ¿Y si esos valores cambian? ¿Tengo que escapar de ciertos caracteres? ¿Puedo utilizar caracteres Unicode?
  • Autorización ¿Quién puede acceder a esta API? ¿Cómo se limita el acceso? ¿Cómo puedo obtener acceso privilegiado? ¿Cuál es el riesgo de que alguien obtenga acceso no autorizado? ¿Hay jerarquía de acceso o un acceso diferente para diferentes roles? ¿Cuántos niveles de autorizaciones hay? ¿Cómo se hace cumplir la autorización a nivel del sistema?
  • Comportamiento ¿La API se comporta como se espera? ¿Está funcionando como fue diseñada? ¿Está cumpliendo con las expectativas de los usuarios? ¿Se comporta bajo la carga esperada? ¿Qué tipo de contenido soporta? ¿La prueba es para XML, JSON o ambos? ¿Esta presente la cabecera?
  • Control de errores ¿Retorna los códigos de error correctos? ¿Está dando los códigos HTTP correctas? ¿Se valida la entrada? ¿Maneja parámetros faltantes? ¿Maneja entradas equivocadas? ¿Se emite el error apropiado si se solicita mal el tipo de contenido? ¿Se bloquean los usuarios después de emitir el mismo tipo de errores? ¿Hay llamadas asíncronas – En caso afirmativo, ¿y si hay algún error en eso? ¿Se registran estos errores? ¿Y si todo el sistema o alguna parte del sistema no está disponible, ¿cómo afectaría al usuario? ¿Qué pasa si la caída del sistema durante la transacción, ¿cómo podría recuperarse? ¿Qué error tendría que dar?

Herramientas Disponibles

Dependiendo del objetivo de las pruebas, podemos implementar distintas estrategias y por ende, distintas herramientas.

Developer Tools

En caso de que las pruebas sean informales o se inicia con el proceso, podemos utilizar el Developer Tools del Browser para verificar los llamados a la API. En la mayoría de los Browsers se abre con F12 (Chrome | FF). Una vez que tengan abierto el Developer Tools seguimos con estos pasos:

  1. Seleccionar sección Network/Red.
  2. Abrimos la pagina que realiza los requests a la API que querés probar.
  3. Ya pueden ver una gran cantidad de GETs y tal vez algunos POSTs (Vemos la URL base en el tope de la ventana de developer tools).
  4. Vamos a filtrar por XHR para poder ver la interacción con la API.
  5. Seleccionando cada HTTP verb podemos ver mas información como Encabezados(Header), Parámetros(Parameters), Respuesta (Response), etc…
  6. Solo queda verificar si se comporta como se espera.
Aplicaciones

En caso que se requiera profundizar con las pruebas, existen herramientas que nos permiten trabajar de una manera mas ordenada mediante la interfaz de las mismas.

Entre muchas herramientas, pueden encontrar:

  • Postman: Es una aplicación que funciona como Add-on de Chrome, permite configurar y correr peticiones HTTP en distintos ambientes, con distintos datos y realizar verificación en las respuestas de los mismos. La funcionalidad básica es gratis, al querer mas funcionalidad hay que pagar.
  • SoapUI :Es una herramienta pensada inicialmente para pruebas SOAP que ha crecido como proyecto OpenSource y permite pruebas sobre APIs. Algunas funcionalidades son pagas.
  • Runscope: Al igual que PostMan es una aplicación web que nos permite correr distintos sets de requests configurables y dinámicos para luego comprobar los resultados de los mismos. Hay que pagar en caso que se quiera escalar el alcance de las pruebas.

¿Quieres agregar algo más?  Deja tu comentario!!!!


Te gustó el post? Quieres contribuir para que escriba más? Contribute with the Blog

Un pensamiento en “Testeo de APIs (API Testing)”

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s