🚀 ¿Cómo garantizar que una API REST funcione correctamente antes de publicarla en Internet?

En este proyecto implementé una solución de pruebas automatizadas utilizando Node.js, Express, Postman, Newman, GitHub Actions y Render. El resultado fue una API REST desplegada públicamente, con 21 solicitudes ejecutadas, 21 aserciones aprobadas y 0 fallidas.

📌 1. Introducción

En el desarrollo de software moderno, garantizar la calidad de una aplicación es tan importante como implementar sus funcionalidades. Una aplicación puede funcionar correctamente durante el desarrollo y, sin embargo, presentar errores cuando se realizan nuevas modificaciones o cuando se publica en un entorno de producción.

Por esta razón, las pruebas automatizadas de API (API Testing) representan una práctica fundamental para verificar el comportamiento de los servicios web, validar respuestas HTTP, comprobar estructuras de datos y detectar problemas antes de que afecten a los usuarios.

Como parte de una actividad académica del curso de Calidad de Software, desarrollé una API REST para la Gestión de Tareas Académicas, integrando un proceso completo de pruebas automatizadas, integración continua y despliegue en la nube.

El proyecto permite demostrar cómo diferentes herramientas pueden trabajar conjuntamente para automatizar tareas que normalmente requerirían intervención manual.

Durante su implementación se utilizaron las siguientes tecnologías:

  • Node.js y Express: desarrollo de la API REST.
  • Postman: organización de solicitudes y casos de prueba.
  • Newman: ejecución automatizada de las colecciones.
  • GitHub: almacenamiento público y control de versiones.
  • GitHub Actions: integración continua y ejecución automática de pruebas.
  • Render: despliegue público de la aplicación.

El propósito de este artículo es presentar la arquitectura, implementación, automatización y los resultados obtenidos durante la construcción de esta solución.

🎯 2. Objetivos del proyecto

Objetivo general

Implementar un proceso automatizado de pruebas funcionales para una API REST, integrándolo con herramientas de integración continua y despliegue automático en la nube.

Objetivos específicos

  1. Desarrollar una API REST funcional utilizando Node.js y Express.
  2. Implementar operaciones CRUD para administrar tareas académicas.
  3. Diseñar una colección de pruebas utilizando Postman.
  4. Automatizar las verificaciones mediante Newman.
  5. Configurar GitHub Actions para ejecutar pruebas ante cambios en el repositorio.
  6. Publicar la aplicación en Render con despliegue condicionado a la aprobación de CI.
  7. Verificar el funcionamiento de la API en un entorno público.

Estos objetivos permitieron desarrollar una solución orientada al aseguramiento de la calidad del software y a la automatización del ciclo de entrega.

🛠️ 3. Tecnologías utilizadas

Para implementar el proyecto se seleccionaron herramientas que permiten integrar el desarrollo de servicios REST con mecanismos automatizados de validación y despliegue.

Herramienta Función principal
Node.js Entorno de ejecución de JavaScript
Express Framework para construir la API REST
Postman Creación y organización de solicitudes HTTP
Newman Ejecución automatizada de colecciones Postman
Git Control de versiones del proyecto
GitHub Repositorio público del código fuente
GitHub Actions Ejecución automática de las pruebas
Render Alojamiento y despliegue de la API

¿Por qué utilizar Newman?

Newman es una herramienta de línea de comandos que permite ejecutar colecciones de Postman sin depender de su interfaz gráfica.

Su principal ventaja es que facilita incorporar las pruebas de API a procesos automatizados, como los workflows de GitHub Actions.

De esta manera, los equipos de desarrollo pueden ejecutar las mismas verificaciones de manera repetible cada vez que se realizan modificaciones en el código.

🏗️ 4. Arquitectura de la solución

La aplicación se diseñó siguiendo un enfoque de servicios REST, donde los clientes realizan solicitudes HTTP y reciben respuestas del servidor.

