BananPAJ

Konsumentdrivna kontraktstester

2023-01-23

Just nu håller vi på att utvärdera kontraktstester och framförallt verktyget Pact

Observera att vi är i en utvärderingsfas så det här är mina tankar hittills. Jag får återvända och skriva en uppföljning när vi kommit längre i vårat arbete.

Vad är kontraktstester?

Kontraktstester är en automatisk verifiering av att två system som kommunicerar med varandra kan prata med varandra. Att systemet som frågar efter data (konsumenten) och den som tillhandahåller informationen (producenten) använder samma struktur i frågan och svaret.

När jag pratar om kontraktstester avser jag konsumentdrivna kontraktstester. Kontrakt som drivs och underhålls av konsumenten. Varför vill man göra så? För att då blir kontraktet skrivet utifrån hur konsumenten ser på API:et och hur det används. Skulle producenten skriva och underhålla kontraktet landar det ofta i gissningar om hur konsumenten vill använda API:et.

Vad är fördelarna med kontraktstester?

I ett distribuerat system med många rörliga delar är det viktigt att ingen ändrar hur ett API ser ut eller används utan att det kommuniceras mellan teamen. Med kontraktstester kan du få en hård kontroll som gör att vi kan hindra brytande förändringar från att uppstå. Det tar inte bort behovet av kommunikation, det snarare synliggör problemet.

Kontraktstester kan även hjälpa oss att kontinuerligt ha en driftsättningsbar main i vårat kodrepo. Utan att behöva ett stort maskineri som spinner upp massor av tjänster för att verifiera komunikationen.

Hur börjar man?

Vi håller på att testa uppsättning av pact och pact broker. I våra konsumerande tjänster skriver vi tester som visar vilken struktur vi förväntar oss när vi använder ett API. Från testet genereras ett kontrakt som publiceras till pact brokern.

Brokerns uppgift är att hålla koll på vilka kontrakt som finns, vart dom är driftsatt och vilka versioner av kontrakten som är verifierade av producenten.

I pacts egna dokumentation finns det bra information om hur dom tycker att man ska sätta upp sina pipelines för att få ut mest av verktyget.

Om det här kommer att hjälpa oss får framtiden utvisa. Men jag är hoppfull och tror att vi kommer kunna stoppa en del dumma fel innan dom mergats till main.