Pruebas de Integración entre APIs y Bases de Datos

Clase 15 de 17Curso de Automatización de Pruebas de Backend con Cypress

Resumen

¿Cómo validar que una API se alinee con la base de datos?

Cuando desarrollamos software, la alineación entre las APIs y las bases de datos es crucial para mantener la integridad del sistema. A lo largo de esta clase, hemos aprendido a realizar pruebas que aseguran que lo que retorna una API es consistente con la información en la base de datos. Imagina que tienes un sistema de pagos: la API debe devolver montos que coincidan con los almacenados en la base de datos y en el formato adecuado, como añadir un signo de moneda. Este tipo de pruebas son esenciales para asegurar que el software sea de confianza.

¿Cómo implementar uniendo las pruebas de API y base de datos?

La clase se enfoca en unir el conocimiento de pruebas sobre APIs y bases de datos. Realizaremos un ejercicio paso a paso de cómo borrar un registro en la base de datos usando una API para validar su funcionamiento.

Creación del entorno de prueba

Antes de proceder, es esencial asegurarse de que el servidor esté corriendo. Si no es así, puedes iniciarlo con el comando configurado en el archivo package.json. Ahora, vamos a crear una nueva prueba denominada "uniendo todo".

describe('uniendo todo', () => {
    it('debería eliminar un registro', () => {
        // Petición para eliminar un registro específico
        cy.request({
            url: '/employees/3', // ID del registro a eliminar
            method: 'DELETE'
        }).then((response) => {
            // Validar el estado de la respuesta
            expect(response.status).to.equal(200);
        });

        // Validar que el registro ya no está en la base de datos
        cy.task('queryDb', 'SELECT * FROM employees WHERE id = 3').then((results) => {
            // Verificar que no hay registros con ese ID
            expect(results.length).to.equal(0);
        });
    });
});

Uso de plugins para consultas

Una vez eliminada la entrada mediante la API, es crucial verificar la base de datos para confirmar la eliminación. Aquí es donde los plugins personalizados son útiles, como el ejemplo del plugin queryDb.

Creación de peticiones dinámicas

La flexibilidad es clave al crear pruebas. Puedes utilizar interpolación de cadenas para manejar IDs de manera dinámica, evitando código estático en los entornos de prueba:

const employeeId = 3; // O la ID que necesites

cy.request({
    url: `/employees/${employeeId}`,
    method: 'DELETE'
}).then(response => {
    expect(response.status).to.equal(200);
});

¿Qué desafíos deberías explorar?

Implementar lo aprendido en escenarios más complejos es una forma eficaz de consolidar tus habilidades. Aquí te dejamos algunos retos:

  • Crea un registro en la base de datos y almacena su ID en el contexto utilizando un alias.
  • Prueba la consistencia entre lo que retorna la API y lo que almacenaste en la base de datos.
  • Desarrolla métodos que funcionen para bases de datos no relacionales.
  • Expande estos ejemplos a escenarios más complicados y comparte tus aprendizajes y experiencias, fomentando el intercambio de conocimiento entre desarrolladores.

La correcta integración y validación entre APIs y bases de datos es esencial para el desarrollo de software robusto y confiable. ¡Sigue aprendiendo y compartiendo tus conocimientos!