Proč testovat Hosted Feature Layer Service?
Předchozí články Komunity o testování výkonu s Apache JMeter se zaměřovaly na využívání Map Services prostřednictvím funkce exportu. Nicméně, Hosted (feature) layers jsou také populární funkcí ArcGIS Enterprise a jsou široce používány v nasazeních. Navíc dotazování těchto vrstev je založeno na "opakovaném" návrhu mřížky, který může pomoci poskytnout vyšší míru škálovatelnosti oproti jiným vizualizačním technologiím. Spojte to s vykreslováním dat na straně klienta a je to výhra pro všechny.<\/P>
Vzhledem k tomu, že hosted feature services jsou osvědčenou a oblíbenou technologií služeb, dává smysl chtít testovat dotazy na feature pod zatížením, aby bylo možné pozorovat jejich škálovatelnost z první ruky.<\/SPAN><\/P>Výzvy testování Hosted Feature Layer Service<\/SPAN><\/H1>Ve srovnání s testováním funkce export mapy je testování dotazů Hosted Feature Layer Service výzvou, protože požadavky jsou programově složitější. Navigační "pan" nebo "zoom" v webovém prohlížeči generuje několik různých dotazů, každý se svou vlastní geometrií. Pro opakování tohoto chování nebude sestavený load <\/SPAN>test mít jen jeden požadavek k odeslání, ale mnoho a proměnlivé množství. K tomu přidejte fakt, že každý dotazovací požadavek v transakci bude mít unikátní geometrii a měnící se maxAllowableOffset (v závislosti na měřítku mapy) a je to spousta pohyblivých částí, které je třeba sledovat.<\/SPAN><\/P>Jak testovat Hosted Feature Service?<\/SPAN><\/H1>Datová sada USGS Motor Vehicle Use Roads<\/SPAN><\/H2>Pochopení procesu v tomto článku je nejefektivnější, pokud lze kroky reprodukovat. Ale tato opakovatelnost vyžaduje přístup ke stejnému souboru dat. Prostorová velikost zdroje dat musí být také dostatečně velká, aby generovala slušná testovací data, ale ne příliš velká, aby bylo stahování nepohodlné.<\/SPAN><\/P>Zadejte do Motor Vehicle Use Map: Roads feature layer dataset na hub.arcgis.com. 179 tisíc polyline záznamů USGS Roads dat ve WGS 1984 Web Mercator (Auxiliary_Sphere) odpovídá asi 200MB po zipnutí. Je poskytováno pod Creative Commons (CC0) licencí.<\/SPAN><\/P>Zobrazení dat Roads z ArcGIS Pro:<\/SPAN><\/LI><\/UL>
<\/SPAN><\/P>Velké měřítko zobrazení s povoleným označováním:<\/LI><\/UL>
<\/SPAN><\/P>Tato data budou publikována z ArcGIS Pro do hosted feature service v ArcGIS Enterprise nebo načtena přímo přes Portal for ArcGIS.<\/SPAN><\/P>Pro vytvoření služby z těchto dat viz Publikování hosted feature layers v ArcGIS Enterprise<\/SPAN><\/LI><\/UL>Generování testovacích dat<\/SPAN><\/H2>Tento test bude vyžadovat dobrá testovací data pro použití v JMeter testu.<\/P>Pro řešení takového úkolu se důrazně doporučuje použít velmi vynikající Load Testing Tools.<\/P>Verze 1.2.2 přidává nové funkce jako nástroj "Generate Query Extents", který bude velkou pomocí při generování testovacích dat pro feature service.<\/SPAN><\/P>Tato data využívají návrh založený na mřížce, což je to, co chceme. S přístupem založeným na mřížce jsou za scénou vytvářeny obálky pro požadovanou oblast. Tyto obálky jsou pak převedeny na odpovídající 512x512 query extents. Počet dotazů (pro každou počáteční obálku) se bude lišit podle toho, kde dopadne na mřížku... toto napodobuje chování služby ve webovém prohlížeči.<\/SPAN><\/P>Zpřístupnění nástrojů z ArcGIS Pro<\/H3>Jakmile byl projekt load-testing-tools <\/SPAN>stažen do vašeho počítače, umístěte rozbalenou složku do adresáře, který je přístupný nebo zpřístupněný ArcGIS Pro. Pokud máte již nainstalovanou předchozí verzi Load Testing Tools, tato aktualizovaná verze může být nainstalována vedle ní (i když s jiným názvem složky) nebo kompletně nahradit existující složku.<\/P>Například:<\/P>Umístěte složku load-testing-tools do C:\Users\[uživatelské_jméno]\Documents\ArcGIS<\/LI>Použijte Přidat připojení složky z Katalogu v ArcGIS Pro k zobrazení obsahu tohoto adresáře:<\/LI><\/UL>
<\/P>Nástroj "Generate Query Extents" může pracovat s hosted feature service, lokální kopií dat nebo daty v enterprise geodatabázi.<\/SPAN><\/P>Poznámka: nástroj by měl generovat query extents z jakýchkoli dat, ale vyžaduje Projected Coordinate System WGS 1984 Web Mercator Auxiliary_Sphere (WKID: 3857).<\/STRONG>
Vyberte oblast zájmu<\/H3>Vyberte oblast zájmu z mapy, ve které chcete generovat testovací data. V tomto příkladu jsou data Roads zobrazena ze severozápadu Spojených států (blízko státních hranic Idaho a Montana). Vybrané měřítko mapy je 1:1 000 000.<\/P>
Spusťte nástroj Generate Query Extents<\/SPAN>
- Spuštění nástroje Generate Query Extents by mělo zobrazit vstupy podobné následujícím:<\/SPAN>

