„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Ein Leitfaden für verbraucherorientierte Vertragstests

Ein Leitfaden für verbraucherorientierte Vertragstests

Veröffentlicht am 31.10.2024
Durchsuche:186

A Guide to Consumer-Driven Contract Testing
In modernen Microservices-Architekturen sind Anwendungen stark auf die Kommunikation zwischen Diensten angewiesen, häufig über APIs. Es ist von entscheidender Bedeutung, sicherzustellen, dass diese APIs während der Entwicklung und nach Änderungen weiterhin wie erwartet funktionieren. Ein effektiver Weg, dies zu erreichen, ist das Consumer Driven Contract Testing (CDCT). CDCT ist eine Methode, die sicherstellt, dass Dienste (Produzenten) die Erwartungen der Dienste einhalten, die ihre APIs nutzen (Konsumenten).

In diesem Leitfaden untersuchen wir, was CDCT ist, wie es funktioniert, welche Bedeutung es für die Gewährleistung zuverlässiger Microservices-Interaktionen hat und wie Sie es mit Tools wie Pact implementieren können.

Was sind verbraucherorientierte Vertragstests?
Consumer-Driven Contract Testing ist eine Teststrategie, die sicherstellt, dass die Kommunikation zwischen Diensten in einer verteilten Architektur den vereinbarten Verträgen entspricht. Es unterscheidet sich von herkömmlichen API-Tests dadurch, dass es sich auf die Bedürfnisse der Verbraucher konzentriert und nicht nur darauf, dass die API selbst korrekt funktioniert. Der Vertrag zwischen dem API-Verbraucher und dem Anbieter wird durch die Erwartungen des Verbrauchers definiert und dieser Vertrag wird anhand der Implementierung des Anbieters überprüft.

Schlüsselbegriffe:
• Verbraucher: Der Dienst, der die API nutzt.
• Anbieter (Produzent): Der Dienst, der die API bereitstellt.
• Vertrag: Eine formelle Vereinbarung zwischen Verbraucher und Anbieter, die das erwartete API-Verhalten festlegt.

Wie funktioniert es?

  1. Der Verbraucher definiert den Vertrag: Der Verbraucher definiert seine Erwartungen darüber, wie sich die API des Anbieters verhalten soll (z. B. welche Endpunkte, Datenformate und Antwortstatuscodes er erwartet).
  2. Vertrag wird geteilt: Der Verbraucher teilt diesen Vertrag mit dem Anbieter. Dieser Vertrag dient als Vorgabe dessen, was der Anbieter erfüllen muss.
  3. Anbieter überprüft den Vertrag: Der Anbieter testet sich selbst anhand des Vertrags des Verbrauchers und stellt sicher, dass er die Erwartungen des Verbrauchers erfüllt.
  4. Kontinuierliche Feedbackschleife: Alle bahnbrechenden Änderungen an der API des Anbieters werden frühzeitig erkannt, da der Anbieter eine Validierung anhand aller Verbraucherverträge durchführen muss. Dadurch wird ein Sicherheitsnetz geschaffen, um sicherzustellen, dass sich Änderungen beim Anbieter nicht negativ auf die Verbraucher auswirken.

Bedeutung verbraucherorientierter Vertragstests
In verteilten Architekturen, insbesondere mit Microservices, wird die Verwaltung von Abhängigkeiten zwischen Diensten komplexer. CDCT trägt auf verschiedene Weise dazu bei, diese Komplexität zu verringern:

1. Verhindert Produktionsausfälle
Da Verbraucher selbst definieren, was sie benötigen, werden Änderungen an der API des Anbieters, die nicht den Erwartungen des Verbrauchers entsprechen, frühzeitig in der Entwicklungspipeline erkannt. Dies verringert das Risiko, dass Produktionssysteme aufgrund inkompatibler Änderungen kaputt gehen.

2. Entkopplungsentwicklung
Verbraucherorientierte Vertragstests ermöglichen es Verbrauchern und Anbietern, sich unabhängig voneinander zu entwickeln. Dies ist besonders nützlich, wenn sich Teams oder Dienste separat weiterentwickeln. Verträge dienen als Schnittstelle und stellen sicher, dass die Integration wie erwartet funktioniert, ohne dass in jedem Entwicklungszyklus vollständige Integrationstests erforderlich sind.

3. Schnellere Entwicklungszyklen
Mit CDCT können sowohl Verbraucher als auch Anbieter parallel entwickelt und getestet werden, was die Entwicklung beschleunigt. Anbieter können den Vertrag des Verbrauchers testen, noch bevor der Verbraucher seine Funktionalität vollständig implementiert.

4. Frühzeitige Erkennung von Vertragsverstößen
Änderungen am Anbieter, die gegen den Vertrag verstoßen, werden frühzeitig im Entwicklungsprozess erkannt, sodass Entwickler Probleme beheben können, bevor sie kritisch werden.

So implementieren Sie verbraucherorientierte Vertragstests
Für die Implementierung von CDCT stehen mehrere Tools zur Verfügung, wobei Pact eines der beliebtesten ist. Pact ermöglicht es Verbrauchern, ihre Verträge zu definieren, und Anbietern, diese zu überprüfen.

