"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > Una guía para las pruebas de contratos impulsadas por el consumidor

Una guía para las pruebas de contratos impulsadas por el consumidor

Publicado el 2024-10-31
Navegar:934

A Guide to Consumer-Driven Contract Testing
En las arquitecturas de microservicios modernas, las aplicaciones dependen en gran medida de la comunicación entre servicios, a menudo a través de API. Es fundamental garantizar que estas API sigan funcionando como se espera durante el desarrollo y después de los cambios. Una forma eficaz de lograrlo es mediante las pruebas de contratos impulsadas por el consumidor (CDCT). CDCT es un método que garantiza que los servicios (productores) cumplan con las expectativas establecidas por los servicios que consumen sus API (consumidores).

En esta guía, exploraremos qué es CDCT, cómo funciona, su importancia para garantizar interacciones confiables de microservicios y cómo puede implementarlo utilizando herramientas como Pact.

¿Qué son las pruebas de contrato impulsadas por el consumidor?
Las pruebas de contratos impulsadas por el consumidor son una estrategia de prueba que garantiza que la comunicación entre servicios en una arquitectura distribuida cumpla con los contratos acordados. Se diferencia de las pruebas de API tradicionales al centrarse en las necesidades del consumidor, en lugar de simplemente garantizar que la API en sí funcione correctamente. El contrato entre el consumidor y el proveedor de API está definido por las expectativas del consumidor, y este contrato se verifica con la implementación del proveedor.

Términos clave:
• Consumidor: El servicio que consume la API.
• Proveedor (Productor): El servicio que proporciona la API.
• Contrato: Un acuerdo formal entre el consumidor y el proveedor que especifica el comportamiento esperado de la API.

¿Cómo funciona?

  1. El consumidor define el contrato: El consumidor define sus expectativas sobre cómo debe comportarse la API del proveedor (por ejemplo, qué puntos finales, formatos de datos y códigos de estado de respuesta espera).
  2. El contrato es compartido: El consumidor comparte este contrato con el proveedor. Este contrato sirve como especificación de lo que debe cumplir el proveedor.
  3. El proveedor verifica el contrato: El proveedor se compara con el contrato del consumidor, asegurándose de que cumple con las expectativas del consumidor.
  4. Bucle de retroalimentación continua: Cualquier cambio importante en la API del proveedor se detectará temprano ya que el proveedor debe validarlo con los contratos de todos los consumidores. Esto crea una red de seguridad para garantizar que los cambios en el proveedor no afecten negativamente a los consumidores.

Importancia de las pruebas de contratos impulsadas por el consumidor
En arquitecturas distribuidas, especialmente con microservicios, la gestión de dependencias entre servicios se vuelve más compleja. CDCT ayuda a aliviar esta complejidad de varias maneras:

1. Previene roturas en la producción
Dado que los consumidores definen lo que necesitan, los cambios en la API del proveedor que no cumplan con las expectativas del consumidor se detectan en las primeras etapas del proceso de desarrollo. Esto reduce el riesgo de dañar los sistemas de producción debido a cambios incompatibles.

2. Desarrollo de desacoplamiento
Las pruebas de contratos impulsadas por el consumidor permiten a los consumidores y proveedores desarrollarse de forma independiente. Esto es especialmente útil cuando los equipos o servicios evolucionan por separado. Los contratos sirven como una interfaz que garantiza que la integración funcione según lo esperado sin la necesidad de realizar pruebas de integración completas durante cada ciclo de desarrollo.

3. Ciclos de desarrollo más rápidos
Con CDCT, tanto el consumidor como el proveedor pueden desarrollarse y probarse en paralelo, acelerando el desarrollo. Los proveedores pueden realizar pruebas con el contrato del consumidor incluso antes de que el consumidor implemente completamente su funcionalidad.

4. Detección temprana de violaciones de contratos
Los cambios en el proveedor que violan el contrato se detectan temprano en el proceso de desarrollo, lo que permite a los desarrolladores abordar los problemas antes de que se vuelvan críticos.

Cómo implementar pruebas de contratos impulsadas por el consumidor
Hay varias herramientas disponibles para implementar CDCT, siendo Pact una de las más populares. Pact permite a los consumidores definir sus contratos y a los proveedores verificarlos.

Aquí hay una guía paso a paso para implementar CDCT usando Pact:
Paso 1: Definir las expectativas del consumidor
Primero, en el servicio al consumidor, defina el contrato. Esto generalmente incluye lo siguiente:
• El punto final al que llamará el consumidor.
• El método de solicitud (GET, POST, PUT, etc.).
• El cuerpo o los parámetros de la solicitud esperados.
• El cuerpo de la respuesta esperada y el código de estado.
A continuación se muestra un ejemplo de cómo definir un contrato en una prueba de consumidor usando Pact en JavaScript:

