Požadavek předpokladu
Tento tutoriál obsahuje strategie a postupy pro vytvoření a spuštění dynamického zátěžového testu proti službě ArcGIS Server a předpokládá, že máte základní znalosti Apache JMeter. Pokud jste v Apache JMeter noví, prosím podívejte se na náš Performance Testing with Apache JMeter (An Introduction).

Strategie testování JMeter
Než se pustíte do podrobností o konstrukci a ověření datově řízeného zátěžového testu, je důležité nejprve probrat několik testovacích strategií specifických pro JMeter. Tyto tipy se liší od položek uvedených v našem Recommended Strategies for Load Testing an ArcGIS Server Deployment článku, který je určen pro použití s jakýmkoli testovacím nástrojem (ale také platí pro JMeter).
Dobrý testovací plán začíná správnou strukturou složek
Jednou z taktik, která může pomoci s řízením více testů a více reportů v JMeter, je zavedení jednoduché, ale konzistentní struktury složek pro ukládání různých prvků každého testu. Hlavním prvkem testu JMeter je soubor JMX… zde je veškerá testovací logika uložena. Ale jak budete pokračovat v přidávání funkcí do svého testu a spouštět ho opakovaně, rozšíříte správu nad rámec pouhého jednoho souboru JMX.
Trocha organizace dělá hodně… ruční vytvoření několika klíčových adresářů může pomoci spravovat různé soubory JMeter, které se časem nahromadí na pevném disku.
Poznámka: Tento přístup se provádí z operačního systému souborového systému a nikoli přímo z Apache JMeter.
Doporučená struktura složek:
- name_of_project (soubor JMX by měl být uložen uvnitř s tímto stejným názvem)
- datasets
- Bude obsahovat datové soubory, které umožní našim požadavkům být dynamické při každé iteraci testu
- logs
- Bude obsahovat ladicí logy testovacího prostředí JMeter
- reports
- Bude obsahovat reporty generované JMeterem
- results
- Bude obsahovat výsledkové soubory testů JMeter
- Toto jsou RAW výsledkové soubory a nejdůležitější artefakt testu
- uploads
- Bude obsahovat soubory určené k nahrání
Uvnitř složky "project" by bylo vytvořeno 5 prázdných adresářů: datasets, logs, reports, results a uploads.
Uživatelsky definované proměnné
Stejně jako výše zmíněná struktura složek je využití Uživatelsky definovaných proměnných strategií konstrukce testu, která podporuje přenositelnost, znovupoužitelnost a sdílení Test Plánu. Některé běžné proměnné používané u testu služby ArcGIS jsou:
- ProjectFolder
- WebServerName
- ServerInstanceName
- SecurePort
- ServiceName
V Test Plánu JMeter lze na tyto proměnné snadno odkazovat pomocí notace jako: ${ServiceName}, která bude automaticky nahrazena názvem služby při spuštění. Použití proměnných je méně náchylné k chybám než použití pevně zakódovaných hodnot, pokud plánujete test použít v jiném prostředí. Když je pak test spuštěn proti jiné instalaci, tester musí pouze upravit definici proměnné. U Test Plánů s mnoha definovanými vzorky HTTP Request to může být skutečná úspora času.
Výběr správné Thread Group
Při definování logiky krokové zátěže máte několik možností. Všechny jsou podobné a nabízejí stejnou základní funkčnost, ale mají některé jemné rozdíly. Thread Group je dobrá, bezpečná volba, která nabízí maximální přenositelnost testu, protože je součástí jádra produktu JMeter.
Nicméně použití Správce pluginů JMeter (instalovaného jako součást Performance Testing with Apache JMeter (An Introduction)) k přidání „Custom Thread Groups“ může poskytnout testovacímu prostředí další užitečné možnosti v této oblasti.
Přidání podpory Custom Thread Groups do JMeter
Z Plugins Manager v rámci JMeter (Options-->Plugins Manager):
- Vyberte Available Plugins
- Nalezněte a vyberte Custom Threads Groups
- Zvolte Apply Changes and Restart JMeter

