Vereiste
Deze tutorial bevat strategieën en procedures voor het maken en uitvoeren van een dynamische loadtest tegen een ArcGIS Server-service en gaat ervan uit dat u bekend bent met enkele basisprincipes van Apache JMeter. Als u nieuw bent met Apache JMeter, zie dan onze Performance Testing with Apache JMeter (An Introduction).

JMeter Teststrategieën
Voordat we ingaan op de details over het opbouwen en valideren van een data-gedreven loadtest, is het belangrijk eerst een paar teststrategieën specifiek voor JMeter te bespreken. Deze tips verschillen van de items die worden vermeld in ons Recommended Strategies for Load Testing an ArcGIS Server Deployment artikel dat bedoeld is voor gebruik met elk testtool (maar ook toepasbaar op JMeter).
Een Goed Testplan Begint met een Juiste Mappenstructuur
Een tactiek die kan helpen bij het beheren van meerdere tests en meerdere rapporten in JMeter is het implementeren van een eenvoudige maar consistente mappenstructuur voor het opslaan van de verschillende elementen van elke test. De primaire aansturing voor een JMeter-test is het JMX-bestand… hier bevindt zich alle testlogica. Maar naarmate u functies aan uw test blijft toevoegen en deze meerdere keren uitvoert, zult u verder gaan dan alleen het beheer van het enkele JMX-bestand.
Een beetje organisatie helpt enorm… handmatig een paar belangrijke mappen aanmaken kan helpen bij het beheren van de verschillende JMeter-bestanden die in de loop der tijd op de harde schijf komen te staan.
Opmerking: Deze aanpak wordt gedaan vanuit het bestandssysteem van het besturingssysteem en niet direct vanuit Apache JMeter.
Een aanbevolen mappenstructuur:
- naam_van_project (het JMX-bestand moet hierin worden opgeslagen met dezelfde naam)
- datasets
- Zal data bestanden bevatten die onze verzoeken dynamisch maken bij elke testiteratie
- logs
- Zal debuglogs bevatten van de JMeter-testomgeving
- reports
- Zal door JMeter gegenereerde rapporten bevatten
- results
- Zal JMeter testresultaatbestanden bevatten
- Dit zijn de RAW-resultaatbestanden en het belangrijkste artefact van de test
- uploads
- Zal bestanden bevatten die geüpload moeten worden
Binnen de "project" map zouden 5 lege mappen worden aangemaakt: datasets, logs, reports, results en uploads.
Door Gebruiker Gedefinieerde Variabelen
Net als de hierboven genoemde mappenstructuur is het gebruik van Door Gebruiker Gedefinieerde Variabelen een testconstructiestrategie die portabiliteit, herbruikbaarheid en delen van Testplannen bevordert. Enkele veelgebruikte variabelen bij een ArcGIS service test zijn:
- ProjectFolder
- WebServerName
- ServerInstanceName
- SecurePort
- ServiceName
In het JMeter Testplan kunnen deze variabelen eenvoudig worden aangeroepen met notatie zoals: ${ServiceName}, wat automatisch wordt vervangen door de naam van de service tijdens uitvoering. Het gebruik van variabelen is minder foutgevoelig dan hardcoded waarden als u ooit van plan bent de test in een andere omgeving te gebruiken. Wanneer de test dan wordt uitgevoerd tegen een andere deployment, hoeft de tester alleen de variabele definitie aan te passen. Voor Testplannen met veel gedefinieerde HTTP Request voorbeelden kan dit veel tijd besparen.
De Juiste Thread Group Kiezen
Er zijn verschillende keuzes bij het definiëren van uw step load logica. Ze zijn allemaal vergelijkbaar en bieden dezelfde basisfunctionaliteit maar hebben enkele subtiele verschillen. Thread Group is een goede, veilige keuze die maximale testportabiliteit biedt omdat het is inbegrepen bij het kernproduct van JMeter.
Dat gezegd hebbende, kan het gebruik van de JMeter Plugins Manager (geïnstalleerd als onderdeel van de Performance Testing with Apache JMeter (An Introduction)) om de “Custom Thread Groups” toe te voegen, de testomgeving voorzien van enkele andere nuttige opties op dit gebied.
Ondersteuning Toevoegen voor Custom Thread Groups in JMeter
Vanuit de Plugins Manager binnen JMeter (Opties-->Plugins Manager):
- Selecteer Beschikbare Plugins
- Zoek en selecteer Custom Threads Groups
- Selecteer Wijzigingen Toepassen en Herstart JMeter

