Vi använder cookies för att göra din upplevelse bättre! Genom att besöka vår webb accepterar du att vi kan placera cookies på din enhet. Läs mer
Din sökning innehåller för få tecken

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.

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: 

* JUnit-extension för Java: https://github.com/Zington/ParallelJUnit 

* MsTest-extension för C#/.NET: https://dev.azure.com/zington/ParallelMsTest 

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.

* Application Performance Monitoring)

** Att hinna alla batch-körningar på en natt, under pågående last och backuptagning

 

Om författaren

Jörgen Damberg är en av Sveriges absolut mest erfarna experter inom testautomatisering. Han är även van att lära ut och förmedla sina insikter, som ofta kryddas upp med relevanta anekdoter som förklaring, hämtat ur hans gedigna testautomatiseringserfarenhet från mer än 20 olika organisationer. Jörgen brinner för effektiv kvalitetssäkring och klok automation.