Para complementar esta arquitectura, se implementó un proceso CI/CD encargado de ejecutar las pruebas y controlar la publicación de nuevas versiones.

Flujo general del proyecto

 DESARROLLO DE LA API Node.js + Express | v REPOSITORIO GITHUB Commit y Push | v GITHUB ACTIONS Integración continua | v POSTMAN / NEWMAN Pruebas automatizadas | v ¿Pruebas satisfactorias? / \ NO SÍ | | v v CI FALLIDA RENDER Sin deploy Despliegue | v API REST PUBLICADA HTTPS 

Este flujo incorpora una etapa de validación automática antes del despliegue.

Cuando GitHub Actions completa correctamente las verificaciones configuradas, Render puede iniciar la publicación de los cambios. Si las comprobaciones fallan, el despliegue automático condicionado no se activa para ese cambio.

Este mecanismo contribuye a reducir el riesgo de publicar modificaciones que no superen las pruebas establecidas.

💻 5. Desarrollo de la API REST

El sistema desarrollado se denomina API REST de Gestión de Tareas Académicas.

Su finalidad es permitir la administración de tareas mediante operaciones HTTP, proporcionando un servicio que pueda utilizarse para demostrar las pruebas automatizadas.

La aplicación fue desarrollada con Node.js y Express y dispone de endpoints para registrar, consultar, actualizar y eliminar tareas.

Endpoints principales

Método HTTP Endpoint Funcionalidad
GET / Presentar la bienvenida del sistema
GET /health Comprobar disponibilidad
GET /api/tareas Consultar todas las tareas
GET /api/tareas/:id Consultar una tarea específica
POST /api/tareas Registrar una nueva tarea
PATCH /api/tareas/:id Actualizar una tarea existente
DELETE /api/tareas/:id Eliminar una tarea

Operaciones CRUD

Las operaciones CRUD representan cuatro funcionalidades esenciales para administrar recursos en una aplicación.

CREATE: permite crear nuevos registros mediante solicitudes POST.

READ: permite consultar información mediante solicitudes GET.

UPDATE: permite modificar registros existentes mediante solicitudes PATCH.

DELETE: permite eliminar registros mediante solicitudes DELETE.

Estas operaciones constituyen la base funcional sobre la cual se diseñaron los escenarios de prueba.

Manejo de respuestas HTTP

La API también incorpora mecanismos para identificar solicitudes inválidas y recursos inexistentes.

Entre los códigos HTTP relevantes para este tipo de aplicación se encuentran:

Código HTTP Significado
200 Solicitud procesada correctamente
201 Recurso creado satisfactoriamente
400 Solicitud con datos incorrectos
404 Recurso o ruta no encontrada
500 Error interno del servidor

La utilización de códigos de estado adecuados facilita que las herramientas de prueba puedan verificar automáticamente el resultado de las operaciones.

Repositorio público

El código fuente del proyecto se encuentra disponible en GitHub:

🔗 Ver repositorio de la API REST

El repositorio contiene la implementación, la colección de pruebas, la configuración de integración continua y la documentación técnica.

🧪 6. Implementación de pruebas automatizadas con Postman y Newman

Una vez desarrollada la API REST, se implementaron pruebas automatizadas para verificar el comportamiento de sus endpoints.

Para ello se utilizó Postman, una herramienta que permite crear solicitudes HTTP, definir parámetros, enviar datos y establecer aserciones sobre las respuestas obtenidas.

Posteriormente, las pruebas se ejecutaron mediante Newman para integrarlas con el proceso de automatización.

6.1. Diseño de los casos de prueba

Las verificaciones se organizaron para cubrir funcionalidades esenciales y condiciones de error.

