Servicevirtualisatie en pact devops

25 feb. 2024 | by Ralph Van Der Horst

Servicevirtualisatie en PACT DEVOPS

Servicevirtualisatie en PACT-integratie

Voordat we beginnen, wil ik dat je naar deze tekening kijkt en als je de blog hebt gelezen, hoop ik dat als je deze tekening nog eens bekijkt, je de context begrijpt.

Het artikel begint met een korte beschrijving van wat servicevirtualisatie is, wat pact is en waar het samenkomt!

Servicevirtualisatie is een techniek voor softwareontwikkeling en -testen waarmee externe systemen of services kunnen worden gesimuleerd. Door een virtuele omgeving te creëren die echte externe services nabootst, kunnen ontwikkelaars en testers toepassingen vergelijken met deze gesimuleerde services zonder afhankelijk te zijn van de daadwerkelijke externe systemen. Dit is met name gunstig voor integratietests, vooral wanneer externe systemen moeilijk toegankelijk, instabiel of duur zijn om in te stellen voor testdoeleinden.

Enige context met betrekking tot Stub Mock en de positie van Servicevirtualisatie

Stomp:

  • Vereenvoudigt afhankelijkheden door vooraf gedefinieerde antwoorden te geven.

  • Wordt gebruikt om de omgeving te vereenvoudigen, niet voor interactiecontrole. Spot:

  • Simuleert het gedrag van afhankelijkheden met verwachtingen over het gebruik.

  • Gericht op interactieverificatie, controleert of methoden zijn aangeroepen.

Servicevirtualisatie:

  • Een reeks mocks simuleert externe systemen voor integratietests.
  • Maakt onafhankelijke en gedetailleerde scenariotests mogelijk zonder echte externe services.

Waarom servicevirtualisatie

Servicevirtualisatie werkt door lichte, schaalbare en configureerbare simulaties van echte systemen te creëren. Deze virtuele diensten bootsen de interfaces van afhankelijke systemen na, waardoor interacties met die systemen kunnen worden gesimuleerd zonder dat de daadwerkelijke beschikbaarheid ervan nodig is. Dit proces omvat het vastleggen van verkeer tussen een toepassing en de echte services en vervolgens het configureren van de virtuele service om vergelijkbare antwoorden op verzoeken te geven. Dit maakt het mogelijk om verschillende scenario’s te testen, zelfs in complexe systemen, zonder de kosten en complexiteit van het beheer van de werkelijke afhankelijkheden.

Oproepfunctie

fetch('https://api.voorbeeldgemeente.nl/brp/persoonsgegevens?bsn=123456789', {
  method: 'GET',
  headers: {
    'Accept': 'application/json',
    'Authorization': 'Bearer uwTokenHier'  }})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Fout bij het ophalen van de gegevens:', error));});

Voorbeeld van een mock

const express = require('express');
const app = express();
const port = 3000;
app.use(express.json());