Jakmile je plugin „Custom Thread Groups“ nainstalován, doporučenou alternativou k Thread Group je bzm – Concurrency Thread Group, protože umožňuje přímočarou konfiguraci kroků, která vizuálně zobrazuje definovaný tlak, což je skvělá validační funkce z hlediska testování.
Použití Transakcí ke skupinování požadavků
Přidání Transakcí do vašeho testu může být užitečný způsob seskupení jednoho nebo více podobných požadavků patřících ke stejné „operaci“. Například načtení aplikace, navigační zoom mapy nebo vyhledávání ve formuláři. Použití transakce tímto způsobem může výrazně pomoci analýze, protože izoluje operaci (např. vyhledávání ve formuláři) do vlastního logického „kontejneru“ pouze s požadavky odpovědnými za její funkci. Naopak vložení mnoha požadavků pro mnoho různých funkcí nebo služeb do jedné velké skupiny může zpětnou analýzu po testu značně ztížit. S transakcemi lze provést analýzu výkonu každé operace zvlášť.
Poznámka: Mapové aplikace a pracovní postupy se liší; některé operace budou mít transakce složené z mnoha požadavků, jiné jen jeden požadavek.
Poznámka: Výkon různých operací v testu se nemusí škálovat stejným způsobem; některé mohou fungovat lépe než jiné; schopnost identifikovat špatně fungující operace (podle unikátního názvu transakce) je dobrá analýza.
Ověření vrácené odpovědi
Zajištění očekávané odpovědi ze vzdáleného serveru je stejně důležité jako odeslání požadavku. Z různých důvodů není při testování zdroje ArcGIS jako služby dostatečné spoléhat pouze na HTTP stavový kód (např. HTTP 200).
Jedním ze způsobů ověření odpovědi je hledat klíčová slova v Hlavičce nebo Těle odpovědi. Pokud je požadován PNG obrázek, ale místo toho je vrácena textová chybová zpráva, pravidlo Response Assertion hledající „image/png“ v Hlavičce označí pokus jako neúspěšný. Pokud se nachází v Hlavičce, považuje se to za úspěšný požadavek.
Poznámka: Pro každý HTTP Request, který má být vyhodnocen v Test Plánu JMeter, musí být přidáno pravidlo Response Assertion.
Vytvoření datově řízeného exportního mapového testu v JMeter
< P >< SPAN >Pomocí výše uvedených strategií lze vytvořit flexibilní a všestranný Test Plán JMeter, který při každém požadavku volá jinou oblast zájmu ze služby ArcGIS mapy. „Dynamický test“ je ideální, protože může zatěžovat serverové zdroje více než kdyby byla pokaždé požadována stejná data. Takový test lépe reprezentuje reálné podmínky.</ P >< P >Jako tester výkonu chceme vzít něco jako níže uvedený podpis požadavku export mapy a převést ho na dynamický zátěžový test v JMeter:</ 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< P > </ P >< P > </ P >< P > </ P >< P >< SPAN >JMeter nabízí několik metodologií pro konstrukci HTTP payloadů v Test Plánu jako například:</ P >< UL >< LI >< SPAN >Vytváření požadavků ručně (např. manuálně)</ LI >< LI >< SPAN >Použití vestavěného rekordéru k přímému zachycení požadavků z prohlížeče </ LI >< LI >< SPAN >Importování z jiného zdroje<\/SPAN><\/LI><\/UL>
Tento článek se zaměří na první metodu manuálního postupu pro vytvoření testu v JMeteru, jak sestavit komponenty požadavku a jak učinit jeho chování „dynamickým“. Tento datově řízený test bude volat mapovou službu SampleWorldCities (běžící na vaší lokální instalaci) prostřednictvím exportní funkce. <\/STRONG><\/P>Poznámka: Podle mnoha měřítek je SampleWorldCities považována za malou a velmi lehkou mapovou službu, ale vzhledem k tomu, že je všudypřítomná u nasazení ArcGIS Serveru, je ideální pro použití při průchodu tvorbou zátěžového testu.<\/FONT><\/STRONG><\/P>Vytvoření a uložení nového testovacího plánu<\/H2>Z file systému vytvořte výše zmíněnou strukturu složek:Název složky projektu bude sampleworldcities1Předpokládejme, že bude umístěna v:C:\JMeter Tests\<\/LI><\/UL><\/LI>Vytvořte podpůrné projektové adresáře:Například: datasets, logs, reports, results, uploads<\/LI><\/UL><\/LI><\/UL><\/LI><\/UL><\/LI>Spusťte JMeter<\/LI>Uložte nový Test Plan, který JMeter vytvoří, do právě vytvořené složky sampleworldcities1Pojmenujte Test Plan: sampleworldcities1.jmxPředpokládaná úplná cesta k jmx Test Plánu je:<\/LI>C:\JMeter Tests\sampleworldcities1\sampleworldcities1.jmx<\/LI><\/UL><\/LI><\/UL><\/LI><\/UL>
<\/span><\/P>Z file systému by projektová složka vypadala následovně:<\/LI><\/UL>
<\/span><\/P>Přidání proměnných do Test Plánu<\/SPAN><\/H2>V JMeteru klikněte na Test Plan (např. sampleworldcities1)<\/LI>Ve spodní části sekce User Defined Variables klikněte na PřidatPro Název zadejte: ProjectFolderPro Hodnotu zadejte: C:\JMeter Tests\sampleworldcities1<\/LI><\/UL><\/LI>Pro Název zadejte: WebServerNamePro Hodnotu zadejte: yourwebadaptor.domain.com<\/STRONG>Zadejte název hostitele vašeho Web Adaptoru nebo ArcGIS Serveru<\/LI><\/UL><\/LI><\/UL><\/LI>Pro Název zadejte: ServerInstanceNamePro Hodnotu zadejte: serverNěkterá nasazení používají jinou hodnotu, např. arcgis<\/LI><\/UL><\/LI><\/UL><\/LI>Pro Název zadejte: SecurePortPro Hodnotu zadejte: 443Pokud směřujete na instanci ArcGIS Serveru, použijte 6443<\/LI><\/UL><\/LI><\/UL><\/LI>Pro Název zadejte: ServiceNamePro Hodnotu zadejte: SampleWorldCities<\/LI><\/UL><\/LI><\/UL><\/LI><\/UL>
Přidání bzm – Concurrency Thread Group do Test Plánu<\/SPAN>
- Klikněte pravým tlačítkem na sampleworldcities1 Test Plan a pod Přidat-->Vlákna (Uživatelé) vyberte bzm – Concurrency Thread Group<\/LI>