const { Pact } = require('@pact-foundation/pact');
const path = require('path');

const provider = new Pact({
    consumer: 'UserService',
    provider: 'UserAPI',
    port: 1234,
    log: path.resolve(process.cwd(), 'logs', 'pact.log'),
    dir: path.resolve(process.cwd(), 'pacts'),
});

describe('Pact Consumer Test', () => {
    beforeAll(() => provider.setup());

    afterAll(() => provider.finalize());

    it('should receive user details from the API', async () => {
        // Define the expected interaction
        await provider.addInteraction({
            state: 'user exists',
            uponReceiving: 'a request for user details',
            withRequest: {
                method: 'GET',
                path: '/users/1',
                headers: {
                    Accept: 'application/json',
                },
            },
            willRespondWith: {
                status: 200,
                headers: {
                    'Content-Type': 'application/json',
                },
                body: {
                    id: 1,
                    name: 'John Doe',
                },
            },
        });

        // Make the actual request and test
        const response = await getUserDetails(1);
        expect(response).toEqual({ id: 1, name: 'John Doe' });
    });
});

En este ejemplo, el consumidor (UserService) espera que el proveedor (UserAPI) devuelva detalles del usuario al realizar una solicitud GET a /users/1.

Paso 2: Publicar el contrato
Una vez que pasa la prueba del consumidor, Pact genera un archivo de contrato (archivo Pact) que se puede compartir con el proveedor. Este contrato se puede almacenar en un corredor de Pact o en un sistema de control de versiones para que el proveedor pueda usarlo para verificación.

Paso 3: El proveedor verifica el contrato
El proveedor recupera el contrato y verifica que cumple con las expectativas del consumidor. Esto se hace ejecutando una prueba de Pact por parte del proveedor. A continuación se muestra un ejemplo de verificación de un contrato Pact en Java:

public class ProviderTest {

    @Test
    public void testProviderAgainstPact() {
        PactVerificationResult result = new PactVerifier()
            .verifyProvider("UserAPI", "pacts/UserService-UserAPI.json");

        assertThat(result, instanceOf(PactVerificationResult.Ok.class));
    }
}

El proveedor realiza esta prueba para garantizar que cumple con el contrato especificado por el consumidor.

Paso 4: Integración continua
Una vez que CDCT se integra en su proceso de CI/CD, cada vez que cambia un contrato, el proveedor puede verificarlo automáticamente. Esto garantiza que los cambios de API no rompan las expectativas del consumidor, proporcionando una red de seguridad para ambos equipos.

Mejores prácticas de CDCT

  1. Contratos pequeños y enfocados: Asegúrese de que sus contratos sean pequeños y se centren únicamente en las necesidades del consumidor. Esto evita complejidades innecesarias en el contrato y simplifica la verificación.
  2. Versión de contratos: Versione siempre sus contratos. Esto permite a los proveedores manejar múltiples versiones del mismo contrato, lo que le ayuda a brindar soporte a diferentes consumidores en diferentes etapas de desarrollo.
  3. Implementación independiente: Asegúrese de que CDCT sea parte de su proceso de CI/CD. Cualquier cambio en el consumidor o proveedor debe desencadenar pruebas de contrato para evitar interrumpir los entornos de producción.
  4. Utilice un corredor de Pact: Un corredor de Pact es un repositorio central que almacena sus contratos y permite que tanto los consumidores como los proveedores los recuperen. También proporciona una interfaz de usuario para visualizar versiones y dependencias del contrato.

Cuándo utilizar las pruebas de contrato impulsadas por el consumidor
CDCT es particularmente útil cuando:
• Tienes microservicios o arquitecturas distribuidas con múltiples servicios interactuando.
• Los equipos que trabajan en diferentes servicios deben desarrollarse de forma independiente sin pruebas de integración frecuentes.
• Es probable que los contratos de API cambien con frecuencia y desea evitar romper las expectativas de los consumidores.
• Necesita ciclos de retroalimentación rápidos para detectar violaciones de contratos en las primeras etapas del proceso de desarrollo.

Conclusión
Las pruebas de contratos impulsadas por el consumidor ofrecen una forma confiable de garantizar que los servicios en un sistema distribuido se comuniquen de manera efectiva sin cambios importantes. Al centrarse en las expectativas de los consumidores y validar al proveedor en función de ellas, CDCT ayuda a los equipos a desarrollarse de forma independiente y, al mismo tiempo, garantiza la estabilidad. Ya sea que esté creando microservicios, aplicaciones basadas en API o sistemas distribuidos, incorporar CDCT en su estrategia de prueba mejorará la confiabilidad y escalabilidad de sus servicios.

Declaración de liberación Este artículo se reproduce en: https://dev.to/keploy/a-guide-to-consumer-driven-contract-testing-2dho?1 Si hay alguna infracción, comuníquese con [email protected] para eliminarla.
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3