Entre los escenarios considerados se encuentran:

  • Comprobar la disponibilidad de la API.
  • Verificar la respuesta de la página de bienvenida.
  • Consultar el listado de tareas.
  • Registrar nuevas tareas.
  • Consultar tareas existentes.
  • Actualizar información de las tareas.
  • Eliminar registros.
  • Validar códigos de respuesta HTTP.
  • Comprobar el manejo de recursos inexistentes.
  • Evaluar solicitudes con datos inválidos.

Estas comprobaciones permiten verificar tanto el comportamiento esperado del servicio como su capacidad para responder apropiadamente ante solicitudes incorrectas.

6.2. Validación automática de respuestas

Postman permite utilizar JavaScript para definir aserciones sobre las respuestas recibidas.

Por ejemplo, una validación del código HTTP 200 puede escribirse de la siguiente manera:

pm.test("La respuesta debe ser HTTP 200", function () { pm.response.to.have.status(200); }); 

Este ejemplo comprueba que el servidor devuelva el código HTTP esperado.

También es posible validar propiedades de una respuesta JSON:

pm.test("La respuesta debe ser JSON", function () { pm.response.to.be.json; }); 

Estas verificaciones ayudan a detectar resultados inesperados sin necesidad de inspeccionar manualmente cada respuesta.

6.3. Ejecución mediante Newman

Newman permite ejecutar una colección de Postman directamente desde la terminal.

Su sintaxis básica es:

newman run coleccion-postman.json 

También admite la generación de reportes en diferentes formatos, por ejemplo:

newman run coleccion-postman.json \ --reporters cli,junit \ --reporter-junit-export reporte.xml 

Los comandos mostrados son ejemplos generales de ejecución. En el proyecto, Newman se integró mediante scripts automatizados y un workflow de GitHub Actions.

6.4. Resultados de las pruebas

Después de implementar y ejecutar la colección, se obtuvieron los siguientes resultados finales:

Indicador Resultado
Solicitudes ejecutadas 21
Aserciones ejecutadas 21
Aserciones aprobadas 21
Aserciones fallidas 0
Resultado final EXITOSO ✅

Las verificaciones finalizaron satisfactoriamente durante las ejecuciones locales y en el entorno público de Render.

Estos resultados proporcionan evidencia de que los escenarios evaluados respondieron de acuerdo con las condiciones esperadas.

Es importante destacar que las pruebas automatizadas permiten comprobar funcionalidades específicas, pero sus resultados no garantizan que una aplicación esté completamente libre de errores.

⚙️ 7. Integración continua mediante GitHub Actions

La integración continua, conocida como CI (Continuous Integration), es una práctica de desarrollo que permite incorporar cambios al repositorio y ejecutar verificaciones automatizadas sobre ellos.

En este proyecto se utilizó GitHub Actions para automatizar la ejecución de las pruebas de API.

7.1. Funcionamiento de GitHub Actions

El proceso implementado permite realizar las siguientes actividades:

Paso 1. Un cambio en el proyecto se registra mediante Git.

Paso 2. El código actualizado se publica en el repositorio de GitHub.

Paso 3. GitHub Actions ejecuta el workflow correspondiente.

Paso 4. Se prepara el entorno de Node.js y se instalan las dependencias necesarias.

Paso 5. Se ejecutan las pruebas de API utilizando Newman.

Paso 6. Se generan los resultados y se determina si la ejecución fue satisfactoria.

Este procedimiento permite identificar errores durante las verificaciones de integración continua.

7.2. Importancia de automatizar las pruebas

Sin automatización, las pruebas requieren que el desarrollador ejecute manualmente las solicitudes para comprobar el funcionamiento del sistema.

En cambio, mediante GitHub Actions es posible ejecutar las validaciones de forma repetible y registrar los resultados asociados a los cambios del repositorio.

Entre sus principales beneficios se encuentran la reducción de tareas manuales, la detección temprana de problemas y la trazabilidad de las verificaciones.

7.3. Resultado de GitHub Actions

La ejecución final del workflow concluyó satisfactoriamente y confirmó que las verificaciones configuradas fueron aprobadas.