Hier ist eine Schritt-für-Schritt-Anleitung zur Implementierung von CDCT mit Pact:
Schritt 1: Verbrauchererwartungen definieren
Definieren Sie zunächst im Verbraucherservice den Vertrag. Dazu gehört normalerweise Folgendes:
• Der Endpunkt, den der Verbraucher aufruft.
• Die Anforderungsmethode (GET, POST, PUT usw.).
• Der erwartete Anforderungstext oder die erwarteten Parameter.
• Der erwartete Antworttext und Statuscode.
Hier ist ein Beispiel für die Definition eines Vertrags in einem Verbrauchertest mit Pact in 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' });
    });
});

In diesem Beispiel erwartet der Verbraucher (UserService) vom Anbieter (UserAPI), dass er Benutzerdetails zurückgibt, wenn er eine GET-Anfrage an /users/1 stellt.

Schritt 2: Den Vertrag veröffentlichen
Sobald der Verbrauchertest bestanden ist, generiert Pact eine Vertragsdatei (Pact-Datei), die mit dem Anbieter geteilt werden kann. Dieser Vertrag kann in einem Pact-Broker oder einem Versionskontrollsystem gespeichert werden, sodass der Anbieter ihn zur Überprüfung verwenden kann.

Schritt 3: Anbieter überprüft den Vertrag
Der Anbieter ruft den Vertrag ab und prüft, ob er den Erwartungen des Verbrauchers entspricht. Dies erfolgt durch die Durchführung eines Pact-Tests auf Anbieterseite. Hier ist ein Beispiel für die Überprüfung eines Pact-Vertrags in Java:

public class ProviderTest {

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

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

Der Anbieter führt diesen Test durch, um sicherzustellen, dass er den vom Verbraucher angegebenen Vertrag einhält.

Schritt 4: Kontinuierliche Integration
Sobald CDCT in Ihre CI/CD-Pipeline integriert ist, kann der Anbieter den Vertrag bei jeder Vertragsänderung automatisch überprüfen. Dies stellt sicher, dass API-Änderungen nicht die Erwartungen des Verbrauchers verletzen, und bietet ein Sicherheitsnetz für beide Teams.

CDCT Best Practices

  1. Kleine, zielgerichtete Verträge: Stellen Sie sicher, dass Ihre Verträge klein sind und sich nur auf die Bedürfnisse des Verbrauchers konzentrieren. Dies verhindert unnötige Komplexität im Vertrag und vereinfacht die Überprüfung.
  2. Vertragsversionierung: Versionieren Sie Ihre Verträge immer. Dadurch können Anbieter mehrere Versionen desselben Vertrags verwalten und so verschiedene Verbraucher in unterschiedlichen Entwicklungsstadien unterstützen.
  3. Unabhängige Bereitstellung: Stellen Sie sicher, dass CDCT Teil Ihrer CI/CD-Pipeline ist. Alle Änderungen am Verbraucher oder Anbieter sollten Vertragstests auslösen, um eine Unterbrechung der Produktionsumgebungen zu vermeiden.
  4. Verwenden Sie einen Pact-Broker: Ein Pact-Broker ist ein zentrales Repository, das Ihre Verträge speichert und es sowohl Verbrauchern als auch Anbietern ermöglicht, sie abzurufen. Es bietet außerdem eine Benutzeroberfläche zur Visualisierung von Vertragsversionen und Abhängigkeiten.

Wann sollten verbraucherorientierte Vertragstests eingesetzt werden?
CDCT ist besonders nützlich, wenn:
• Sie verfügen über Microservices oder verteilte Architekturen mit mehreren interagierenden Services.
• Teams, die an verschiedenen Diensten arbeiten, müssen unabhängig voneinander entwickeln, ohne häufige Integrationstests.
• API-Verträge ändern sich wahrscheinlich häufig und Sie möchten vermeiden, dass die Erwartungen der Verbraucher gebrochen werden.
• Sie benötigen schnelle Feedbackschleifen, um Vertragsverstöße frühzeitig im Entwicklungsprozess zu erkennen.

Abschluss
Verbrauchergesteuerte Vertragstests bieten eine zuverlässige Möglichkeit, sicherzustellen, dass Dienste in einem verteilten System effektiv kommunizieren, ohne Änderungen zu beeinträchtigen. Durch die Fokussierung auf die Erwartungen der Verbraucher und die Validierung des Anbieters anhand dieser unterstützt CDCT Teams dabei, sich unabhängig zu entwickeln und gleichzeitig Stabilität zu gewährleisten. Unabhängig davon, ob Sie Microservices, API-basierte Anwendungen oder verteilte Systeme erstellen, wird die Integration von CDCT in Ihre Teststrategie die Zuverlässigkeit und Skalierbarkeit Ihrer Dienste verbessern.

Freigabeerklärung Dieser Artikel ist abgedruckt unter: https://dev.to/keploy/a-guide-to-consumer-driven-contract-testing-2dho?1 Bei Verstößen wenden Sie sich bitte an [email protected], um ihn zu löschen
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3