Zodra de “Custom Thread Groups” plugin is geïnstalleerd, is een aanbevolen alternatief voor Thread Group de bzm – Concurrency Thread Group, omdat deze een eenvoudige stapconfiguratie mogelijk maakt die visueel de gedefinieerde druk weergeeft, wat een geweldige validatiefunctie is vanuit testperspectief.
Transacties Gebruiken om Verzoeken te Groeperen
Het toevoegen van transacties aan uw test kan een nuttige manier zijn om één of meer vergelijkbare verzoeken die tot dezelfde “operatie” behoren te groeperen. Bijvoorbeeld het laden van een applicatie, een navigatiekaart zoom of formulierzoekopdracht. Het gebruik van zo’n transactie kan analyse sterk vergemakkelijken omdat het de operatie (bijv. formulierzoekopdracht) isoleert in zijn eigen logische “container” met alleen de verzoeken die verantwoordelijk zijn voor zijn functie. Terwijl veel verzoeken voor veel verschillende functies of services in één grote groep gooien, kan het post-test onderzoek erg moeilijk maken. Met transacties kan analyse worden uitgevoerd om respectievelijk de prestaties van elke operatie te begrijpen.
Opmerking: Kaartapplicaties en workflows variëren; sommige operaties zullen transacties hebben die uit veel verzoeken bestaan, andere slechts één verzoek.
Opmerking: De prestaties van verschillende operaties in een test schalen niet altijd op dezelfde manier; sommige doen het beter dan andere; kunnen identificeren welke operaties slecht presteren (door unieke transactienaam) is goede analyse.
Valideer dat de Respons Wordt Teruggegeven
< P > Ervoor zorgen dat de verwachte respons terugkomt van de externe server is net zo belangrijk als het verzenden van het verzoek. Om verschillende redenen is vertrouwen op alleen de HTTP-statuscode (bijv. HTTP 200) onvoldoende bij het testen van een ArcGIS-resource zoals een service.</ P >< P > Een manier om de respons te valideren is zoeken naar sleutelwoorden in de Header of Body. Als er bijvoorbeeld om een PNG-afbeelding wordt gevraagd maar er in plaats daarvan een tekstuele foutmelding wordt teruggegeven, zal een Response Assertion-regel die zoekt naar "image/png" in de Header proberen markeren als
Mislukt . Als dit aanwezig is in de Header, wordt dit beschouwd als een
Geslaagd -verzoek.</ P >< P >< STRONG >< FONT color = "#FF0000" > Opmerking: Voor elk HTTP-verzoek dat moet worden onderzocht in het JMeter Testplan moet er een Response Assertion-regel worden toegevoegd.</ FONT ></ STRONG ></ P >< H1 id = "toc-hId--1217238839" >< SPAN > Een Data-Gedreven Export Map Test Maken in JMeter </ SPAN ></ H1 >< P >< SPAN > Met behulp van bovenstaande strategieën kan er een flexibel en veelzijdig JMeter Testplan worden gemaakt dat bij elk verzoek vraagt om een ander interessegebied uit een ArcGIS-kaartservice. Een "dynamische test" is ideaal omdat deze serverbronnen harder kan laten werken dan wanneer steeds dezelfde data wordt opgevraagd. Zo'n test geeft beter realistische omstandigheden weer.</ SPAN ></ P >< P > Als performance tester willen we iets nemen zoals onderstaande export map request handtekening en dit omzetten naar een dynamische JMeter loadtest:</ P >< P > </ P >< P > </ P >< P > </ P >< pre class = "lia-code-sample language-markup" >< code >
https://yourwebadaptor.domain.com/server/rest/services/SampleWorldCities/MapServer/export?dpi=96&transparent=true&format=png32&layers=show:0,1,2&bbox=-108.76228873935,31.0409016308382,-88.8526618315487,46.9686031570791&bboxSR=4326&imageSR=4326&size=1477,827&f=image </ code ></ pre >< P > </ P >< P > </ P >< P > </ P >< P >< SPAN > JMeter biedt verschillende methodologieën voor het construeren van HTTP payloads in een Testplan zoals:</ SPAN ></ P >< UL >< LI >< SPAN > Verzoeken handmatig maken (bijv. handmatig) </ SPAN ></ LI >< LI >< SPAN > Gebruik maken van de ingebouwde recorder om browserverzoeken direct vast te leggen </ SPAN ></ LI >< LI >< SPAN > Importeren van een andere bron
Dit artikel richt zich op de eerste methode om handmatig te laten zien hoe je een JMeter-test maakt, hoe je de componenten van het verzoek samenstelt en hoe je het gedrag ervan dynamisch maakt. Deze data-gedreven test zal de SampleWorldCities kaartservice (die draait op je lokale implementatie) aanroepen via de exportfunctie.
Opmerking: Volgens veel maatstaven wordt SampleWorldCities beschouwd als een kleine en zeer lichtgewicht kaartservice, maar aangezien het alomtegenwoordig is bij ArcGIS Server-implementaties, is het ideaal om te gebruiken voor het doorlopen van het maken van een loadtest.
Maak en sla een nieuw Test Plan op
- Maak vanuit het bestandssysteem de hierboven genoemde mappenstructuur aan:
- De naam van de projectmap wordt sampleworldcities1
- Ga ervan uit dat deze zal bestaan in:
- Maak de ondersteunende projectmappen aan:
- Bijvoorbeeld: datasets, logs, reports, results, uploads
- Start JMeter
- Sla het nieuwe Test Plan dat JMeter aanmaakt op in de zojuist aangemaakte sampleworldcities1-map
- Noem het Test Plan: sampleworldcities1.jmx
- Ga ervan uit dat het volledige pad van het jmx Test Plan is:
- C:\JMeter Tests\sampleworldcities1\sampleworldcities1.jmx

