Sparebank 1 deler sitt eget mock-verktøy, Troxy

"Det er ikke alltid jeg mocker, men når jeg gjør det, bruker jeg Troxy" forteller Robert Hammarstrøm.

Robert Hammarstrøm jobber mye med testing av Sparebank 1 sine systemer, blant annet i deres egetutvikla verktøy Troxy. 📸: Privat
Robert Hammarstrøm jobber mye med testing av Sparebank 1 sine systemer, blant annet i deres egetutvikla verktøy Troxy. 📸: Privat Vis mer

I SpareBank 1 Utvikling har vi lang erfaring med å teste hvordan våre applikasjoner oppfører seg under last, altså når mange samtidige brukere benytter en applikasjon.

Dette skjer som oftest under en test som kalles ytelsestest, loadtest, performancetest, lasttest, ja dere skjønner greia.

Når man kjører en av disse testene, er det ikke alltid greit å også belaste alle bakomliggende systemer. Dette gjelder spesielt når man integrerer mot underleverandører.

Så hva gjør man da? Jo, da får man simulere kallene mot de eksterne systemene med hjelp av et simulerings- eller mockverktøy.

«Om vi går tilbake 15 år i tid var det ikke mange verktøy å velge mellom.»

Om vi går tilbake 15 år i tid var det ikke mange verktøy å velge mellom. Valget ble da å utvikle et eget verktøy, som fikk navnet Troxy. Troxy ble spesialdesignet for å brukes som en simulator av eksterne systemer og måtte ha høy kapasitet for å kunne svare på forespørsler fra flere applikasjoner samtidig under lasttest.

Troxy kan konfigureres for å settes opp mellom en klient og en webservice. Der fungerer Troxy som en proxy og kan lytte på trafikken og ta opp HTTP-request og HTTP-response. Disse opptakene kan deretter brukes til å svare istedenfor den faktiske tjenesten når applikasjonen sender forespørsler til andre systemer.

Troxy
Troxy Vis mer

En av hovedstyrkene til Troxy er at man i tillegg kan trekke ut verdier fra en request og deretter bruke de i responsen som sendes tilbake. Dette er spesielt nyttig om man vil bruke den samme mocken for flere forskjellige testbrukere og der, som et eksempel, fødselsnummer er en verdi som sendes med i request og som i tillegg er med i response. Dette gir noe dynamikk i en ellers statisk oppførsel.

Troxy kan i tillegg enkelt utvides med små Java-klasser der man har full kontroll over request og response, både under opptak og avspilling. Dette gjør at man for eksempel automatisk kan formatere opptak til å tilpasses sine formål, uten manuell redigering i etterkant.

All funksjonalitet kan skriptes via et API mot Troxy, men trenger man manuelt å endre ting kan dette gjøres via et fullverdig UI. Her finner vi blant annet funksjonalitet for å endre modus på Troxy (avspilling, opptak og så videre), håndtere og redigere mocker, samt sjekke loggstatistikk for antall kall mot forskjellige endepunkter.

Troxy
Troxy Vis mer

Troxy har med årene blitt et fullverdig mockverktøy og SpareBank 1 Utvikling bruker det nå, i tillegg som simulator ved lasttester, innen både funksjonell test, automatisert regresjons- og integrasjonstest og som simulering av backend-systemer i vår Utviklerportal for åpne APIer.

Som et konkret eksempel kan det nevnes et testoppsett der det er mulig å konvertere automatiserte ende-til-ende tester til å kjøre mocket, helt uten manuell jobb involvert. Oppsettet tar i utgangspunkt i tester som kjører mot et docker-isert testmiljø inneholdende applikasjon under test sammen med Troxy.

Troxy
Troxy Vis mer

Testen kjøres først ende-til-ende med Troxy i opptaksmodus. Deretter kan den samme testen kjøres med Troxy i avspillingsmodus, fullstendig mocket, uten at applikasjonen sender kall bakover mot andre tjenester. Mockene blir lagret sammen med testen og øvrig kildekode.

Da Troxy er et testverktøy som kan brukes av andre enn bare SpareBank 1 Utvikling, hvorfor ikke dele det som åpen kildekode? Som sagt så gjort, i 2019 ble det tatt en beslutning om å legge ut det kjære mockverktøyet vårt som open source. For å få det til måtte vi rydde litt i kildekoden, og dette ble gjort gjennom et godt samarbeid med våre utviklere på deres fagdag.

Så trenger du et fleksibelt og utvidbart mockverktøy som i tillegg tåler høy last og kan brukes i mange ulike type testscenarier? Kanskje trenger du et godt alternativ til mer etablerte mockverktøy som for eksempel Wiremock? Eller kanskje trenger du inspirasjon for å lage noe eget? Test ut Troxy da vel!