Porovnání služeb nabízející zátěžové testování | Etnetera
Menu

Porovnání služeb nabízející zátěžové testování

V posledních letech jsme věnovali velkou pozornost softwarovým aplikacím pro zátěžové testování. Na několika reálných projektech jsme je měli možnost vyzkoušet a zjistit tak jejich silné i slabé stránky. Ty nejzajímavější poznatky naleznete v následujícím článku.

V předchozím článku zabývajícím se úvodem do zátěžového testování jsme se snažili alespoň lehce nastínit, jak zátěžové testy probíhají. Dnes se podíváme na čtyři aplikace, se kterými máme zkušenost z praxe. A pomocí kterých lze zátěžově testovat.

Pro zátěžové testování jsou zásadní 4 kroky:

Tvorba scénáře

  • přenést požadavky do „jazyka" nástroje
  • úprava systému může vyžadovat úpravu scénáře

Nastavení testu

  • definice množství uživatelů v čase testu
  • řada specifických nastavení (randomizace čekání, rychlost stahování response...)

Vykonání testu

  • musíme spustit řadu pomocných programů
  • sledování aktuálních informací z průběhu testu

Srozumitelně zobrazit výsledek

  • generovat reporty
  • zobrazit tabulkové i grafické znázornění výsledků

Aplikací pro zátěžové testování je spousta. Každá z nich musí obsahovat řadu funkcí, aby ji bylo možné pro test použít. Popsat kompletně všechny vlastnosti jen jedné aplikace by vystačilo na samostatný článek. Pokusíme se tedy popsat hlavní vlastnosti aplikací se kterými máme zkušenosti. Mezi tyto aplikace patří hlavně JMeter a Loadrunner. Zásadním rozdílem je jejich pořizovací cena.

JMeter

Velice rozšířená aplikace, která je v podobě open source k dispozici zdarma. Existuje pro ní mnoho zajímavých rozšíření. Mezi nejpoužívanější patří určitě sada pluginů

Pro nahrávání scénáře je v JMeteru speciální komponenta, která funguje jako proxy server. Její adresa a port se nastaví v internetovém prohlížeči jako proxy, přes kterou dojde k nahrání všech požadavků. Je-li ale samotná webová aplikace za proxy, začne se nastavování komplikovat. Z nahraných požadavků je možné sestavit kompletní scénář. Ve stromové struktuře, představující jednotlivé komponenty a kroky testu, je možné definovat doby prodlevy, načítat a transformovat informace ze získaných response nebo jiných datových souborů. 

Vytvořený je v programovacím jazyce Java. Jeho dovednosti lze snadno rozšířit pomocí pluginů a komponent, které se také vytvářejí v tomto programovacím jazyce. Díky tomu je možné sestavit i velice složité scénáře, které pracují s mnoha daty a vyžadují specifické konverze nebo korelace pro vytváření funkčních requestů. Řada funkcí JMeteru je připravena tak, aby bylo možné je snadno rozšířit nebo zcela nahradit vlastní implementací. 

Umožňuje spustit test přímo v GUI rozhraní, nebo z příkazové řádky. Vykreslování grafů nebo tabulek v GUI často bere mnoho výpočetního výkonu, který pak chybí při vytváření zátěže a tak může dojít ke zkreslení výsledků. Spuštění testu v konzoli je z tohoto pohledu výhodnější, nabízí tabulku statistik jednotlivých volání, ale postrádá ostatní informace. 

JMeter je možné provozovat v ditribuovaném módu. Dokonce existuje několik možných způsobů, jak mezi sebou Controller s Generátory komunikují. Varianty jsou kompromisem mezi množstvím přesouvaných informací a jejich aktuálností. 

Obsahuje mnoho komponent, které dokáží testovat celou řadu rozhraní, zdaleka se nejedná o nástroj pouze pro testy webových aplikací. Velice vhodný je i pro testování webových služeb nebo databází. 

JMeter má však řadu svých limitů. Nahrávání testu včetně statických zdrojů vytvoří mnoho prvků, které jsou nepřehledné a jejich množství pak klade veliké nároky pro uložení do operační paměti, kde je scénář uložen zvlášť pro každého virtuálního uživatele. U složitějších scénářů dochází k vyčerpání i několika GB paměti pro pár stovek uživatelů. 

