Implementering av Contract Testing med Postman

Dykk inn i den praktiske verden av Contract Testing med en hands-on guide! Vi utforsker hvordan man implementerer en Contract Testing ved hjelp av Postman, AVJ og catfact.ninja API. Frigjør din indre tester og start å validere dine APIer som en proff!

Wessel Braakman

Publisert:

21. jun. 2023

Trykk på taggene for å lese mer om hvor og hvordan vi benytter samme fag og teknologi

Introduksjon

I min forrige bloggpost dykket vi inn i konseptet Contract Testing og utforsket hvordan en API-kontrakt er sammensatt. I dag skal vi bruke denne kunnskapen praktisk ved å implementere en Contract Test ved hjelp av Postman, et verktøy som er veldig populært i API-testsamfunnet. Vårt emne for dette eksperimentet vil være den sjarmerende catfact.ninja API.

Contract Testing sikrer at tjenester som API-er, overholder sin erklærte kontrakt. I mikrotjenesteverdenen er denne formen for testing avgjørende, og verifiserer at endringer i en tjeneste verken bryter kontrakten eller forårsaker skadelige ringvirkninger på andre tjenester. Vi skal bruke Postman og AJV (Another JSON Schema Validator), en rask JSON-skjemavalidator, for å validere disse kontraktene.

Forutsetninger

For å følge denne bloggposten, trenger du:

Eksempel-API

Vår API av valg for denne veiledningen er den lystige catfact.ninja API. Spesielt vil vi bruke GET catfact.ninja/fact endepunktet, som gir oss en tilfeldig fakta om katter.

Et typisk svar fra dette endepunktet ser slik ut:

{
  "fact": "A cat's brain is 90% similar to a human's brain.",
  "length": 50
}

Lag et JSON-skjema som kan brukes med Postman

Basert på API-ens svar, kan vi nå lage et JSON-skjema som beskriver datastrukturen. Her er et eksempel på hvordan det skjemaet kan se ut:

{
  "$schema": "json-schema.org/draft-07/schema#",
  "type": "object",
  "properties": {
    "fact": {
      "type": "string"
    },
    "length": {
      "type": "number"
    }
  },
  "required": ["fact", "length"]
}

Dette skjemaet bekrefter at svaret er et objekt som inneholder en "fact" streng og et "length" nummer. Begge disse egenskapene er nødvendige.

Sett opp Postman

Med vårt skjema klart, la oss dykke inn i oppsettet av Postman.

  • Lage en forespørsel: Åpne Postman og lag en ny GET-forespørsel. Sett forespørsels-URLen til catfact.ninja/fact.
GET cat fact
  • Legge til tester: Klikk på "Tests"-fanen for å legge til noen testskript.

Legg til AJV og bruke skjemaet for validering

Her kommer AJV inn i bildet. AJV lar oss validere JSON-data mot et JSON-skjema, noe som er ideelt for Contract Testing. Postman's testskript kan bruke AJV-biblioteket for å validere API-responsen mot vårt skjema.

Først må vi lagre skjemaet vårt i pre-request-scriptet i vår Postman-samling.

*** Kodebiten nedenfor, limt inn i Pre-request Script delen
// Define schema
pm.environment.set("catFact_schema", {
  "$schema": "json-schema.org/draft-07/schema#",
  "type": "object",
  "properties": {
    "fact": {
      "type": "string"
    },
    "length": {
      "type": "number"
    }
  },
  "required": ["fact", "length"]
});

 

Deretter går vi over til Tests-delen:

*** Kodebiten nedenfor, limt inn i Tests delen
// Initialize AJV
var Ajv = require('ajv');
ajv = new Ajv({logger: console});

// Set schema parameter (the variable we created in pre-request)
var schema = pm.environment.get("catFact_schema");

// Set data parameter (the parsed json response body)
var data = pm.response.json();

// Check validation result
pm.test('CatFact response adheres to schema', function() {
    pm.expect(ajv.validate(schema, data)).to.be.true;
});

I dette skriptet henter vi skjemaet som ble opprettet i pre-request-scriptet, initialiserer AJV, kompilerer skjemaet ved hjelp av AJV, og validerer responskroppen mot skjemaet. Hvis valideringen mislykkes, logger den feilene; hvis det består, logger den en suksessmelding.

Kjør testen

Etter å ha satt opp testen, er du nå klar til å kjøre den. Klikk "Send" for å utføre GET-forespørselen. Etter at forespørselen er fullført, kan du sjekke testresultatene i "Test Results"-fanen i responsdelen.

*** Vellykket test

Konklusjon

Og det var det! Du har nå satt opp og kjørt en Contract Test ved hjelp av Postman og AJV. Contract Testing kan være et kraftig verktøy i vedlikeholdet av dine API-er, spesielt i mikroservicestrukturer. Det sikrer at tjenester fortsetter å samhandle sømløst, selv når individuelle tjenester utvikler seg. Utstyrt med verktøy som Postman og AJV, kan du effektivt holde kontraktene dine for API-er intakt. Lykkelig testing!

Artikkel av:

Wessel Braakman
IT-konsulent
Test og Kvalitetssikring