Integrationstestning

Integrationstestning syftar till att säkerställa korrekt kommunikation och samverkan mellan olika systemkomponenter och angränsande system. Genom att använda tekniker som simulering och automation kan testare effektivt kvalitetssäkra integrationer, särskilt när det gäller API-kommunikation och kontraktstestning.

Integrationstestning tillhör mittenlagret av testpyramiden, där testningen fokuserar på de delar av systemet där komponenter eller angränsande system kommunicerar med varandra. Denna kommunikation kan ske genom olika typer av meddelandetjänster, protokoll, informationsströmmar, m.m. som utgör integrationen mellan system.

Vad är integrationstestning?

Integrationstestning används för att kvalitetssäkra de integrationer som finns i ett system samt till angränsande system. Integrationstestning är en form av Black Box-testning, vilket betyder att koden som systemet uppbyggt av är okänd för testaren och endast de gränsytor systemet exponerar utåt kan användas för testning. Målet med integrationstestning är att se till att två system, eller komponenter av system, använder varandras gränsytor på rätt sätt och kan kommunicera med varandra.

Exempelvis kan en integration mellan två komponenter inom ett system bestå i att en komponent ansvarar för ett webbgränssnitt för att sälja produkter och en annan tjänst hanterar uppgifter om lagersaldo. Integrationstestning i detta exempel kan försöka säkerställa att den förstnämnda komponenten ställer korrekt formulerade frågor till lagertjänsten, och att svaren som erhålls tolkas på rätt sätt. Kort sagt, att komponenterna kan utbyta information mellan varandra.

Inom spannet för integrationstestning så kan man utföra tester som mer liknar system-test men också tester som ligger närmare enhetstesterna. På en högre nivå i testpyramiden kan flera komponenter och system kopplas ihop för att testa många integrationer tillsammans. I andra situationer passar det bättre bara testa en komponent i en isolerad miljö där integrationerna från kringliggande system simuleras. I de flesta fall är en blandning ett bra alternativ, där majoriteten av testningen sker på nivån som är närmare enhetstester och kompletterande testning kan fokusera på att testa stora flöden som involverar många integrationer.

Simulering och automation

Simulering och automation kan ge testaren mer kontroll, eftersom det är lättare att simulera att en integrerande komponent beter sig konstigt, än vad det är att få en komponent som är designad att fungera att bete sig på ett konstigt sätt. Det vill säga, simuleringen öppnar upp möjligheten att genomföra negativa testfall och kvalitetssäkra felhantering i större utsträckning.

Simulering och automation kan också vara användbart för att bygga bort testningens beroenden till de delar systemet eller komponenten under test integrerar mot. På så vis behöver inte testningen inom ett utvecklingsteam vänta på att ett annat team ska färdigställa den andra parten i en viss integration, eftersom dess beteende istället är simulerat i testmiljön.

För att möjliggöra simulering krävs testverktyg som har möjlighet att kommunicera med tjänsterna på det gränssnitt integrationen är implementerad över. Det kan antingen vara ett kommersiellt verktyg eller något som testaren implementerar i lämpligt programmeringsspråk.

I många testverktyg finns stöd för att skapa och använda s.k. testdubbletter (såsom mockar, stubbar och spioner). Dessa kan användas i ett testfall för att ersätta en komponent, metod eller klass med en fejkad dubblett, vilken har ett specifikt önskat beteende (t.ex., att alltid generera ett felmeddelande) eller har förmågan att “komma ihåg” hur den använts i testfallet, för att man på så sätt ska kunna verifiera att användningen skett korrekt.

 

Vanliga frågor om integrationstestning

Vilka risker och utmaningar finns med automatiserad API-testning?2023-10-11T13:48:22+02:00

Som vid annan testautomation är en hänger mycket på att det förväntade beteendet är väldefinierat. Har man ett API som är dåligt dokumenterat och har otydliga eller svårbegripliga operationer som dessutom förändras över tid så blir det genast stökigare att testa detta. Då kan det vara värt att höja blicken och ta inspiration från andra källor. För t.ex. webbaserade API:er finns det väletablerade standarder som man kan förhålla sig till och som kan ge en tydligare bild av hur ett väldesignat API bör se ut.

En annan vanlig utmaning är att automation tas fram och införs men därefter inte underhålls i den mån som behövs, t.ex. i samband med att funktionalitet tillkommer eller förändras.

Hur kommer man i gång med integrationstestning?2023-10-11T13:46:35+02:00

För att komma i gång med integrationstestning är det bra att börja med att
kartlägga de integrationer som finns i system. Nästa steg blir sedan att
identifiera de integrationer som är mest kritiska för systemets funktionalitet,
sedan kan man börja titta på att ta fram testfall för de som är mest kritiska.

När det är etablerat var testfokuset ska ligga så går det att inleda
planeringsarbetet för att vilka testfall som ska tas fram, vilka som borde
automatiseras och finnas med i regressiontestningen, samt vilken nivå
olika integrationstestfall borde ligga på.

(Eller så tar man den enkla vägen och hör av sig till oss på Lemontree!)

API-testning

I många applikationer sker integration via API:er (t.ex. över HTTP) och ofta då med kollaboratörer som inte är kända på förhand. Allt fler myndigheter och organisationer erbjuder öppna API:er för att publicera sin data och även slutna produkter kan erbjuda API:er för att integrera mot andra produkter på marknaden. API-testning syftar till att troliggöra att systemet både kan göra det som utlovas av API:et men också att t.ex. det data som exponeras faktiskt är användbart för den som använder API:et.

Testningen utförs vanligen med hjälp av något slags verktyg, vilket kan vara automatiserat. Beroende på syftet med testningen kan det röra sig om enskilda API-anrop som testas i isolation, eller längre sekvenser med anrop som utgör eller blir en del av ett mer övergripande end-to-end-test.

En speciell teknik inom API-testning är kontraktstestning, där ett slags maskinläsligt kontrakt upprättas mellan tillhandahållaren av API:et å ena sidan och konsumenten av API:et å andra sidan. Typiskt innehåller kontraktet flera exempel på olika anrop med tillhörande svar och tanken är att tillhandahållaren då t.ex. inför en ny release kan verifiera att API:et fortfarande beter sig enligt kontraktet. Konsumenterna kan också använda kontraktet från sitt håll för att se att det anropande systemet faktiskt utför anropen enligt kontrakten och att svaren enligt exemplen tolkas korrekt.

Testautomatiseringsexpert

Hampus Hammersberg

Hampus har jobbat med test och TestOps i sex år och brinner för effektiv testning och smarta lösningar som platsar i en modern utvecklingsprocess.

Kontakta oss för konsultation eller frågor rörande Test och QA

Har du frågor eller behöver hjälp med dina projekt inom test och QA? Tveka inte att höra av dig till oss. Fyll i formuläret så återkommer vi till dig inom kort. Vi finns här för att hjälpa dig att ta nästa steg i din digitala utveckling.