¿Qué es la API?
API (Application Programming Interface) es un conjunto de procedimientos y funciones que permiten la interacción entre dos componentes de una aplicación de software. Permite la comunicación y el intercambio de datos entre dos sistemas. Un sistema de software que implementa una API contiene funciones / subrutinas que pueden ser ejecutadas por otro sistema de software.
Fuera del modelo clásico de arquitectura de tres niveles:
- Nivel de datos : la base de datos o el sistema de archivos desde donde se recuperan / almacenan los datos.
- Nivel lógico : el cerebro de la aplicación, procesa los datos entre las capas, coordina la aplicación, procesa los comandos y toma decisiones lógicas.
- Nivel de presentación : la interfaz de usuario, que traduce las tareas en algo que el usuario comprende.
![](http://q.miximages.com/56000/Usability Testing/main-qimg-fe035ea86d6bc8e2594ecf0c98fdb4bb.png)
El nivel lógico es la API. Aquí es donde pertenece toda la lógica de negocios. Es responsable de tomar información de las diferentes interfaces de usuario (UI), realizar cálculos y transacciones en la capa de la base de datos y luego presentar los resultados a la interfaz de usuario. En ciertos casos, el nivel lógico de la aplicación tiene más complejidad, y no es raro que múltiples tecnologías (servidor web, cola de mensajes, etc.) compongan este nivel.
Un ejemplo del mundo real : reserva un Ola Share o un grupo de Uber con una dirección de destino, sin conocer la ruta, el tráfico y las condiciones climáticas. Estas aplicaciones de uso compartido de viajes deben comunicarse con el servicio de mapas, los servicios de tráfico y meteorológicos y otras aplicaciones especializadas para guiar las reservas y su viaje perfecto. En el mundo moderno e interconectado, damos por sentado que todos estos sistemas diferentes pueden comunicarse entre sí sin problemas, en realidad, eso no sería posible sin las API.
El proveedor de API define el conjunto de operaciones, formatos de datos y protocolos que espera, y el consumidor de la API (llamado el cliente) usará esas reglas en el entendimiento de que, siempre que siga las reglas, el cliente siempre estará capaz de usar la API sin tener que preocuparse por las partes internas de la API en sí. Hay situaciones en las que la API es el producto final: una API pública. Una simple búsqueda en Internet revelará que hay miles de API públicas para cualquier cosa, desde GPS y soluciones de mapeo hasta localizar una estación de radio.
- API de Google Maps : están diseñados principalmente para uso móvil y de escritorio con la ayuda de la interfaz flash y JavaScript.
- API de publicidad de Amazon : Amazon es conocido por sus productos y, por lo tanto, su API de publicidad accede a su producto para descubrir su funcionalidad y, por lo tanto, anunciarse en consecuencia.
- Twitter : la API para Twitter generalmente se divide en dos categorías, una para acceder a los datos y la otra para interactuar con la búsqueda de Twitter.
- YouTube : esta API utilizada para YouTube incluye varias funcionalidades que incluyen videos, transmisión en vivo, reproductor, etc.
¿Qué son las pruebas de API?
En palabras simples: prueba del nivel lógico (la interfaz API) para determinar si cumple con las expectativas de funcionalidad, confiabilidad, rendimiento y seguridad.
Las pruebas de API se utilizan para determinar,
- Funcional : las API devuelven la respuesta correcta (en el formato esperado) para una amplia gama de solicitudes factibles, es decir, la salida de la primera aplicación / base de datos es correcta y está bien estructurada y es útil para otra aplicación. La respuesta puede ser un estado Pasa / Falla, Datos o información o una llamada a otra API.
- Carga : API puede manejar una gran cantidad de llamadas y reaccionar adecuadamente ante casos extremos como fallas y entradas inesperadas / extremas.
- Rendimiento : entregar respuestas en un período de tiempo aceptable.
- Seguridad : tipo de autenticación requerida, permisos, controles de acceso, si los datos confidenciales se transmiten de forma segura a través de la red y responden de manera segura a posibles ataques de seguridad.
- Prueba de documentación de API: también llamada prueba de descubrimiento, la documentación de API guía fácilmente al usuario.
La prueba de API implica probar las API directamente (de forma aislada) y como parte de las transacciones de extremo a extremo ejercidas durante las pruebas de integración. Más allá de las API RESTful, estas transacciones incluyen múltiples tipos de puntos finales, como servicios web, ESB, bases de datos, mainframes, IU web y ERP. Las pruebas de API se realizan en las API que produce el equipo de desarrollo, así como en las API que el equipo consume dentro de su aplicación (incluidas las API de terceros). La virtualización de servicios se utiliza junto con las pruebas de API para aislar los servicios bajo prueba y expandir el acceso al entorno de prueba mediante la simulación de API / servicios que no son accesibles para la prueba.
¿Por qué pruebas de API?
Las API ahora sirven como la interfaz principal para la lógica de la aplicación. Los equipos ágiles y DevOps que trabajan con iteraciones cortas y bucles de retroalimentación rápidos encuentran que las pruebas de GUI requieren un trabajo considerable para mantenerse al día con los cambios frecuentes. Las pruebas en la capa API son menos frágiles y más fáciles de mantener. Es por eso que vemos que ‘Pruebas de API’ está ganando impulso como una de las descripciones de trabajo hoy en día.
El tipo de API
A lo largo de los años, las API han evolucionado desde simples bibliotecas de códigos que las aplicaciones podrían usar para ejecutar código en la misma computadora, hasta API remotas que pueden usarse para permitir que el código en una computadora llame al código alojado en otro lugar. Aquí hay una lista rápida de las tecnologías API más comunes que existen en orden cronológico aproximado:
- TCP / IP Sockets
- Llamada a procedimiento remoto (RPC)
- Arquitectura de agente de solicitud de objeto común (CORBA)
- Invocación de método remoto de Java (RMI) y Enterprise Java Beans (EJB)
- Modelo de objetos componentes distribuidos de Microsoft (DCOM), también conocido como ActiveX
- Servicios web (SOAP luego REST)
Los servicios web SOAP utilizan el lenguaje de definición de servicios web (WSDL) y se comunican mediante solicitudes HTTP POST. Son esencialmente una serialización de llamadas a objetos RPC en XML que luego se pueden pasar al servicio web. El XML pasado a los servicios web SOAP debe coincidir con el formato especificado en el WSDL.
Una API web RESTful (también llamada servicio web RESTful) es una API web implementada utilizando los principios HTTP y REST. A diferencia de los servicios web basados en SOAP, no existe un estándar “oficial” para las API web RESTful. Esto se debe a que REST es un estilo arquitectónico, a diferencia de SOAP, que es un protocolo. Por lo general, los servicios web REST exponen sus operaciones como una serie de “recursos” únicos que corresponden a una URL específica. Cada uno de los métodos HTTP estándar (POST, GET, PUT y DELETE) luego se asigna a las cuatro operaciones básicas CRUD (Crear, Leer, Actualizar y Eliminar) en cada recurso. Los servicios web REST pueden usar diferentes métodos de serialización de datos (XML, JSON, RSS, etc.).
¿Cómo realizar pruebas de API?
Como las API carecen de una GUI, las pruebas de API se realizan en la capa de mensajes. Las pruebas de API comúnmente incluyen pruebas de API REST o servicios web SOAP con cargas de mensajes JSON o XML que se envían a través de HTTP, HTTPS, JMS y MQ. También puede incluir formatos de mensajes como SWIFT, FIX, EDI y formatos similares de longitud fija, CSV, ISO 8583 y Protocol Buffers que se envían a través de transportes / protocolos como TCP / IP, ISO 8583, MQTT, FIX, RMI, SMTP, TIBCO Rendezvous, y FIX.
Las pruebas de API son diferentes a otros tipos de pruebas, ya que la GUI no está disponible y, sin embargo, debe configurar el entorno inicial que invoca la API con el conjunto de parámetros necesarios y luego finalmente examina el resultado de la prueba. En lugar de usar entradas y salidas de usuario estándar (teclado), en las pruebas de API, usamos software para enviar llamadas a la API, obtener salidas y anotar la respuesta del sistema. API Testing requiere una aplicación para interactuar con API. Para probar una API, necesitamos usar una herramienta de prueba para conducir la API.
![](http://q.miximages.com/56000/Usability Testing/main-qimg-6e364d9c223f443ef80c4c5dd74ac657.png)
- Documente los requisitos de prueba de API : ¿Cuál es el propósito de API? ¿Cuál es el flujo de trabajo de la aplicación? ¿Cuáles son las integraciones compatibles con la API? ¿Cuáles son las características y funciones de la API? Documentar todos estos requisitos de prueba de API es lo primero que necesitamos implementar. Esto nos ayudará a planificar las pruebas de API durante todo el proceso de prueba.
- Entorno de prueba : la configuración del entorno de prueba implica la configuración de la base de datos y el servidor para los requisitos de la aplicación. Una vez configurado, es bueno hacer una llamada a la API de inmediato para asegurarse de que nada se rompa antes de continuar para comenzar pruebas más exhaustivas.
- Funcional : el objetivo principal de las pruebas de API es garantizar la lógica y la funcionalidad de los componentes de API con respecto al paquete de software en su conjunto. Con eso en mente, se debe hacer una cantidad significativa del esfuerzo de prueba para señalar los defectos funcionales que probablemente causarán problemas en la producción, y también proporcionará a todo el equipo medidas de referencia sobre cómo funciona la API en condiciones regulares.
- Pruebas negativas : las pruebas exhaustivas de API también deben incluir pruebas de límites suficientes y pruebas de estrés más altas para ver cómo reacciona la API a condiciones no ideales. Las suites de prueba deberían incluir idealmente al menos algunos casos inusuales, como caracteres no ASCII, tipos de datos incorrectos o un número muy grande. Otra área que no debe pasarse por alto es la prueba de errores, ya que es vital que la API en la prueba no se rompa o bloquee en respuesta a datos de entrada mal formados.
- Datos enmascarados : comience a combinar los datos de la aplicación con las pruebas de la API para garantizar que la API funcione como se espera frente a las posibles configuraciones de entrada conocidas.
Herramientas de prueba de API
Dado que API Testing está ganando popularidad, tenemos muchas herramientas disponibles para lo mismo. Por cierto, Selenium es solo para pruebas basadas en el navegador, como resultado tenemos diferentes herramientas para usar para las pruebas API / basadas en el servicio web Rest and Soap. Estas son algunas de las principales herramientas de prueba de API que se pueden usar para las pruebas de servicio web de descanso y jabón.
- SOAPUI : la herramienta de código abierto más popular para pruebas API en el mundo, SoapUI le permite probar las API REST y SOAP con facilidad, ya que se ha creado específicamente para pruebas API. Puede automatizar las pruebas funcionales, de regresión, de cumplimiento y de carga de los servicios web SOAP y REST. Viene con una interfaz gráfica fácil de usar y admite tecnologías y estándares líderes en la industria para burlarse y estimular el comportamiento de los servicios web.
- Cartero : envíe una solicitud de publicación a su servidor web y obtenga la respuesta. Ejecutar en aplicaciones Mac, Windows, Linux y Chrome, le permite configurar todos los encabezados y cookies que su API espera, y luego verificar la respuesta. Úselo tanto para pruebas automatizadas como exploratorias. Integraciones incorporadas como soporte para formatos Swagger y RAML, es compatible con Run, Test, Document y Monitoring.
- Tricentis Tosca : admite una amplia gama de protocolos, incluidos HTTP (s) JMS, AMQP, Rabbit MQ, TIBCO EMS, SOAP, REST, IBM MQ, NET TCP. Utiliza la automatización de pruebas basada en modelos que facilita el mantenimiento de scripts. Permite pruebas de extremo a extremo, ya que las pruebas de API se pueden usar en dispositivos móviles, entre navegadores, aplicaciones empaquetadas, etc.
- HttpMaster : una herramienta de desarrollo y prueba web para automatizar las pruebas de sitios web y servicios: servicios web RESTful y aplicaciones API. HttpMaster también le permite monitorear las respuestas de la API.
- Rest-Assured : lenguaje de código abierto específico de dominio de Java (DSL) que simplifica la prueba del servicio REST. Simplifica las cosas al eliminar la necesidad de usar código de placa de caldera para probar y validar respuestas complejas. También es compatible con XML / JSON Request / Responses.
- Parasoft : herramienta de pago, automatice las pruebas de API con Parasoft usando su soporte para múltiples plataformas como Java, C, C ++, http://or.NET . Admite pruebas de extremo a extremo y tiene una interfaz muy fácil de usar.
- vRest : proporciona una solución en línea para pruebas automáticas, simulacros, grabación automatizada y especificación de API REST / HTTP / API RESTful. Esta herramienta se puede utilizar para probar aplicaciones alojadas localmente, intranet o Internet. Algunas de sus buenas características incluyen el apoyo a la integración de Jira y Jenkins y también permite las importaciones de Swagger y Postman. Los simulacros de API se pueden crear en vREST con la ayuda de Mock Server Functionality. El usuario puede comenzar directamente a desarrollar frontend utilizando solicitudes HTTP simuladas
- Apache JMeter : admite pruebas de rendimiento para servicios web (SOAP / REST).
- HP QTP / UFT : proporciona un marco extensible útil para ejecutar y desarrollar la funcionalidad del sistema sin cabeza que no tiene una interfaz de usuario. Ayuda a probar las tecnologías sin cabeza como bases de datos y servicios web, JMS, etc.
- Rapise : una herramienta de automatización robusta con características potentes y extensibles. Se basa en una arquitectura abierta y flexible para pruebas funcionales rápidas de servicios web REST / SOAP. Utiliza métodos estándar HTTP como POST, GET, PUT y DELETE. Rapise también proporciona soporte para probar aplicaciones web creadas en Java, .NET, Ajax, Silverlight y Flash.
- WebInject : herramienta gratuita para pruebas automáticas funcionales, de aceptación y regresión de servicios web y web. Es una herramienta de línea de comandos y se basa en Perl, lo que simplifica la ejecución de las pruebas, ya que no requiere pasar tiempo en el símbolo del sistema. Además, no tiene IDE como la interfaz de usuario, lo que significa que las pruebas se escriben fuera de la interfaz de usuario de WebInject. Se puede ejecutar en plataformas que tienen intérprete Perl.
- Herramienta SDK de Eclipse para pruebas de API automatizadas.
Hay muchas otras herramientas de API Testing disponibles en el mercado de control de calidad. Al mirar una herramienta de prueba de API, es importante comprender qué tecnologías de API usará y la mejor manera de probarlas. Hoy en día, la mayoría de las API que encontrará serán de la variedad de servicios web (REST o SOAP), pero puede encontrar otras tecnologías como Java EJB o Microsoft DCOM / ActiveX DLL.
Desafíos de las pruebas API
- No hay una GUI disponible para probar la aplicación, lo que dificulta proporcionar valores de entrada: combinación de parámetros, selección de parámetros, categorización y secuencia de llamadas.
- Se requiere un conocimiento profundo de las aplicaciones internas para probar suficientemente la API. Algunas API pueden interactuar con el núcleo del sistema operativo, otras API, con otro software para ofrecer su funcionalidad.
- Habilidades de programación adecuadas : las pruebas de API generalmente tienen la forma de secuencias de llamadas, a saber, programas. Cada probador debe poseer experiencia en los lenguajes de programación a los que apunta la API.
- Sin documentación : las API desarrolladas difícilmente tendrán disponible la documentación adecuada. Sin la documentación, es difícil para el diseñador de pruebas comprender el propósito de las llamadas, los tipos de parámetros y los posibles valores válidos / no válidos, sus valores de retorno, las llamadas que realiza a otras funciones y los escenarios de uso.
- Por lo general, los gerentes de proyecto no se preocupan por asignar tiempo específicamente para desarrollar una API rica y detallada, y mucho menos probarla.
- Limitaciones de tiempo : las pruebas exhaustivas de las API requieren mucho tiempo, requieren una sobrecarga de aprendizaje y recursos para desarrollar herramientas y diseñar pruebas.
- El manejo de excepciones debe ser probado a fondo.
Algunas mejores prácticas para pruebas de API
- En primer lugar, pruebe la funcionalidad: la solicitud-respuesta básica funciona de manera constante.
- Agrupar casos de prueba por categoría de prueba.
- Para una cobertura de prueba completa, cree casos de prueba para todas las combinaciones posibles de entrada de API.
- Pruebe la falla y los parámetros no válidos de cómo maneja problemas y cargas imprevistos asegurándose de que la API falle correctamente.
- Agregue estrés al sistema a través de una serie de pruebas de carga API.
- La selección de parámetros debe mencionarse explícitamente en el caso de prueba en sí.
- Priorice las llamadas a la función API para que sea fácil para los evaluadores realizar pruebas de manera oportuna.
- Automatice la creación de documentación de API con un estándar como Swagger, pero luego ejecute las pruebas, asegurándose de que la documentación tenga sentido para todos los niveles de experiencia del usuario.
- Automatiza todo lo que puedas.
Si alguna API no funciona de manera eficiente y efectiva, nunca se adoptará, independientemente de si es una API abierta y gratuita. Si una API se rompe, no solo podría romper una sola aplicación, sino que también dependería de una cadena de procesos comerciales. Poner más esfuerzo en las pruebas de API conduce a un producto final mucho más saludable. Garantizar que todo el acceso a los datos (lectura y escritura) pase solo a través de la API simplifica significativamente las pruebas de seguridad y cumplimiento y, por lo tanto, la certificación, ya que solo hay una interfaz. Asegurarse de que la API ofrece una funcionalidad completa permite una fácil expansión futura de la aplicación a medida que surgen nuevas necesidades comerciales.
Las pruebas de API son bastante cruciales y son muy necesarias. Es una de las áreas donde las pruebas de automatización son muy recomendables, particularmente en el mundo de DevOps, desarrollo ágil y ciclos de entrega continuos. La forma en que nuestra generación se está moviendo hacia la Inteligencia Artificial, la computación en la nube y el IoT , pronto habrá una mayor demanda de pruebas rigurosas de API. Muchos de los servicios que utilizamos todos los días se basan en cientos de API interconectadas diferentes, si alguno de ellos falla, entonces el servicio no funcionará. La prueba de API es una necesidad. Si eres un probador de software, las pruebas de API son una habilidad imprescindible que debes tener en tu arsenal.