Mnoho komponent vyžaduje vysoký výpočetní výkon. Pro příklad
Má-li dojít k ověření, že proběhlo vložení zboží do košíku, musí být ve stránce košíku nalezen text, který odpovídá názvu vloženého zboží. JMeter pro tyto operace používá asserty, které umožní hledání zadaného řetězce. Celý response stránky je uložen jako pole bytů. JMeter ho podle kódování stránky přetrasforumuje na String, ten uloží do paměti, aby tuto velice náročnou operaci provedl s každým response jen jednou. Na celý String pak aplikuje vyhledávání zadaného textu. Pokud nenásleduje další assert nebo post procesor (získání informace ze stránky), může převedený text z paměti smazat. Je jasné, že takovýto způsob práce s největšími daty, které test obsahuje vyžaduje veliké nároky na paměť i procesor. Pokud má být test udělaný kvalitně, musí dojít k ověření informací na každé stránce, což je ale u větších scénářů výkonově tak náročné, že by takový test nebylo možné pod více virtuálními uživateli spustit.

JMeter je rozhodně vhodný pro jednodušší scénáře a řádově stovky virtuálních uživatelů. Jeho distribuovaný mód umožní spustit test ve větším počtu uživatelů, ale nenabízí větší komfort. Buďto je test zkreslen značnou komunikací mezi Controllerem a Generátory, nebo jsou informace o průběhu k dispozici až po testu, nebo v podobě souhrnných statistik. Každý listener, neboli komponenta poskytující informace o průběhu testu, je v distribuovaném módu velikou výkonovou přítěží, protože vytváří vlastní komunikační kanál mezi Generátory a Controllerem. 

Během testu není možné přidávat grafy a ani možnosti získávání reportů nejsou ideální. JMeter také neposkytuje datový server pro poskytování informací generátorům v distribuovaném módu.
 

Silné stránky

  • Zdarma
  • Mnoho návodů, tutorialů a rad v diskuzních fórech
  • Snadná rozšířitelnost
  • Mnoho komponent
  • Zdarma dostupné pluginy

Slabé stánky

  • Malý počet virtuálních uživatelů
  • Nedotažený distribuovaný mód
  • Nepřehledný scénář po nahrání přes proxy
  • Výkonově náročné komponenty
  • Test běžící v prostředí Javy je náročnější na využití paměti
  • Neumožňuje v průběhu testu manuální změnu počtu generovaných uživatelů

BlazeMeter

BlazeMeter je poměrně zajímavá služba nabízející load do západní Evropy (generování probíhá z Irska). Jedná se o cloudové řešení, které je plně kompatibilní s testy připravenými v JMeteru. Tato služba nabízí i velice pěkné rozšíření do prohlížeče Google Chrome, které umožňuje nahrávání požadavků mezi prohlížečem a webem. Je tedy možné si vytvořit testovací scénář přímo v prohlížeči bez nastavování proxy. Testování z cloudu má své omezení. Není například možné testovat aplikaci, která není dostupná z internetu (testovací prostředí v rámci firmy atp). Na druhou stranu není potřeba nic instalovat a připravovat. Stačí pouze připravit test a zaplatit poplatek za jeho provedení. 

Silné stránky

  • Kompatibilita s testy v JMeteru
  • Zprovozněné prostředí, které je přehledné a obsahuje mnoho možností jak test připravit i spustit

Slabé stránky

  • Load ze vzdálené lokality může být omezen latencí
  • Testovaný systém musí být přístupný z internetu
  • Odevzdání testovacích dat, jako jsou uživatelské přístupy atp.
  • Platby za test obsahují omezení za minimální počet testů, i v případě že jich stačí méně

Loadrunner

Loadrunner je velice rozsáhlý a komplexní systém. Skládá se z několika programů, které poskytují plnou podporu celého cyklu zátěžového testu. Každý z programů obsahuje řadu možností a nastavení. 