Upravte vstupy pro nástroj Generate Query Extents<\/SPAN>
- Několik menších a větších úrovní měřítka bylo odstraněno
- Zbývající úrovně měřítka jsou 12, 13 a 14, které odpovídají měřítkům mapy 144448, 72224 a 36112
- Počet záznamů pro tyto měřítka byl zvýšen
- Úroveň měřítka 14 může být vynechána v závislosti na verzi Load Testing Tools (pokud chybí, přidejte ji ručně)
- Výstupní umístění souboru by mělo být něco jako:
C:\Users\username\Documents\ArcGIS\Projects\Catalog2\query_extents.csv
- Klikněte na Spustit pro provedení nástroje
Poznámka: Doba generování testovacích dat závisí na několika faktorech jako počet různých úrovní měřítka, počet záznamů (na každou úroveň) a aktuální měřítko mapy projektu.

Poznámka: Generování testovacích dat pomocí jiných datasetů může vyžadovat použití různých úrovní měřítka podle úrovně detailu a hustoty prvků.
Ověření vygenerovaných testovacích dat
Je dobrým zvykem vizuálně ověřit vygenerovaná testovací data. To umožňuje testerovi vědět, co bude load test prostorově požadovat od feature service.
Až nástroj úspěšně dokončí generování 3 primární sady dat, které jsou zajímavé:<\/P>
- Třídy prvků ohraničujícího rámečku
- Obsahuje náhodně generované oblasti zájmu<\/LI>
- Jedna třída prvků pro každou požadovanou úroveň měřítka<\/LI><\/UL><\/LI>
- Třídy prvků rozsahu dotazu
- Obsahuje mřížku dlaždic (512x512), na které bude založen každý dotaz prvku<\/LI>
- Jedna třída prvků pro každou požadovanou úroveň měřítka<\/LI><\/UL><\/LI>
- CSV soubory rozsahu dotazu
- Obsahuje generovaná testovací data<\/LI>
- Každý řádek se skládá z dynamických komponent požadavku služby prvků<\/LI>
- Jeden soubor pro každou požadovanou úroveň měřítka<\/LI><\/UL><\/LI><\/UL>
<\/span><\/P>Z panelu Katalog načtěte třídu prvků bbox_36112 do aktuální mapy v ArcGIS ProTento výstup je velmi podobný datům z nástroje Generate Bounding Boxes<\/LI><\/UL><\/LI>V tomto příkladu jsou náhodně generované rámečky růžovéTyto oblasti představují rozlišení obrazovky uživatele, který žádá o data ze služby prvků<\/LI><\/UL><\/LI><\/UL>
<\/span><\/P>Nyní z panelu Katalog načtěte třídu prvků query_extents_36112 do aktuální mapy, ale za (pod) data bbox_36112<\/LI>V tomto příkladu jsou dlaždice mřížky dotazu zelenéTyto dlaždice odpovídají oblasti na mapě, o kterou bboxes žádají data<\/LI><\/UL><\/LI><\/UL>
<\/span><\/P>Přiblížení mapy může přinést lepší pochopení vztahu mezi těmito dvěma sadami dat<\/LI>Jak je vidět na mapě níže, některé bboxes jsou mírně posunuté vůči sobě, ale stále sdílejí společnou dlaždici dotazu z mřížky pod nimi<\/LI>Souřadnice těchto dlaždic dotazu (např. z třídy prvků query_extent) jsou to, co půjde do CSV souborů a nakonec do JMeter load testu<\/LI><\/UL>
<\/span><\/P>Přiblížení bboxes odhaluje detaily jejich příslušné kompozice dotazuNapříklad některé bboxes mohou vyžadovat 12 "základních" dlaždic k vyplnění, jiné 15 nebo 20<\/LI>Jak je vidět na mapě níže, bbox zvýrazněný černě vyžaduje 12 specifických dlaždic dotazu obarvených červeně<\/LI><\/UL><\/LI><\/UL>
<\/span><\/P> Poznámka: Návrh mřížky dlaždic služby prvků je jednou z jejích klíčových silných stránek, protože umožňuje opakovatelnost. Tuto opakovatelnost lze využít s cachingem v nasazení pro lepší škálovatelnost. To není možné s export map.<\/STRONG><\FONT>
< LI >Prohlédnutí generovaných CSV souborů odhalí konečné výsledky této transformace < / LI >< LI >Zobrazení souboru query_extents_36112.csv v textovém editoru by mělo ukázat něco podobného následujícímu < UL class = "lia-list-style-type-circle"> < LI >V závislosti na verzi Load Test Tools mohou být CSV soubory seřazeny podle sloupce operationid < / LI > < / UL > < / LI > < / UL > < P >< span class = "lia-inline-image-display-wrapper lia-image-align-center" image-alt = "csv_file_notepad.png" style = "width: 999px; " >< img src = "https://us.v-cdn.net/6038851/uploads/images/26102i33FE67CF8E16808C/csv_file_notepad.png " role = "button " title = "csv_file_notepad.png " alt = "csv_file_notepad.png " / >< / span >< / P >< UL >< LI >< SPAN >V závislosti na verzi Load Testing Tools může být řádek seskupen nebo neseskupen podle sloupce operationid < / SPAN > < / LI >< LI >< SPAN >Porozumění operationid je v tomto případě důležitý testovací koncept, protože každá operace představuje navigační akci (např. posun nebo přiblížení) < / SPAN > < / LI >< LI >< SPAN >Z pohledu JMeter je operace totéž co transakce < / SPAN > < UL class = "lia-list-style-type-circle"> < LI >Všechny řádky se shodným operationid se stanou geometriemi požadavků služby prvků pod stejným Transaction Controllerem < / LI > < / UL > < / LI > < / UL > < H1 id = "toc-hId--766177794">Testovací plán dotazu Hosted Feature Service < / H1 >< UL >< LI >< SPAN >Ke stažení Apache JMeter Test Plan použitého v tomto článku viz: < / SPAN >< STRONG >< A href = "https://community.esri.com/ccqpr47374/attachments/ccqpr47374/implementing-arcgis-blog/280.47/8/roads_hfs1.zip " target = "_self">roads_hfs1.zip< / A >< / STRONG >< / LI >< LI >Otevření Test Plánu v Apache JMeter by mělo vypadat podobně jako následující:< UL class = "lia-list-style-type-circle"> < LI >Upravte Uživatelsky definované proměnné tak, aby odpovídaly vašemu prostředí< UL class = "lia-list-style-type-square"> < LI >3 CSV soubory generované nástrojem jsou odkazovány přes proměnné JMeter DataFile_A, DataFile_B a DataFile_C pouze názvem souboru (cesta k souborovému systému zde není zahrnuta)< / LI > < / UL > < / LI > < / UL > < / LI > < / UL > < P >< span class = "lia-inline-image-display-wrapper lia-image-align-center" image-alt = "jmeter_hfs_testplan.png " style = "width: 999px; ">< img src = "https://us.v-cdn.net/6038851/uploads/images/26129i672759E7E8A0672C/jmeter_hfs_testplan.png " role = "button " title = "jmeter_hfs_testplan.png " alt = "jmeter_hfs_testplan.png " />< / span >< / P >< H2 id = "toc-hId-1850417758">Komponenty testovacího plánu< / H2 >< H3 id = "toc-hId-172046014">Logika čtení dat< / H3 >< P >Test roads_hfs je trochu jiný než jiné příklady testů Apache JMeter používané v předchozích článcích. Hlavní rozdíl je ten, že i když je to stále test řízený daty (např. CSV soubory jsou použity jako vstup požadavku), nepoužívá typický konfigurační prvek „CSV Data Set Config“ pro načítání dat. Místo toho je tato logika prováděna pomocí JSR223 samplerů, které spouštějí Groovy kód. Důvodem použití Groovy je povaha interakce se službou prvků zmíněná dříve. Pamatujte, že některé transakce budou mít 12 požadavků a jiné mohou mít 15 nebo 20 (v závislosti na tom, kde celková oblast zájmu leží na mřížce dlaždic). Tento rozdíl v počtu požadavků vyžaduje, aby test používal flexibilnější mechanismus pro čtení a používání dat z CSV souborů, protože to nebude konstantní.< / P >< UL >< LI >Pro každý CSV soubor (např. každé měřítko mapy) existuje jeden JSR223 sampler< UL class = "lia-list-style-type-circle"> < LI >Všechny JSR223 samplery pro čtení dat jsou umístěny do Once Only Controlleru pro minimalizaci režie< UL class = "lia-list-style-type-square"> < LI >Čtení CSV souboru bude provedeno pouze jednou, na začátku každého testovacího vlákna< / LI > < / UL > < / LI > < / UL > < / LI >< LI >Níže je zobrazen „JSR223 Sample A1“, který bude číst soubor query_extents_72224.csv< UL class = "lia-list-style-type-circle"> < LI >Zkušenosti s programováním v Groovy nejsou nutné pro spuštění tohoto testu, ve skutečnosti tyto JSR223 samplery nemusí být upravovány pro spuštění testu, ale je užitečné pochopit logiku odpovědnou za načítání dat z CSV< / LI > < / UL > < / LI > < / UL >< P >< span class = "lia-inline-image-display-wrapper lia-image-align-center" image-alt = "jmeter_hfs_datareader_logic.png" style = "width: 999px;">\nLogika výběru Operation ID\nJakmile jsou data CSV načtena, test bude muset vybrat operation id pro každé měřítko při každé iteraci testu. K tomu byla použita druhá sada JSR223 samplerů, které vybírají z každého seznamu operací.<\P>\n\n- Pro každé měřítko mapy existuje jeden JSR223 sampler, který náhodně vybírá operation id \n
\n- Všechny JSR223 samplery generující toto operation id jsou umístěny do Transaction Controller nazvaného Operation Generator\n
\n- Toto se spouští při každé iteraci testovacího vlákna\n
- Tyto JSR223 samplery nemusí být upravovány pro spuštění testu\n
\n
\n \n
\n color="#FF0000">Poznámka: JSR223 Samplery používající Groovy jsou obecně rychle vykonávány a přidávají velmi malou režii k testuSmyčka operace a naplnění parametrůS vybraným ID operace se pozornost přesouvá na logiku smyčky, kde test zjistí počet dotazů na feature služby, které tvoří transakci. Odtud použije třetí sadu JSR223 Samplerů k naplnění parametrů požadavků spojených s předchozím vybraným ID operace při každé iteraci ve smyčce. - Existuje jeden JSR223 Sampler pro každé měřítko mapy, který naplňuje příslušné proměnné JMeter na základě ID operace a hodnoty iterace
- Tyto položky se pak stanou páry klíč/hodnota, které jsou použity HTTP Requestem
- Hodnoty iterací jsou sledovány pomocí Counter Config Elementu
- Tyto JSR223 Samplery není potřeba upravovat pro spuštění testu
- Každý Loop Controller, Counter, JSR223 Sampler a HTTP Request objekt jsou umístěny uvnitř odpovídajícího Transaction Controlleru, aby logicky oddělily položky pro každé měřítko mapy
HTTP RequestV podstatě veškerá výše uvedená logika testu existuje právě pro tuto komponentu testu. Zde může JMeter HTTP Request objekt načíst proměnné JMeter pro specifické parametry klíč/hodnota, které byly naplněny JSR223 Samplerem těsně před ním.Jelikož je tento přístup vysoce programový, existuje pouze jeden HTTP Request na měřítko mapy! Takový design podporuje udržovatelnost.Poznámka: Tento přístup k testu by fungoval také pro tradiční, nehostované feature layer služby. Nicméně tyto feature služby nemají stejné optimalizace parametrů požadavků jako hosted services, například maxAllowableOffset a quantizationParameters. Tyto možnosti by bylo třeba jednoduše odstranit z HTTP Requestu.Konfigurace Thread GroupJMeter Test Plan je aktuálně nakonfigurován pro relativně krátký test trvající 10 minut. Obecně platí, že hosted feature services fungují dobře, takže během každého kroku (1 minuta na krok) i celkově bude probíhat velký průtok dat.- Různá prostředí a data mohou vyžadovat alternativní nastavení k dosažení požadovaných výsledků testu, upravte podle potřeby
Validace Test PlánuJako nejlepší praxi je vždy dobré ověřit výsledky vrácené před spuštěním skutečného zátěžového testu.- Použijte posluchač View Results Tree k asistenci při validaci
- Test Plan obsahuje View Results Tree Listener, ale je ve výchozím nastavení deaktivován
- Aktivujte jej pro zobrazení výsledků
- Z GUI spusťte test
Transakce - Vyberte jednu z "HFS" Transakcí
- Výsledky by měly vypadat následovně:
- V tomto příkladu transakce uvedené výše: HFS (mapscale: 72224), HFS (mapscale: 36112) a HFS (mapscale: 144448) všechny úspěšně dokončily úspěšně
- Výsledek sampleru uvádí další podrobnosti
- Ačkoli každá transakce odeslala jeden HTTP požadavek na rozsah dotazu feature, JMeter test počítá sampler jako součást operace
- JSR223 Samplery přidávají velmi malou režii k transakci, i když zdvojnásobují počet vzorků, což je jen detail, který je třeba mít na paměti
- Koukněte rychle na velikost v bajtech
- V tomto příkladu byla velikost transakce téměř 65KB, což naznačuje, že byla vrácena nějaká data a odpovědi nebyly "prázdné"
Požadavky- Rozbalte jednu z "HFS" Transakcí
- Vyberte jeden z https požadavků
- Výsledky by měly vypadat následovně:
- V tomto příkladu byl select request úspěšně dokončen úspěšně
- Koukněte rychle na velikost v bajtech
- V tomto příkladu byla velikost požadavku asi 5KB, což naznačuje, že byla vrácena nějaká data a odpovědi nebyly "prázdné" (např. 1500 bajtů)
- Důležitý je také ContentType
- Dle parametrů v Test Plánu je požadovaný formát pbf, který vrací application/x-protobuf
- Požadování protocol buffers je nejlepší praxe, protože optimalizuje payload
- Výsledný formát je binární a nelze jej snadno zobrazit bez další pomoci, která není pokryta v tomto článku
Poznámka: Feature služby (včetně hosted feature services) jsou renderovány na klientovi (ne na serveru jako export map). Ačkoli Apache JMeter je (testovací) klient, nerenderuje odpovědi serveru pomocí JavaScriptu jako webový prohlížeč.Spuštění testuZátěžový test by měl být spuštěn stejným způsobem jako typický JMeter Test Plan.Viz skript runMe.bat zahrnutý v projektu roads_hfs1.zip jako příklad toho, jak spustit test podle doporučení týmu Apache JMeter. - Skript runMe.bat obsahuje proměnnou jmeterbin, kterou bude třeba nastavit na odpovídající hodnotu pro vaše prostředí
Poznámka: Vždy se doporučuje koordinovat čas začátku a délku trvání zátěžového testu s příslušnými osobami. To zajistí minimální dopad na uživatele a další kolegy, kteří mohou také potřebovat používat ArcGIS Enterprise Site. Navíc to pomáhá zabránit system noise z jiné aktivity a použití, které by mohlo "znečistit" výsledky testu.JMeter ReportKřivky propustnosti (Throughput Curves)- Automaticky generovaná zpráva JMeter může poskytnout přehled o propustnosti HFS transakcí pod zatížením
- Nehostované transakce byly ručně odfiltrovány
- V tomto případě byl špičkový průtok pro HFS operace asi 16.5 transakcí za sekundu
- Protože byly tři HFS transakce, to odpovídá téměř 50 transakcím za sekundu (nebo 178 200 transakcím za hodinu)
Poznámka: Každá z HFS Transakcí bude přirozeně mít podobnou propustnost vzhledem k tomu, že jejich provedení v testu bylo stejně váženo. v tomto případě byly transakce HFS pro všechny měřítka podsekundové (méně než 1 sekunda)- I ke konci testu, při největší zátěži, byla průměrná doba odezvy pod 225 ms nebo 0,225 sekundy

Závěrečné myšlenky
Existují i jiné způsoby, jak testovat dotazy na hosted feature layer service, například pomocí zachyceného provozu z webového prohlížeče při interakci s endpointem nebo aplikací. To by vytvořilo seznam URL služeb, které by mohly být přeloženy do testu. Nicméně programatický přístup, jako je ten uvedený v tomto článku, nabízí strategii pro testování široké prostorové oblasti služby pokrývající mnohem více rozsahů, než je prakticky možné provést pomocí zachyceného provozu.
Programatický přístup je také snazší na údržbu, protože velikost Test Plan je mnohem menší. Pro představu, JMeter test obsažený v tomto článku obsahoval pouze 3 HTTP Requests (jeden pro každé mapové měřítko).
Apache JMeter uvolněný pod Apache License 2.0. Apache, Apache JMeter, JMeter, pírko Apache a logo Apache JMeter jsou ochranné známky Apache Software Foundation.