- Pod sampleworldcities1 Test Plan klikněte na bzm – Concurrency Thread Group<\/LI>
- Nakonfigurujte logiku postupného zatížení následovně:
- Cílová souběžnost: 10<\/LI>
- Doba rozběhu (min): 20<\/LI>
- Počet kroků rozběhu: 10<\/LI>
< / span >< / p >< p >< span > S pluginem bzm – Concurrency Thread Group lze nakonfigurovanou logiku postupného zatížení snadno vidět a vizuálně potvrdit v grafickém diagramu výše. Tento test poběží 20 minut, zvýší tlak pomocí 10 různých kroků (přidáním 1 souběžného testovacího vlákna každé 2 minuty), dosáhne maximálně 10 souběžných testovacích vláken a poté se zastaví.< / span >< / p >< h2 id = "toc-hId-19696281 " > Přidání transakce do testovacího plánu < / h2 >< ul >< li > Klikněte pravým tlačítkem na bzm – Concurrency Thread Group a pod Přidat-->Logický kontroler vyberte Transaction Controller < / li >< / ul >< p >< span class = "lia-inline-image-display-wrapper lia-image-align-center " image-alt = "add_transactioncontroller.png " style = "width: 945px; " >< img src = "https://us.v-cdn.net/6038851/uploads/images/14940iD6689BD9F5DCBF53/add_transactioncontroller.png " role = "button " title = "add_transactioncontroller.png " alt = "add_transactioncontroller.png " />< / span >< / p >< ul class = "lia-list-style-type-disc " >< li > Po přidání dejte Transaction Controlleru (např. pracovnímu postupu) smysluplný název, aby se odlišil od ostatních v testu < / li >< li > Pro název zadejte: MapScale_9M < ul class = "lia-list-style-type-circle " >< li > Číslo 9M představuje měřítko mapy 9 milionů (např. 1 : 9 244 649) < / li >< li > Nyní lze do tohoto Transaction Controller přidat jeden nebo více HTTP požadavků < / li >< / ul >< / li >< li > Vyberte „Generate parent sample“ v sekci Transaction Controller < ul class = "lia-list-style-type-circle " >< li > Tato možnost pomáhá s validací tím, že zobrazí příslušné požadavky pod objektem Transakce < / li >< / ul >< / li >< / ul >< p >< span class = "lia-inline-image-display-wrapper lia-image-align-center " image-alt = "rename_transactioncontroller.png " style = "width: 944px; " >< img src = "https://us.v-cdn.net/6038851/uploads/images/14942i9A4D545C7D5A3164/rename_transactioncontroller.png " role = "button " title = "rename_transactioncontroller.png " alt = "rename_transactioncontroller.png " />< / span >< / p >< h2 id = "toc-hId--1787758182 "> Přidání HTTP požadavku < / h2 >< p > Nyní chceme vytvořit datově řízený HTTP požadavek, který bude žádat o jiný prostorový rozsah s každým požadavkem. To se provádí pomocí běžného HTTP Request v JMeteru. < / p >< ul >< li > Klikněte pravým tlačítkem na Transaction Controller nazvaný MapScale_9M a pod Přidat-->Sampler vyberte HTTP Request < / li >< / ul >< p >< span class = "lia-inline-image-display-wrapper lia-image-align-center " image-alt = "add_httprequest.png" style= title="keyvaluepairs_httprequest.png" alt="keyvaluepairs_httprequest.png" "/><\/span><\/P>V sekci Web Server:Pro Protocol zadejte: https<\/LI>Pro Server Name or IP zadejte: ${WebServerName}<\/LI>Pro Port Number zadejte: ${SecurePort}<\/LI><\/UL><\/LI>V sekci HTTP Request:Pro Path zadejte: \/${ServerInstanceName}\/rest\/services\/${ServiceName}\/MapServer\/export<\/LI><\/UL><\/LI><\/UL>
<\/span><\/P>Přidání Response Assertion<\/SPAN><\/H2>Klikněte pravým tlačítkem na HTTP Request a v nabídce Add-->Assertions vyberte Response Assertion<\/LI><\/UL>
<\/span><\/P>Změňte několik parametrů Response Assertion:V poli Field to Test vyberte: Response Headers<\/LI>V Pattern Matching Rules vyberte: Contains<\/LI>V Patterns to Test klikněte na Add a zadejte: image\/png<\/LI><\/UL><\/LI><\/UL>
<\/span><\/P>Přidání CSV Data Set Config<\/H2>Klikněte pravým tlačítkem na Test Plan (např. sampleworldcities1) a v nabídce Add-->Config Element vyberte CSV Data Set Config<\/LI><\/UL>
<\/span><\/P>Vyberte CSV Data Set Config a přejmenujte ho na CSV Data Set Config -- 9MPoskytnutí unikátního názvu může pomoci s údržbou a správou, pokud je v testu použito více datových souborů (např. jeden soubor pro bounding box každého měřítka mapy)<\/LI><\/UL><\/LI><\/UL>
<\/span><\/P>Použitím textového editoru vyplňte prázdný CSV soubor následujícími 16 řádky dat:<\/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>
-61.2094273153097,-26.7402777397378,-41.2998004075086,-10.812576213497
-72.5908131920005,-26.6270515481087,-52.6811862841995,-10.6993500218679
99.7474167083529,20.7088254145549,119.657043616154 ,36 .6365269407958
102 .59837658124 ,20 .384726879328 ,122 .508003489041 ,36 .3124284055689
80 .8239612278688 ,23 .4521454643548 ,100 .73358813567 ,39 .3798469905956
-105 .812716128284 ,31 .0536390717042 ,-85 .9030892204829 ,46 .9813405979451
Uložte CSV soubor do: C:\JMeter Tests\sampleworldcities1\datasets\bbox_9244649.csv
Z okna CSV Data Set Config klikněte na Browse a najděte právě uložený soubor bbox_9244649.csv
Nakonfigurujte několik položek zdroje dat:
Změňte Filename z: C:/JMeter Tests/sampleworldcities1/datasets/bbox_9244649.csv
Na: ${ProjectFolder}/datasets/bbox_9244649.csv
Pro Variable Names přidejte: bbox_9244649,width_9244649,height_9244649,sr_9244649
Změňte Ignore first line
Změňte Allow quoted data?

