Contract based testing

9 sep. 2023 | by Ralph Van Der Horst

Contract based testing

Service Virtualisatie en Pact: Efficiëntie in een Multi-Leverancier Ecosysteem

Wanneer organisaties te maken hebben met een groot aantal leveranciers, kan het opzetten en onderhouden van afzonderlijke testomgevingen voor elk van deze services aanzienlijk in de kosten lopen. Elke omgeving zou niet alleen infrastructuur en licentiekosten met zich meebrengen, maar ook overheadkosten voor configuratie, onderhoud en synchronisatie tussen de verschillende omgevingen.

Service virtualisatie komt hier in beeld. Door het gebruik van service virtualisatie kunnen teams afhankelijkheden simuleren en isoleren, waardoor de noodzaak van het hebben van volledige, geïntegreerde testomgevingen voor elk afzonderlijk component of elke leverancier verminderd wordt.

Pact biedt hierin een unieke waarde. In combinatie met service virtualisatie kan Pact niet alleen contracten valideren, maar ook een gesimuleerde omgeving bieden waarin deze contracten worden gehonoreerd. Dit betekent dat, in plaats van te moeten wachten op een volledige leveranciersimplementatie, ontwikkelaars en testers met Pact en service virtualisatie hun interacties kunnen valideren in een lichtgewicht, virtuele omgeving.

Dit levert substantiële kostenbesparingen op:

  • Verminderde infrastructuurkosten: Minder fysieke of cloud-gebaseerde resources zijn nodig voor testdoeleinden.
  • Verminderde afhankelijkheid: Teams zijn minder afhankelijk van externe leveranciers voor het testen van integraties.
  • Snellere feedback loops: Door het verminderen van afhankelijkheden kunnen teams sneller itereren en fouten eerder in het ontwikkelproces identificeren.
  • Backwardcompatibiliteit vanuit Pact: Door te testen tegen oudere versies van contracten, kunnen providers zeker zijn dat nieuwe wijzigingen geen bestaande consumenten zullen breken.
  • Vooruitplannen vanuit Pact: Consumenten kunnen hun integraties testen tegen toekomstige versies van providers om te zorgen voor een soepele overgang wanneer die nieuwe versies live gaan.

In een complex ecosysteem met veel leveranciers kan de combinatie van Pact en service virtualisatie dus zorgen voor snellere leveringen, minder afhankelijkheden en, bovenal, aanzienlijke kostenbesparingen.

hoe werkt contract testing een voorbeeld Contract Testing met Pact in Python

Laten we een voorbeeld bekijken van contract testing met Pact in Python. We hebben een “Consumer” service die informatie wil ophalen over een gebruiker van een “Provider” service.

Stap 1: Installatie

Installeer de benodigde pact-pakketten met pip:

pip install pact-python

Stap 2: Consumer Pact

Eerst schrijven we de Consumer Pact:

from pact import Consumer, Provider
import requests

# Setup pact
pact = Consumer('ConsumerService').has_pact_with(Provider('ProviderService'))
pact.start_service()
pact.setup()

@pact.given('User with ID 123 exists')
@pact.upon_receiving('A request for user 123')
@pact.with_request(method='GET', path='/user/123')
@pact.will_respond_with(200, body={
    "id": 123,
    "name": "John Doe"
})
def test_get_user():
    url = 'http://localhost:1234/user/123'
    result = requests.get(url)
    assert result.json() == {
        "id": 123,
        "name": "John Doe"
    }

pact.verify()
pact.stop_service()

Stap 3: Provider Pact

De Provider controleert vervolgens de gegenereerde pact-bestanden:

from pact import Verifier

# Setup Verifier
verifier = Verifier(provider='ProviderService', provider_base_url='http://provider-service-url')
verifier.verify_with_broker('http://broker-url', consumer_version='1.0.0')

Opmerkingen

  • Dit voorbeeld is simplistisch. In echte scenario’s zou je zaken als foutafhandeling, headers en andere configuratie moeten overwegen.
  • Pact-brokers zijn nuttig om pact-bestanden te delen, vooral in teams met meerdere pacts tussen verschillende services.

Binnenkort kan u dit live proberen omdat ik hard bezig ben met een demo omgeving voor UI, API en unit testing, en kan u dit leren in de repos die ik opgesteld heb.

Follow me on LinkedIn: www.linkedin.com/comm/mynetwork/discovery-see-all?usecase=PEOPLE_FOLLOWS&followMember=ralphvanderhorst

by Ralph Van Der Horst

arrow right
back to blog

share this article

Relevant articles

Wat kan service virtualizatie betekenen voor grote organizaties

9 sep. 2023

Wat kan service virtualizatie betekenen voor grote organizaties