- Vanuit het bestandssysteem zou de projectmap er als volgt uitzien:

Variabelen toevoegen aan het Test Plan
- Klik binnen JMeter op het Test Plan (bijv. sampleworldcities1)
- Onderaan de sectie User Defined Variables klik op Add
- Voer bij Name in: ProjectFolder
- Voer bij Value in: C:\JMeter Tests\sampleworldcities1
- Voer bij Name in: WebServerName
- Voer bij Value in: yourwebadaptor.domain.com
- Voer de hostnaam in van je Web Adaptor of ArcGIS Server
- Voer bij Name in: ServerInstanceName
- Voer bij Value in: server
- Sommige implementaties gebruiken een andere waarde, bijvoorbeeld arcgis
- Voer bij Name in: SecurePort
- Voer bij Value in: 443
- Als je naar een ArcGIS Server-instantie verwijst, gebruik dan 6443
- Voer bij Name in: ServiceName
- Voer bij Value in: SampleWorldCities

bzm Concurrency Thread Group toevoegen aan het Test Plan
- Klik met de rechtermuisknop op het sampleworldcities1 Test Plan en kies onder Add-->Threads (Users) voor bzm Concurrency Thread Group

- Klik onder het sampleworldcities1 Test Plan op bzm Concurrency Thread Group
- Configureer de step load-logica met het volgende:
- Target Concurrency: 10
- Ramp Up Time (min): 20
- Ramp-Up Steps Counter: 10

Met de bzm Concurrency Thread Group-plugin is de geconfigureerde step load-logica gemakkelijk te zien en visueel te bevestigen in de grafiek hierboven. Deze test wordt ingesteld om 20 minuten te draaien, zal de druk verhogen door gebruik te maken van 10 verschillende stappen (elke 2 minuten wordt er 1 gelijktijdige testthread toegevoegd), bereikt een maximum van 10 gelijktijdige testthreads en stopt dan.
Een Transactie toevoegen aan een Test Plan
- Klik met de rechtermuisknop op bzm Concurrency Thread Group en kies onder Add-->Logic Controller voor Transaction Controller