app.get('/brp/persoonsgegevens', (req, res) => {
    if (req.query.bsn === '123456789') {
        res.json({ "naam": "Jan Jansen", "bsn": "123456789" });
    } else {
        res.json({ "naam": "Jan de Vries", "bsn": "987654321" }); // Klein verschil in de response
    }
});
app.listen(port, () => {
    console.log(`Mock BRP server luistert op poort ${port}`);

De voordelen van servicevirtualisatie

Servicevirtualisatie onderscheidt zich door haar vermogen om realistische testomgevingen te creëren, wat cruciaal is voor het valideren van de integratie en prestaties van verschillende componenten in een software-ecosysteem. Dit zijn de belangrijkste voordelen:

  • Verhoogde testdekking: mogelijkheid om testscenario’s uit te voeren die moeilijk of onmogelijk zijn in een fysieke omgeving.
  • Risicovermindering: Vroegtijdige tests met gevirtualiseerde services helpen integratieproblemen sneller te identificeren, waardoor het risico op productiefouten wordt verkleind.
  • Parallelle ontwikkeling en testen: Simulatie van afhankelijke diensten maakt gelijktijdige ontwikkeling en testen mogelijk, waardoor de efficiëntie wordt verhoogd en de ontwikkelingstijd wordt verkort.
  • Kostenbesparingen: door alleen noodzakelijke services te virtualiseren, worden volledige testomgevingen overbodig, wat leidt tot kostenbesparingen.
  • Kwaliteitsverbetering: Vroegtijdige en uitgebreidere tests via servicevirtualisatie helpen om fouten sneller te identificeren en op te lossen, waardoor de softwarekwaliteit wordt verbeterd.

De keerzijde: uitdagingen van servicevirtualisatie

Ondanks de vele voordelen is servicevirtualisatie niet zonder nadelen, die van invloed kunnen zijn op de implementatie en effectiviteit:

  • Initiële kosten en tijd: voor het instellen van servicevirtualisatie is een initiële investering vereist.
  • Complexiteit: het nauwkeurig simuleren van al het externe systeemgedrag is complex en vereist in eerste instantie deskundige ontwikkelaars en testers
  • Risico op veroudering: virtuele services kunnen verouderd raken naarmate echte services evolueren.

Pact: een verzachtende kracht voor servicevirtualisatie

  • Vermindert de behoefte aan gedetailleerde simulaties.
  • Richt zich op essentiële interacties vanuit het perspectief van de consument.
  • Maakt integratietests lichter en beter onderhoudbaar.

Waarom PACT

Waarom kiezen voor Pact for Software Testing Pact is een tool die het testen van software eenvoudiger maakt en meer gericht is op wat de gebruiker nodig heeft. Dit is waarom het geweldig is voor ontwikkelaars en klanten, wat centraal staat als de consument:

  • Contracten definiëren: Pact maakt gebruik van contracten die de verwachte interacties tussen consumenten en aanbieders beschrijven. Deze contracten worden automatisch gegenereerd tijdens de testfase van de consument (de klant).
  • Contracten verifiëren: Wanneer de provider zijn deel van de software ontwikkelt of bijwerkt, controleert Pact of de provider nog steeds voldoet aan de verwachtingen van de consument zoals beschreven in het contract.
  • Feedbackloop: Als er verschillen zijn, geeft Pact onmiddellijke feedback, zodat ontwikkelaars problemen kunnen identificeren en oplossen voordat de code in productie wordt genomen.

PACT-overeenkomst tussen consument en aanbieder

app.get('/brp/persoonsgegevens', (req, res) => {
   if (req.query.bsn === '123456789') {
       res.json({ "naam": "Jan Jansen", "bsn": "123456789" });
 }})

Provider heeft een nieuwe en andere responsdefinitie

app.get('/brp/persoonsgegevens', (req, res) => {
if (req.query.bsn === '123456789')     // Let op: `oorspronkelijke contract.
  res.json({ "volledigeNaam": "Jan Jansen", "bsn": "123456789", "geboortedatum": "01-01-1980" });
}});
const { Pact } = require('@pact-foundation/pact')
const path = require('path')
 const provider = new Pact({
consumer: 'MijnApp',
provider: 'BRPService',
port: 1234,
log: path.resolve(process.cwd(), 'logs', 'pact.log'),
dir: path.resolve(process.cwd(), 'pacts'),
spec: 2,});
provider.addInteraction({
	uponReceiving: 'een verzoek voor persoonsgegevens met BSN 123456789',
	withRequest: {
		method: 'GET',
		path: '/brp/persoonsgegevens',
		query: 'bsn=123456789'},
willRespondWith: {
	status: 200,
	body: {
 		naam: 'Jan Jansen',
		bsn: '123456789}
}
});

Hoe Pact uw software betrouwbaarder maakt

Bij het bouwen van software is het superbelangrijk dat verschillende onderdelen goed samenwerken. Dat is waar Pact om de hoek komt kijken. Het is als een helper die ervoor zorgt dat alle onderdelen van uw software zonder problemen met elkaar kunnen praten. Dit is waarom Pact geweldig is voor iedereen die software maakt:

Vroegtijdig problemen vinden:

  • Problemen sneller opsporen: met Pact kunt u eventuele chatproblemen tussen verschillende delen van uw software in een vroeg stadium opsporen. Het is alsof je weet dat het gaat regenen voordat je het huis verlaat, zodat je een paraplu kunt pakken.

Meer vertrouwen op uw software

  • Alles soepel houden: Wanneer u een onderdeel van uw software wijzigt, controleert Pact of het de manier waarop het met andere onderdelen communiceert niet verpest. Dit is hetzelfde als ervoor zorgen dat een nieuw stukje in een puzzel nog steeds perfect past.

Betere software, sneller

  • Snelle en veilige updates: door Pact te gebruiken bij uw softwarecontroles (CI/CD-pijplijnen), is het alsof u een vangnet hebt. Het zorgt ervoor dat alle updates die u aanbrengt geen problemen veroorzaken, zodat u uw software-updates soepel en vol vertrouwen kunt delen.
  • Sneller naar de finish: Met Pact kunt u er zeker van zijn dat alle onderdelen van uw software goed met elkaar communiceren, wat betekent dat u updates of nieuwe versies sneller kunt maken zonder dat u zich zorgen hoeft te maken over kapotte dingen.

In eenvoudige bewoordingen

Pact is als de vriend die ervoor zorgt dat iedereen in de groep op één lijn zit. Het controleert of alle onderdelen van uw software goed samenwerken, zodat u wijzigingen kunt aanbrengen en dingen kunt verbeteren zonder problemen te veroorzaken. Dit betekent gelukkigere teams en betere software voor iedereen.

Voordelen van het gebruik van Pact

  • Vroegtijdige opsporing van problemen: Pact stelt teams in staat om problemen tussen diensten vroeg in de ontwikkelingscyclus te identificeren. Dit betekent dat er minder tijd wordt besteed aan het oplossen van bugs in latere stadia.
  • Meer vertrouwen: door ervoor te zorgen dat alle onderdelen van uw applicatie effectief kunnen communiceren, vergroot Pact het vertrouwen in de stabiliteit en betrouwbaarheid van uw systeem.
  • Vergemakkelijkt parallelle ontwikkeling:
  • Ontwikkelaars kunnen tegelijkertijd aan verschillende services werken zonder te wachten tot de andere onderdelen zijn voltooid, waardoor het ontwikkelingsproces wordt versneld.
  • Integratie met CI/CD:
  • Pact integreert naadloos in pijplijnen voor continue integratie/continue implementatie, waardoor het testen en verifiëren van contracten wordt geautomatiseerd
  • Verbeterde kwaliteit: door regelmatige en geautomatiseerde contracttests verbetert de algehele kwaliteit van de applicatie omdat integratieproblemen vroegtijdig worden ontdekt en opgelost.

Nadelen van het gebruik van Pact

  • Initiële leercurve: Teams hebben mogelijk tijd nodig om te leren hoe ze Pact effectief kunnen gebruiken en hoe ze dit kunnen integreren in hun ontwikkelingsworkflow.
  • Installatietijd: De initiële installatie en configuratie van Pact kan enige tijd duren, vooral in complexe systemen met veel onderling afhankelijke services.
  • Onderhoud van contracten: Contracten moeten up-to-date worden gehouden met wijzigingen in de service-interfaces, wat extra kosten kan betekenen voor ontwikkelingsprocessen.
  • Potentieel te veel vertrouwen: het risico bestaat dat u te veel afhankelijk bent van Pact-tests en dat andere vormen van testen, zoals tests van begin tot eind, worden verwaarloosd, wat kan leiden tot hiaten in de testdekking.
  • Integratieproblemen: In sommige gevallen kan de integratie van Pact in bestaande projecten of met bepaalde technologieën een uitdaging zijn en kan het nodig zijn om extra hulpmiddelen of tijdelijke oplossingen te gebruiken.

Samenvatting

Samengevat, hoewel Pact aanzienlijke voordelen biedt voor het testen en waarborgen van betrouwbare integraties in microservices-architecturen, moeten teams zich bewust zijn van de mogelijke uitdagingen en bereid zijn tijd te investeren in het leren en onderhouden van de tool.

Kortom, zowel servicevirtualisatie als Pact bieden overtuigende voordelen voor moderne softwareontwikkeling, met name in omgevingen waar microservices en complexe integraties veel voorkomen. Servicevirtualisatie stelt teams in staat om externe afhankelijkheden te simuleren en te testen zonder dat er daadwerkelijke services beschikbaar hoeven te zijn, wat de testdekking en efficiëntie aanzienlijk verhoogt. Het maakt het mogelijk om afzonderlijk te testen, waardoor de risico’s in verband met integratieproblemen worden verminderd en snellere, betrouwbaardere ontwikkelingscycli mogelijk worden gemaakt.

Pact biedt daarentegen een robuust kader voor consumentgestuurde contracttests, waarbij wordt gegarandeerd dat interacties tussen verschillende onderdelen van een systeem voldoen aan de overeengekomen verwachtingen. De vroege detectie van integratieproblemen, de naadloze integratie in CI/CD-pijplijnen en de nadruk op contracten tussen consumenten en leveranciers verbeteren de kwaliteit en betrouwbaarheid van software-implementaties. Door parallelle ontwikkeling mogelijk te maken en de feedbackloop voor het identificeren en verhelpen van bugs te verminderen, verhoogt Pact de productiviteit van het team en bevordert het een flexibeler ontwikkelingsproces.

Hoewel beide benaderingen gepaard gaan met de complexiteit van de initiële installatie en leercurve, wegen de voordelen op lange termijn, zoals kostenbesparingen, verbeterde softwarekwaliteit en snellere releasecycli, ruimschoots op tegen deze uitdagingen. De combinatie van servicevirtualisatie en Pact vormt een krachtige strategie om tot betrouwbaardere en efficiëntere softwareontwikkelings- en testprocessen te komen. Over het algemeen is de toepassing van deze methodologieën een positieve stap voor organisaties die willen innoveren en hoge kwaliteits- en betrouwbaarheidsnormen willen handhaven in hun softwareproducten.

by Ralph Van Der Horst

arrow right
back to blog

share this article

Relevant articles

Serverloze pactmakelaar in AWS ECS Fargate

Serverloze pactmakelaar in AWS ECS Fargate

Het integreren van JIRA met Cucumber en Serenity/JS voor verbeterd testbeheer

Het integreren van JIRA met Cucumber en Serenity/JS voor verbeterd testbeheer

JIRA integreren met Cucumber en Serenity/JS voor verbeterd testbeheer

JIRA integreren met Cucumber en Serenity/JS voor verbeterd testbeheer