Nahrávání scénáře se provádí v programu VUgen, který spustí prohlížeč a nahrává všechny požadavky. Každé kliknutí je možné si uzavřít do transakce, a tím ho měřit jako celek. Díky tomu jsou výsledky přehledné

Zpracování testu se provádí ve stromové struktuře, která připomíná zobrazení testu v JMeteru, nebo psaním kódu v jazyce C (nejrozšířenější a nejspolehlivější způsob, ale ne jediný), kde je k dispozici řada specifických loadrunner metod. Pro rozšíření funkcí Loadrunneru je možné napsat knihovnu v jazyce C++ a její metody využívat. 

Loadrunner využívá distribuovaný výkon. Po vytvoření scénáře ve VUGen je v programu Controller nastaven průběh celého testu. Nastaveny jednotlivé generátory, na které je možné přidělit počty uživatelů několika scénářů najednou. Je možné definovat sledované SLA, a to velice podrobě, ne jen na souhrnný výsledek, ale i na menší časové úseky testu. Výsledky hodnocení SLA je možné přehledně zobrazit v reportu. 

Po spuštění testu je k dispozici mnoho grafů a statistik, které je možné přidávat a jejich zobrazení měnit. Také je možné vkládat více grafů do sebe a sledovat tak několik metrik najednou. 

Po testu dojde ke stažení logů ze všech generátorů do Controlleru. Nad logy je následně možné spustit analýzu. K této činnosti slouží program Analysis, který nabízí vytváření šablon reportů, exportování do různých formátů, ořezání času průběhu testu atd. Možností je doopravdy celá řada. 

Pro poskytování dat všem generátorům slouží aplikace VTS. Do této aplikace je možné nahrát data například z csv souboru. Aplikace běží v jedné instanci, takže je zajištěno, že se neobjeví stejná hodnota ve více generátorech najednou. Díky tomu je zabezpečeno, že se uživatel nepřihlásí z více generátorů současně atp. Do VTS je také možné data během testu sbírat a poté exportovat do csv souboru nebo databáze. 

Silné stránky

  • Doopravdy velice komplexní, mnoho možností a detailních nastavení
  • Napojení na řadu monitorovacích systémů
  • Pojmenování transakcí při nahrávání scénáře
  • Výkonný nástroj, který umožní generovat tisíce virtuálních uživatelů
  • Porovnání současných požadavků a jejich výsledků s obdobím vytváření testu
  • Mnoho možnosti při tvorbě reportů a jejich šablon

Slabé stránky

  • Cena
  • Mnoho možností vyžaduje velice dobré zaškolení
  • Příprava nebo úprava složitého scénáře je z důvodu specifických příkazů a potřeby vytvářet C++ knihovny časově náročná
  • I přes vysokou cenu občas nestabilní a chybující

Loadrunner v cloudu

Podobně jako BlazeMeter nabízí prostředí pro spouštění testů JMeteru, i pro testy Loadrunneru je možné pronajmout cloudové prostředí. Více informací o této službě, lokalitách a cenách je na stránkách výrobce Loadrunneru, firmy HP.

SmartMeter

SmartMeter je (podobně jako Loadrunner) sada více aplikací, které slouží ke spolehlivému zátěžovému testování. 
První aplikací je Recorder. Jedná se o aplikaci, která společně s pluginem do prohlížeče Google Chrome umožňuje nahrávat testy. Každé kliknutí je možné si pojmenovat, podobně jako při vytváření testu v Loadrunneru, a pracovat i měřit ho jako celek. Během nahrávání scénáře je možné vkládat i prodlevy mezi požadavky. Recorder odděluje požadavky na statické zdroje, pro které používá vlastní způsob zpracování, který nevyžaduje paměť pro vytvoření scénáře. Po ukončení nahrávání je vygenerován JMeter test. 

Dále SmartMeter obsahuje rozšířený JMeter, který je upraven pro spolehlivé provozování v distribuovaném módu. Obsahuje vlastní systém pro komunikaci mezi Controllerem a Generátory, a také jejich vzájemné monitorování, jehož výsledky se automaticky přidávají do výsledného reportu. SmartMeter listenery, tedy komponenty poskytující informace o průběhu testu nezatěžují generátory, ani jejich komunikaci s Controllerem, díky čemuž je možné během testu sledovat všechna důležitá data. Během testu je možné přidávat grafy a dochází k neustálému zobrazení doby času testu. 

