Operation Loop en Parameter Populatie
Met een gekozen operation id wordt de focus de loop-logica waar de test het aantal feature services queries zal opzoeken die de transactie vormen. Vanaf daar zal het een derde set JSR223 Samplers gebruiken om de request parameters te vullen die geassocieerd zijn met de eerder geselecteerde operation id bij elke iteratie in de loop.
- Er is één JSR223 Sampler voor elke kaart schaal die de geassocieerde JMeter variabelen vult op basis van de operation id en iteratiewaarde
- Deze items worden dan key/value paren die opgepikt worden door de HTTP Request
- De iteratiewaarden worden bijgehouden door een Counter Config Element
- Deze JSR223 Samplers hoeven niet bewerkt te worden om de test uit te voeren
- Elke Loop Controller, Counter, JSR223 Sampler en HTTP Request objecten zijn allemaal geplaatst binnen een corresponderende Transaction Controller om de items logisch te scheiden voor elke kaart schaal

HTTP Request
In wezen bestaat alle bovenstaande testlogica alleen voor dit onderdeel van de test. Hier kan het JMeter HTTP Request object de JMeter variabelen lezen voor specifieke key/value parameters die zijn gevuld door de JSR223 Sampler direct ervoor.
Aangezien deze aanpak zeer programmatisch is, is er slechts één HTTP Request per kaart schaal! Zo'n ontwerp bevordert onderhoudbaarheid.

Opmerking: Deze testaanpak zou ook werken voor traditionele, niet-gehoste feature layer services. Echter, deze feature services hebben niet dezelfde request parameter optimalisaties als hosted services zoals maxAllowableOffset en quantizationParameters. Deze opties zouden gewoon verwijderd moeten worden uit de HTTP Request.
De Thread Group Configuratie
Het JMeter Test Plan is momenteel geconfigureerd voor een relatief korte test van 10 minuten. Over het algemeen presteren hosted feature services goed, dus er zal veel throughput plaatsvinden binnen elke stap (1 minuut per stap) evenals van de test in het geheel.
- Verschillende omgevingen en data kunnen een alternatieve instelling vereisen om de gewenste testresultaten te bereiken, pas aan indien nodig

Validatie van het Test Plan
Als beste praktijk is het altijd een goed idee om de terugkomende resultaten te valideren voordat je de daadwerkelijke load test uitvoert.
- Gebruik de View Results Tree listener om te helpen bij de validatie
- Het Test Plan bevat een View Results Tree Listener maar deze is standaard uitgeschakeld
- Zet hem aan om de resultaten te bekijken
- Start vanuit de GUI de test
Transacties
- Selecteer één van de "HFS" Transacties
- De resultaten zouden er als volgt uit moeten zien:

- In dit voorbeeld zijn de bovengenoemde transacties: HFS (mapscale: 72224), HFS (mapscale: 36112), en HFS (mapscale: 144448) allemaal succesvol afgerond
- Het Sampler resultaat geeft wat meer details weer
- Hoewel elke Transactie één HTTP request per feature query extent stuurde, telt de JMeter test de Sampler als onderdeel van de operatie
- De JSR223 Samplers voegen zeer weinig overhead toe aan de Transactie hoewel ze wel het aantal samples verdubbelen, dit is slechts een detail om bewust van te zijn
- Kijk snel naar de Size in bytes
- In dit voorbeeld was de Transactie Grootte bijna 65KB wat suggereert dat er data werd teruggegeven en dat de responses niet "leeg" waren
Requests
- Vouw één van de "HFS" Transacties uit
- Selecteer één van de https requests
- De resultaten zouden er als volgt uit moeten zien:

- In dit voorbeeld is het select request succesvol afgerond
- Kijk snel naar de Size in bytes
- In dit voorbeeld was de Request Grootte ongeveer 5KB wat suggereert dat er data werd teruggegeven en dat de responses niet "leeg" waren (bijv. 1500 bytes)
- De ContentType is ook belangrijk
- Volgens de parameters in het Test Plan is het gevraagde formaat pbf wat application/x-protobuf teruggeeft
- Het aanvragen van protocol buffers is een best practice omdat het payload optimaliseert
- Het resulterende formaat is binair en kan niet gemakkelijk bekeken worden zonder extra hulp die niet behandeld wordt in dit artikel
Opmerking: Feature services (inclusief hosted feature services) worden gerenderd op de client (niet op de server zoals export map). Hoewel Apache JMeter een (test) client is, rendert het niet server responses via JavaScript zoals een webbrowser.
Testuitvoering
De load test moet op dezelfde manier uitgevoerd worden als een typisch JMeter Test Plan.
Zie het runMe.bat script inbegrepen bij het roads_hfs1.zip project voor een voorbeeld hoe je een test uitvoert zoals aanbevolen door het Apache JMeter team.
- Het runMe.bat script bevat een jmeterbin variabele die ingesteld moet worden op de juiste waarde voor jouw omgeving
Opmerking: Het wordt altijd aanbevolen om het starttijdstip en duur van de load test af te stemmen met het juiste personeel. Dit zorgt voor minimale impact op gebruikers en andere collega's die mogelijk ook gebruik moeten maken van de ArcGIS Enterprise Site. Daarnaast helpt dit voorkomen dat systeemruis van andere activiteiten en gebruik "vervuiling" veroorzaakt in de testresultaten.
JMeter Rapport
Throughput Curves
- Het automatisch gegenereerde JMeter Rapport kan inzicht geven in de throughput van de HFS transacties onder load
- Niet-HFS Transacties zijn handmatig eruit gefilterd
- In dit geval was de piekdoorvoer voor HFS operaties ongeveer 16,5 transacties/seconde
- Aangezien er 3 HFS transacties waren, komt dit neer op bijna 50 transacties/seconde (of 178.200 transacties/uur)

Opmerking: Elk van de HFS Transacties zal natuurlijk een vergelijkbare throughput hebben aangezien hun respectievelijke uitvoering in de test hetzelfde gewogen was.
Performance Curves
- Het automatisch gegenereerde JMeter Rapport kan inzicht geven in de performance van HFS transacties onder load
- Niet-HFS Transacties zijn handmatig eruit gefilterd
in dit geval waren HFS-transacties voor alle schalen sub-seconde (minder dan 1 seconde)- Zelfs tegen het einde van de test, onder de zwaarste belasting, was de gemiddelde reactietijd minder dan 225 ms of 0,225 seconden

Laatste gedachten
Er zijn andere manieren om een hosted feature layer service queries te testen, zoals via vastgelegde verkeer van een webbrowser tijdens interactie met het eindpunt of de applicatie. Dit zou een lijst van de service-URL's opleveren die vertaald kunnen worden naar een test. Echter, een programmatische benadering zoals die in dit artikel wordt beschreven, biedt een strategie om een groot ruimtelijk gebied van de service te testen dat veel meer extents beslaat dan praktisch mogelijk is met de vastgelegde verkeer-benadering.
De programmatische benadering is ook gemakkelijker te onderhouden omdat de omvang van het Test Plan veel kleiner is. Om dit in perspectief te plaatsen: de JMeter-test in dit artikel bevatte slechts 3 HTTP-verzoeken (één voor elke kaart schaal).
Apache JMeter uitgebracht onder de Apache License 2.0. Apache, Apache JMeter, JMeter, de Apache veer en het Apache JMeter-logo zijn handelsmerken van de Apache Software Foundation.