- Zodra toegevoegd, geef de Transaction Controller (bijv. de workflow-operatie) een betekenisvolle naam om deze te onderscheiden van andere die mogelijk in de test bestaan
- Voer bij naam in: MapScale_9M
- De 9M staat voor de schaal van de kaart van 9 miljoen (bijv. 1: 9.244.649)
- Eén of meer HTTP Requests kunnen nu worden toegevoegd aan deze Transaction Controller
- Selecteer Generate parent sample in de sectie Transaction Controller
- Deze optie kan helpen bij validatie omdat het respectievelijke verzoeken onder het Transaction-object weergeeft

Een HTTP Request toevoegen
Nu willen we een data-gedreven HTTP-verzoek maken dat voor elke aanvraag een ander ruimtelijk bereik vraagt. Dit wordt gedaan met een reguliere JMeter HTTP Request.
- Klik met de rechtermuisknop op de Transaction Controller genaamd MapScale_9M en kies onder Add-->Sampler voor HTTP Request

- De nieuwe, lege HTTP Request zou er als volgt uit moeten zien:

De HTTP Request dynamisch maken
Een verzoekhandtekening voor export map zoals:
https://yourwebadaptor.domain.com/server/rest/services/SampleWorldCities/MapServer/export?dpi=96&transparent=true&format=png32&layers=show%3A0%2C1%2C2&bbox=-108.76228873935%2C31.0409016308382%2C-88.8526618315487%2C46.9686031570791&bboxSR=4326&imageSR=4326&size=1477%2C827&f=image
bevat verschillende URL-componenten die naar verschillende plaatsen op de HTTP Request-pagina moeten gaan (om maximale flexibiliteit en onderhoudbaarheid te garanderen). Laten we beginnen met de sleutel-/waardeparen van het verzoek door de URL-parameters te scheiden.
Binnenkort is de parameterssectie aangepast om verschillende JMeter-variabelen te bevatten in plaats van de oorspronkelijke waarden. Het is prima dat sommige delen verwijzen naar JMeter-variabelen die nog niet zijn aangemaakt in de test.
- Kopieer het volgende en plak dit in de HTTP Request door onderaan te klikken op Add from Clipboard:
dpi=96&transparent=true&format=png32&layers=show%3A0%2C1%2C2&bbox=${bbox_9244649}&bboxSR=${sr_9244649}&imageSR=${sr_9244649}&size=${width_9244649}%2C${height_9244649}&f=image
Dit helpt om verschillende onderdelen op hun plaats te zetten die nodig zijn om bepaalde delen van de HTTP Request dynamisch te maken.
title="keyvaluepairs_httprequest.png" alt="keyvaluepairs_httprequest.png" "/><\/span><\/P>Onder het gedeelte Web Server:Voer voor Protocol in: https<\/LI>Voer voor Servernaam of IP in: ${WebServerName}<\/LI>Voer voor Poortnummer in: ${SecurePort}<\/LI><\/UL><\/LI>Onder het gedeelte HTTP Request:Voer voor Pad in: \/${ServerInstanceName}\/rest\/services\/${ServiceName}\/MapServer\/export<\/LI><\/UL><\/LI><\/UL>
<\/span><\/P>Een Response Assertion toevoegen<\/SPAN><\/H2>Klik met de rechtermuisknop op de HTTP Request, en kies onder Toevoegen-->Assertions, Response Assertion<\/LI><\/UL>
<\/span><\/P>Wijzig enkele parameters van de Response Assertion:Kies onder Veld om te testen: Response Headers<\/LI>Kies onder Patroonvergelijkingsregels: Bevat<\/LI>Klik onder Patronen om te testen op Toevoegen en voer in: image\/png<\/LI><\/UL><\/LI><\/UL>
<\/span><\/P>Een CSV Data Set Config toevoegen<\/H2>Klik met de rechtermuisknop op het Test Plan (bijv. sampleworldcities1), en kies onder Toevoegen-->Config Element, CSV Data Set Config<\/LI><\/UL>
<\/span><\/P>Selecteer de CSV Data Set Config en hernoem deze naar CSV Data Set Config -- 9MHet geven van een unieke naam kan helpen bij onderhoud/beheer als meerdere databestanden worden gebruikt binnen een test (bijv. één bestand voor bounding box van elke schaal van de kaart)<\/LI><\/UL><\/LI><\/UL>
<\/span><\/P>Gebruik een teksteditor om een leeg CSV-bestand te vullen met de volgende 16 regels data:<\/SPAN><\/LI><\/UL>bbox,width,height,mapUnits,sr,scale<\/SPAN><\/FONT><\/P>"-108.76228873935,31.0409016308382,-88.8526618315487,46.9686031570791",1280,1024,esriDecimalDegrees,4326,9244649<\/SPAN><\/FONT><\/P>"23.1282001284589,34.337748761293,43.03782703626,50.2654502875339",1280,1024,esriDecimalDegrees,4326,9244649<\/SPAN><\/FONT><\/P>"-117.052786808947,35.3545948648786,-97.1431599011459,51.2822963911194",1280,1024,esriDecimalDegrees,4326,9244649<\/SPAN><\/FONT><\/P>"-100.83549484975,36.0637839078502,-80.9258679419492,51.991485434091",1280,1024,esriDecimalDegrees,4326,9244649<\/SPAN><\/FONT><\/P>"17.7030587822399,34.3302705716379,37.6126856900409,50.2579720978788",1280,1024,esriDecimalDegrees,4326,9244649<\/SPAN><\/FONT><\/P>"32.2827904735659,37.2792197897781,52.192417381367,53.2069213160189",1280,1024,esriDecimalDegrees,4326,9244649<\/SPAN><\/FONT><\/P>"0.222469446585188,35.0562794764081,20.1320963543862,50.9839810026489",1280,1024,esriDecimalDegrees,4326,9244649<\/SPAN><\/FONT><\/P>"100.262489726575,20.8660021309943,120.172116634376,36.7937036572352",1280,1024,esriDecimalDegrees,4326,9244649<\/SPAN><\/FONT><\/P>"72.4186084471192,22.1748804724666,92.3282353549203,38.1025819987075",1280,1024,esriDecimalDegrees,4326,9244649<\/SPAN><\/FONT><\/P>"-61.2094273153097,-26.7402777397378,-41.2998004075086,-10.812576213497",1280,1024,esriDecimalDegrees,4326,9244649<\/SPAN><\/FONT>
tijd (responstijd)<\/LI>Grootte in bytes (Header en Body)<\/LI>Aantal fouten<\/LI>Responscode<\/LI>ContentType<\/LI><\/UL><\/LI><\/UL><\/LI><\/UL>Opmerking: Deze info is geweldig voor het valideren van de testafspeelactie maar ook nuttig voor prestatieproblemen oplossen<\/FONT><\/STRONG><\/P>
<\/span><\/P>Aangezien deze test de export map functie gebruikt, zou een visualisatie van de gevraagde afbeelding ook helpen bij de validatie van het Test Plan.Door op het tabblad Response data te klikken en de MapScale_9M transactie uit te vouwen, zou de gevraagde afbeelding moeten worden weergegeven.Herhaal indien nodig voor andere MapScale_9M transacties<\/LI><\/UL><\/LI>Door meerdere verzoeken te doorlopen, zouden verschillende afbeeldingen moeten worden getoond wat de creatie van een data-gedreven export map load test in JMeter valideert<\/LI><\/UL><\/LI><\/UL>
<\/span><\/P> <\/P>
<\/span><\/P>Recente wijzigingen opslaan<\/H2>Er zijn veel wijzigingen aangebracht sinds de laatste keer opslaan.<\/P>Sla het Test Plan opBestand-->Opslaan<\/LI><\/UL><\/LI><\/UL>Om het Apache JMeter Test Plan dat in dit artikel wordt gebruikt te downloaden, zie: sampleworldcities1.zip<\/A><\/P>Om een versie van dit Apache JMeter Test Plan met meer details over extra kaartschalen te downloaden, zie:
sampleworldcities2.zip<\/A><\/P>