K dispozici je celá řada vlastních komponent, některé obsahují výkonově optimalizovaný přístup nebo nabízejí nové funkce. Pro kontrolu nebo nalezení hodnoty v response nepřevádí a neukládá data znovu do paměti. 

SmartMeter umožňuje nadefinovat programy nebo volání, které se mají spustit před počátkem distribuovaného testu a také programy, které se mají po testu ukončit nebo příkazy, které se mají provést. 

Další aplikací je DataServer, který poskytuje generátorům v distribuovaném módu data, podobně jako VTS u programu Loadrunner. Před spuštěním testu je možné automaticky naplnit DataServer daty a během testu do něj data ukládat a exportovat. DataServer umožňuje různé nastavení pro jednotlivé fronty dat, které jsou v něm uloženy. 

Po provedení testu jsou staženy kompletní logy z generátorů na Controller, a je možné vytvořit report, obsahující statistiky, grafy a další hodnoty z průběhu testu. Šablonu pro vygenerování reportu je možné snadno změnit

SmartMeter umožňuje během distribuovaného testu spustit Selenium test a paralelně testovat reálnou odezvu přímo v internetovém prohlížeči. Výsledné změřené hodnoty pak přidat do vygenerovaného reportu. Při generování reportu dochází automaticky k záloze logů i samotného spuštěného testu, vygenerování souborů obsahujících chybující stránky. Vše je uloženo na jednom místě, je tedy jednoduché výsledky analyzovat, porovnávat nebo test opakovat. 

Silné stránky

  • Snadná rozšířitelnost
  • Pro vytváření a úpravy testu využívá prostředí JMeteru
  • Plně kompatibilní s testy JMeteru
  • Během testu monitoruje prostředí a informace o vytížení přidává do reportu
  • Snadné generování reportu
  • Snadné vytváření testu, bez potřeby nastavovat proxy
  • Pojmenování transakcí při nahrávání scénáře
  • Výkonný nástroj, který umožní generovat tisíce současných uživatelů
  • Během testu je možné přidávat grafy
  • Automatické startování a ukončování programů před a po testu

Slabé stránky

  • Test běžící v prostředí Javy je náročnější na využití paměti
  • Neumožňuje v průběhu testu manuální změnu počtu generovaných uživatelů
  • Neumožňuje nerovnoměrné rozložení uživatelů na generátory

SmartMeter v Cloudu

I testy SmartMeteru je možné spouštět z již vytvořeného cloudového prostředí.

Pojmy

DataServer: Program který testu (i v distribuovaném módu) poskytuje data. Data umožňuje i sbírat, prohlížet a exportovat.
Controller: Hlavní program, který slouží k nastavení testu, sledování průběhu testu a komunikaci s generátory.
Generator: Server který generuje virtuální uživatele, měřené výsledky zasílá na Controller. V distribuovaném testu je více Generátorů
Aplikace VTS: Virtual Table Server - Funguje podobně jako DataServer, poskytuje testu data a dokáže data z testu sbírat
Distribuovaný mód: V distribuovaném módu není zátěž generována z jedné instance programu, ale z více serverů. Díky tomu dochází k vytvoření celého prostředí, kde z Controlleru, tedy programu který běží v jedné instanci, ovládám všechny servery Generátorů najedou. Díky distribuovaném módu jsme schopni vytvořit desítky tisíc paralelních virtuálních uživatelů a vše pohodlně sledovat na Controlleru, kde běží řídící a monitorovací program.
Response: Zpráva, která se vrátila jako výsledek požadavku (requestu). U testu webových stránek se jedná o vrácenou stránku, soubor nebo i další možná data. K samotnému obsahu bývá vrácena i hlavička, která nese další informace ze serveru. Například velikost a typ zprávy, informace o cookies, komunikačních možnostech atp.

Podrobnější porovnání aplikací zátěžového testování naleznete v přehledné tabulce.