Validace Test Planu
- Použijte posluchač View Results Tree k ověření odpovědi v GUI ze vzdáleného serveru
- Klikněte pravým tlačítkem na Test Plan (sampleworldcities1) a v nabídce Add-->Listener vyberte View Results Tree
< span class = ' lia-inline-image-display-wrapper lia-image-align-center ' image-alt = ' add_viewresultstree.png ' style = ' width:944 px; ' >< img src = ' https://us.v-cdn.net/6038851/uploads/images/14969i9ABAB479A5A40711/add_viewresultstree.png ' role = ' button ' title = ' add_viewresultstree.png ' alt = ' add_viewresultstree.png ' / ></ span ></ p >
- Vyberte View Results Tree a poté klikněte na zelený trojúhelník v horní části Apache JMeter GUI
< span class = ' lia-inline-image-display-wrapper lia-image-align-center ' image-alt = ' play_viewresultstree.png ' style = ' width:945 px; ' >< img src = ' https://us.v-cdn.net/6038851/uploads/images/14973i8FC284BC703DC47B/play_viewresultstree.png ' role = ' button ' title = ' play_viewresultstree.png ' alt = ' play_viewresultstree.png ' / ></ span ></ p >
- Po nakonfigurovaném krokovém zatížení JMeter začne opakovaně odesílat požadavky (zpočátku) po jednom.
- Zelený štít se zaškrtnutím znamená úspěšný požadavek; pokud jej uvidíte počkejte několik sekund na odeslání několika požadavků a přijetí odpovědí.
- Kliknutím na jeden ze zelených štítů MapScale_9M se zobrazí karta výsledku Sampler s informacemi jako:
- Load čas (doba odezvy)<\/LI>
- Velikost v bajtech (Hlavička a Tělo)<\/LI>
- Počet chyb<\/LI>
- Kód odpovědi<\/LI>
- ContentType<\/LI><\/UL><\/LI><\/UL><\/LI><\/UL>
Poznámka: Tyto informace jsou skvělé pro ověření přehrávání testu, ale také užitečné pro řešení problémů s výkonem<\/FONT><\/STRONG><\/P>
<\/span><\/P>Jelikož tento test provádí funkci export map, vizualizace požadovaného obrázku by také pomohla s ověřením Test Plan.Kliknutím na záložku Response data a rozbalením transakce MapScale_9M by se měl zobrazit požadovaný obrázek.Opakujte podle potřeby pro další transakce MapScale_9M<\/LI><\/UL><\/LI>Přepínání mezi několika požadavky by mělo ukázat různé obrázky, což potvrzuje vytvoření datově řízeného export map load testu v JMeter<\/LI><\/UL><\/LI><\/UL>
<\/span><\/P> <\/P>
<\/span><\/P>Ukládání nedávných změn<\/H2>Od posledního uložení bylo provedeno mnoho změn.<\/P>Uložte Test PlanSoubor-->Uložit<\/LI><\/UL><\/LI><\/UL>Pro stažení Apache JMeter Test Plan použitého v tomto článku viz: sampleworldcities1.zip<\/A><\/P>Pro stažení verze tohoto Apache JMeter Test Plan s více detaily pokrývajícími další měřítka map viz:
sampleworldcities2.zip<\/A><\/P>