Prestandatesta REST (Json/XML) tjänster för mobila backend med hjälp av Android SDK

Ett uppdrag som föll på mitt bord vara att prestandatesta ett mobilt backend system som bygger på ett REST (Json/XML) API. Tjänsterna exponeras publikt för mobila kunder och då förväntas stora transaktionsvolymerna är och kraven på skalbarhet, stabilitet och svarstider är omfattande.

Till en början fans ett arv från prestandatester att tillgå och dessa hade sitt ursprung i manuellt skapade tjänsteanrop baserat på API-dokumentationen. De verktyg som användes för att generera anropen var Firefox med tillhörande RESTclient add-on. Den här add-on är egentligen en RESTful debugger men fungerar utmärkt att använda för att skapa tjänsteanrop med olika förutsättningar och läsning av svar och då direkt i Firefox.
Förutsättningarna är här att man har tillgång till dokument som beskriver hur API anropas och vilka metoder som returneras och hur. En stor nackdel är att man inte i detta läge vet hur och när den slutgiltiga kundapplikationen anropar REST-tjänsterna utan en sekvens med anrop blir en smula syntetiskt, vilket både kan vara en fördel men också en nackdel iom missade anrop som ger en over-head och kanske ökad last på systemet.

Efter lite efterforskning och tips från min kollega på Prolore AB så började jag titta närmare på Android SDK vilket är ett utvecklarhjälpmedel. Verktyget används oftast lokalt på en dator men som kan konfigureras för att fungera i en större testmiljö. Verktyget kan hantera olika versioner API samt att man kan installera Android appar, ett sk Android application package file (APK).

Efter samtal med utvecklare så beslutades att en specialutgåva av ett APK skulle tas fram. I detta APK skulle man kunna välja vilka servrar som skulle anropas från applikationen. Till att börja med installeras Android SDK och sedan uppdaters de API-versioner som skall användas. I en tillhörande manager skapas och konfigureras sedan en Androidemulator som skall användas för att installera APK och därmed köra appen. Installation av APK och även konfiguration vissa operativfiler i Emulator görs med kommandon.

För att kunna prestandatesta RESTful måste man kunna sniffa av tjänsteanropen och vilken metod som används. Det kan vara GET, POST, PUT eller DELETE –metod för tjänsterna. Likaså måste man kunna fånga upp svaren från ett eller fler anrop, vilket kräver att testverktyget har någon form av ramverk som kan hantera dynamiskt data eller sk parametrar. I mitt fall använde jag ett välkänt prestandatestverktyg från HP där det finns ett fördefinierat ramverk för Mobila Protokoll, vilket passade utmärkt i detta fall. Testverktyget kan hantera trafik som spelats in med pcap (packet capture) till fil eller sniffa av trafiken direkt likt en proxy sniffer. Sedan genereras ett testskript med möjlighet att läsa inspelad trafik i form av programerbara funktionsanrop. I testskript kan man skapa parametrar för olika ändamål och ”debugga” innan man slutligen spelar upp testskript för att då generera flera anrop över olika sessioner mot backend.

Testerna utfördes sedan med gott resultat och då beslutade jag att skapa ett ramverk för hur denna ”verktygslåda” av program skulle användas. Integrationen gick mycket smärtfritt och flera personer i organisationen kunde använda verktygslådan efter en kort genomgång.

Det som jag vill uppmärksamma är att vi gick från syntetiska anropssekvenser till att använda en fullvärdig applikation för att skapa testflöden av tjänsteanrop. Det bör tilläggas att vi kombinerar direkta API anrop skapade med Firefox RESTClient och de som genereras via Android SDK via APK.
Att dessutom dessa två verktyg är gratis och kan användas för att med lätthet skapa testflöden i dyra prestandatestverktyg gör inte saken sämre.