✅ Estado final: Success

La evidencia pública puede consultarse directamente:

🔗 Ver ejecución exitosa de GitHub Actions

Esta ejecución corresponde a la validación de la versión final del proyecto publicada en el repositorio.

☁️ 8. Despliegue automático de la API en Render

Después de configurar las pruebas automatizadas y la integración continua, se publicó la aplicación en la plataforma cloud Render.

Render permite alojar servicios web y conectarlos con repositorios de GitHub para automatizar su despliegue.

En este proyecto se utilizó un servicio del plan gratuito, conectado a la rama principal del repositorio.

8.1. Configuración del servicio

Parámetro Configuración
Plataforma cloud Render
Tipo de servicio Web Service
Plan Free
Repositorio GitHub
Rama principal main
Automatización After CI Checks Pass
Estado del despliegue Live / Success

8.2. Despliegue condicionado a las pruebas

Una de las características más importantes de la solución fue configurar Render utilizando la opción After CI Checks Pass.

Esta configuración permite esperar a que las verificaciones de integración continua finalicen correctamente antes de iniciar el despliegue automático.

De esta manera, la publicación de nuevas versiones depende de los resultados de las comprobaciones configuradas en GitHub Actions.

Este enfoque representa una aplicación práctica de los principios de CI/CD, ya que integra la validación automatizada con la entrega del software.

8.3. Aplicación pública

La API REST se encuentra publicada en:

🌐 https://gestion-tareas-academicas.onrender.com/

La ruta principal presenta una página de bienvenida que permite identificar el sistema.

Adicionalmente, se encuentra disponible el endpoint de verificación de disponibilidad:

🔎 https://gestion-tareas-academicas.onrender.com/health

Durante las verificaciones finales se confirmó que ambas rutas respondían con HTTP 200.

8.4. Pruebas contra producción

Después del despliegue, se ejecutó nuevamente la colección de Newman, utilizando la URL pública de Render.

Los resultados fueron satisfactorios:

  • ✅ Servicio publicado correctamente.
  • ✅ Página principal respondiendo HTTP 200.
  • ✅ Endpoint /health respondiendo HTTP 200.
  • ✅ 21 solicitudes ejecutadas.
  • ✅ 21 aserciones aprobadas.
  • ✅ 0 aserciones fallidas.

Esto permitió comprobar que los escenarios funcionales evaluados también se ejecutaban satisfactoriamente en el entorno público.

📊 9. Resultados generales del proyecto

La integración de todas las tecnologías permitió completar un proceso automatizado que conecta el desarrollo de una API con las pruebas funcionales y su publicación en Internet.

Resumen de resultados

Actividad Resultado
Desarrollo de la API REST ✅ Completado
Implementación de operaciones CRUD ✅ Completada
Publicación en GitHub ✅ Completada
Colección de pruebas Postman ✅ Implementada
Ejecución mediante Newman ✅ Exitosa
Integración con GitHub Actions ✅ Exitosa
Despliegue en Render ✅ Exitoso
Pruebas en producción ✅ Aprobadas
Aserciones fallidas 0

El principal resultado fue conseguir que 21 solicitudes y 21 aserciones se ejecutaran satisfactoriamente, tanto en el proceso de validación automatizada como en la verificación de la API publicada.

Beneficios identificados

Mayor repetibilidad: las pruebas pueden ejecutarse tantas veces como sea necesario sin reconstruir manualmente cada solicitud.

Detección temprana de errores: las verificaciones automatizadas facilitan identificar problemas antes de publicar nuevas versiones.

Trazabilidad del desarrollo: GitHub permite consultar el historial de commits y relacionarlo con los resultados de GitHub Actions.

Automatización del despliegue: Render permite conectar la publicación con el resultado de las verificaciones de integración continua.

Disponibilidad pública: la API puede consultarse mediante una dirección HTTPS, sin necesidad de instalar el proyecto localmente.

