Pensum: een oplossing voor het automatiseren van loadtests
Een loadtest verschaft veel inzicht in de prestaties en verbeterpunten van je website. Maar het opstellen van testscenario’s is tijdrovend en biedt lang niet altijd garantie op representativiteit. Daarom gingen we op zoek naar een manier om loadtests (semi)automatisch op te stellen. Het resultaat is Pensum, een tool die loadtestscenario’s opstelt aan de hand van historische data. Hiermee zie je snel of de website een realistische gebruikersload aankan.
Loadtesten
Een loadtest is dé oplossing om te testen of een website voldoet aan de vereiste gebruiksbelasting. Je script verschillende scenario’s waarin je websitegebruikers nabootst en voert die daarna met het gewenste aantal virtuele gebruikers uit op de website. Zo kom je erachter hoe de website presteert onder de gebruikersload. Het is hierbij van belang dat de scenario’s realistisch zijn: welke pagina’s worden bezocht en wat zijn de bedenktijden van gebruikers op de pagina’s?
Hieronder zie je een schematische visualisatie van een clients die load toevoegen aan jouw webserver. Ze browsen over je website and sturen requests naar je webserver.
Scenario's
Bezoekers van je website bekijken verschillende pagina’s in verschillende volgordes. De requests naar deze pagina’s zorgen voor een bepaalde serverbelasting. Daarom is van belang om te weten welke gebruikerspaden ofwel scenario’s je website heeft en hoe vaak ieder pad wordt bewandeld. Deze scenario’s kun je samenstellen met behulp van historische data van je website. Tijdens de loadtest voer je vervolgens de scenario’s uit om de verschillende gebruikers te simuleren.
Bedenktijden
Iemand leest een tekst op je website of vult een formulier in: dit noemen we de bedenktijd van de gebruiker. Door die tijd te gebruiken in de loadtests worden er realistische constant requests gestuurd naar de server voor het ophalen van de bezochte pagina’s. De bedenktijd van verschillende gebruikers beïnvloedt het aantal requests per seconde en is daarom onmisbaar voor een realistische loadtest.
Tooling
Bij Aviva Solutions maken we voor loadtests gebruik van k6. Dit is een opensource-oplossing waarmee je loadtests doet op basis van JavaScript en heel flexibel zelf scripts schrijft. K6 gebruikt zogenaamde "virtuele gebruikers" die het gedrag op jouw website simuleren. De onderstaande code snippet toont een voorbeeld van een K6 load test dat een request stuurt naar onze website.
import http from 'k6/http';
import check from 'k6';
export default function () {
let response = http.get('https://avivasolutions.nl');
check(response, {
'status is 200': (r) => r.status === 200,
});
}
Nadat het script is geschreven, voert k6 het uit en worden de resultaten opgeslagen in een InfluxDB database. Tot slot kun je met Grafana de resultaten visualiseren voor een overzichtelijk testrapport.
Over de oplossing
We wilden een oplossing maken voor het (semi)geautomatiseerd opstellen van loadtestscenario’s aan de hand van historische data voor onze commerce oplossing. Het voordeel hiervan is dat je niet zelf hoeft te gissen naar gebruikersscenario’s. Voorheen deden we dit door het analyseren en maken van berekeningen op basis van klantdata uit Google Analytics data en vervolgens het handmatig scripten van de load test. Dat kostte veel tijd en gaf niet altijd de zekerheid dat de scenario’s realistisch genoeg zijn. Pensum lost dit probleem op (lees ook: Test automatisch je performance met Pensum). Met JavaScript worden scenario’s opgesteld aan de hand van historische data uit Google Analytics. Deze scenario’s worden vervolgens uitgevoerd met k6.
Genereren van de loadtest
Om de scenario’s te genereren haalt Pensum eerst data op uit Google Analytics met behulp van de Reporting API. Vervolgens worden inconsistente data verbeterd en de scenario’s samengesteld. Dit kan met verschillende geïmplementeerde methodes. Het resultaat is een JSON-bestand met daarin de scenario’s, het aantal keer dat de scenario’s voorkomen en de bedenktijden.
In de onderstaande afbeelding staat een voorbeeld van de gecreëerde scenario's en de mogelijkheden.
Uitvoering van de loadtest
Na het genereren van de scenario’s voert k6 ze uit met een statemachine en als parameter het gegenereerde JSON-bestand. Dit gebeurt aan de hand van een opgegeven aantal virtuele gebruikers die tegelijkertijd het script uitvoeren. Voor iedere virtuele gebruiker wordt aan de hand van percentages een scenario gekozen. Tijdens het uitvoeren van het scenario worden de verschillende pagina’s bezocht met bedenktijd.
Na de uitvoering zie je de resultaten in het dashboard van Grafana, zoals in onderstaande screenshot, waaruit je eenvoudig conclusies kunt trekken over de performance van de website. Ook is het handig om vergelijkingen te maken met resultaten uit eerdere loadtests om te zien of de performance is veranderd.
Ben je benieuwd naar de technische achtergrond van deze oplossing? Wil je Pensum zelf een keer proberen? Check dan onze Github projectpagina voor de details of neem contact met ons op!
Lees ook:
- Test automatisch je performance met Pensum
- 8 vooroordelen over testen ontkracht
- 8 manieren om software te testen
- performance
- testing
- pensum
Na zijn onderzoek naar het genereren en uitvoeren van loadtests aan de hand van historische data is Arjan onderdeel geweest van het opzetten van Pensum. Een manier om automatische load tests te genereren. Daarnaast werkt hij als back-end developer met certificering voor o.a. Kentico.