Hoppa till innehåll
Test

Prestandatest i CI/CD-flödet: Shifting left inom prestandatestning

I varje DevOps-ambition blir det snabbt tydligt att det är nödvändigt att tänka helt nytt kring prestandatester - speciellt när systemen läggs ut i molnet, där dålig prestanda snabbt blir väldigt dyrbart. Denna artikel föreslår ett sätt att få in prestandatester i sin befintliga CI/CD-pipeline.

Två män och en kvinna sitter vid ett bord med en bärbar dator.

En utmaning som många har när CI/CD introducerats är hur prestandatester förflyttas in i det kontinuerliga flödet. Det blir snabbt tydligt varför storskaliga prestandatester är ett skillset som tar många år att bli bra på. Ett sätt att komma runt detta är att komplettera med APM-verktyg*, men de är reaktiva och fungerar dessutom bäst i infrastrukturer som stöder A/B-testning och liknande - vilket ganska få systemarkitekturer idag stöder. 

Vad kan då testas smidigt redan i utvecklingsflödet? Testmiljöer kopplade till CI-servrar är oftast inte ens nära att vara bestyckade och konfigurerade som i produktion (även för många som gått all-in på IaC, Infrastruktur som kod), så ibland hör jag argument för att det är omöjligt att göra prestandatester i CI/CD-flödet. Det är visserligen ofta omöjligt att i dessa fullödigt testa för infrastrukturella kapacitetsbegränsningar eftersom CI/CD-miljöerna innehåller minimala datavolymer osv. CI-testerna förväntas även gå fort, så det är inte någon idé att försöka utföra klassiska prestandatester, som test av produktionsplaneringsaktiviteter**, stresstester och långtidstester, för att finna resursläckage och liknande. En prestandasäkringsåtgärd som ändå är möjligt att göra i CI/CD-flödet är att försöka säkra att koden kan prestera som tänkt. Då är i alla fall en prestandarisk borta. 

Utvecklarna kan använda analysverktyg i sin IDE (Integrated Development Environment, deras personliga utvecklingsverktyg) för att identifiera flaskhalsar och prestandaproblem. Men ofta slarvas det med detta och det skapas sällan några regressionstester. Dessutom sker det bara i samband med själva utvecklingsprocessen. Att i prestandatester på CI/CD-servrar mäta resursnyttjandet på serversidan ger ganska lite information. Men det går att utföra vissa typer av tester, som exempelvis: 

  • Samtidighetstester.
  • Svarstider på systemets endpoints (under låg last) för att säkra parallellitet. 

Denna typ av tester kräver tyvärr en del kodande för att få till eftersom de kräver trådhantering och ihopsamling av testresultat. Många system är tröga vid allra första exekveringen (färdigkompilering av kod, populering av cachar, upprättande av interna trådpools-sessioner och liknande), vilket påverkar svarstider. Det gör att skapandet av denna typ av tester ofta blir bortprioriterade. Ibland behövs bara en liten knuff över en låg tröskel. 

För att underlätta för utvecklare att ta med enklare prestandatester i sina enhetstester har vi därför tagit fram dessa två små enkla bibliotek: 

Dessa hjälpmedel avser göra det enkelt att exekvera ett vanligt enhetstest i parallella trådar, och över tid, samtidigt som exekveringstiden verifieras. De samlar dessutom ihop resultatet från alla exekveringstrådar och rapporterar till ett aggregerat testresultat. Det ÄR inte fullskaliga prestandatester, men det är en hjälp på traven för att få in enkla prestandatester i ett CI/CD-flöde - utan att behöva lära sig nya verktyg. 

Happy testing!

Se vårt erbjudande

* Application Performance Monitoring.
** Att hinna alla batch-körningar på en natt, under pågående last och backuptagnin.

Vill du veta mer om hur vi kan hjälpa dig inom test? Hör av dig!

Carin Norling

Carin Norling

Affärsansvarig Test & Kvalitet
Anders Eng

Anders Eng

Affärsansvarig Test & Kvalitet

Relaterat innehåll