Limitaciones de la implementación

La aplicación utiliza almacenamiento temporal en memoria, por lo que los registros creados no se conservan después de reiniciar el servicio.

Asimismo, al utilizar el plan gratuito de Render, el servicio puede entrar en reposo después de períodos de inactividad, ocasionando que la primera solicitud tarde más en responder.

Por otro lado, las pruebas implementadas se enfocaron en los escenarios funcionales definidos para el proyecto. Una implementación orientada a producción real podría complementarse con una base de datos persistente, pruebas de rendimiento, pruebas de seguridad y monitoreo.

💡 10. Aprendizajes obtenidos

El desarrollo de este proyecto permitió comprender la importancia de integrar mecanismos de aseguramiento de calidad durante todo el ciclo de desarrollo de software.

En primer lugar, se comprobó que las pruebas de API pueden ejecutarse independientemente de la interfaz gráfica de una aplicación, permitiendo validar directamente el comportamiento de los servicios REST.

En segundo lugar, Newman demostró ser una herramienta útil para convertir las colecciones Postman en pruebas automatizadas capaces de ejecutarse desde la terminal.

Asimismo, GitHub Actions facilitó la integración de las pruebas con el repositorio de código fuente, permitiendo obtener resultados verificables después de los cambios realizados.

Finalmente, la publicación en Render permitió aplicar un mecanismo de despliegue automático condicionado a las verificaciones de integración continua.

La experiencia permitió relacionar conceptos de API Testing, integración continua, despliegue continuo y calidad de software dentro de un proyecto funcional.

✅ 11. Conclusiones

Primera conclusión. La implementación de pruebas automatizadas mediante Postman y Newman permitió verificar las funcionalidades de una API REST de Gestión de Tareas Académicas, obteniendo 21 solicitudes y 21 aserciones aprobadas, sin fallos en las ejecuciones finales.

Segunda conclusión. La integración de Newman con GitHub Actions permitió automatizar las verificaciones del servicio, mejorando la repetibilidad de las pruebas y proporcionando trazabilidad de los resultados asociados a los cambios del proyecto.

Tercera conclusión. La configuración de Render con despliegue automático condicionado a los resultados de CI permitió completar un flujo de desarrollo, pruebas y publicación en la nube, demostrando una aplicación práctica de la automatización en el aseguramiento de la calidad del software.

En conclusión, este proyecto demuestra que la automatización de pruebas no debe considerarse únicamente una actividad de validación final, sino una parte fundamental del proceso de desarrollo y entrega de aplicaciones.

🔗 12. Enlaces y recursos del proyecto

El proyecto se encuentra disponible públicamente para consultar el código fuente, revisar las pruebas y acceder a la aplicación desplegada.

💻 Repositorio GitHub

https://github.com/anaesteban1/api-testing-newman-github-actions

🌐 API REST desplegada en Render

https://gestion-tareas-academicas.onrender.com/

✅ GitHub Actions — ejecución exitosa

https://github.com/anaesteban1/api-testing-newman-github-actions/actions/runs/43115635584

📘 Documentación técnica

https://github.com/anaesteban1/api-testing-newman-github-actions/blob/main/README.md

📚 13. Referencias

🚀 Reflexión final

Automatizar las pruebas de software no consiste únicamente en ejecutar solicitudes HTTP. Implica construir un proceso confiable que permita comprobar el funcionamiento de una aplicación, identificar errores y utilizar los resultados de las verificaciones para controlar su publicación.

Mediante la integración de Newman, GitHub Actions y Render, fue posible implementar un flujo completo que conecta una API REST con las prácticas de pruebas automatizadas y CI/CD.

El resultado: una API pública, 21 aserciones aprobadas, ninguna fallida y un proceso de despliegue automatizado.

Gracias por leer este artículo. ¡Espero que esta experiencia sea útil para quienes buscan comenzar a implementar pruebas automatizadas de API y procesos de integración continua!