AUTOR
Pavel Lukeš
17
.
1
2014
|

Zátěžové testování webových aplikací - úvod

Zátěžové testování přináší řadu výhod a informací, které aktuálně využívá jen několik málo velkých firem. Přitom dnes je možné využívat výhod zátěžových testů pro všechny webové stránky, e-shopy i online systémy.

Zátěžové testy přestávají být nákladné, těžkopádné a nesrozumitelné. S využitím řady zkušeností z oblasti ladění výkonu systémů
i systémové architektury jsme se rozhodli vytvořit dostupný nástroj tak, aby bylo možné připravit zátěžové testy rychle a za zlomek ceny. Velký důraz byl rovněž kladen na výstupy - ty lze interpretovat jako srozumitelné informace s doporučením úprav.

A protože v zátěžovém testování vidíme opravdový přínos, pokusíme se pomocí několika článků toto téma hlouběji prozkoumat.

I. Základní rozdělení zátěžových testů

Zátěžové testování může mít mnoho podob, vždy jde ale o simulování několika současných procesů v aplikaci. Cílem je zjistit, jak bude testovaná aplikace reagovat.

Výkonnostní test (Performance Test): zatížení systému definovanou zátěží pro změření jeho chování. Používá se pro změření reakcí očekávané zátěže, nebo porovnání vlastností systému po provedené změně. Je součástí performance tunningu


Test hraniční zátěže (Load/Stress Test): zatěžování systému narůstajícím počtem paralelních procesů. Účelem je najít limit, při kterém aplikace překročí akceptovatelné požadavky.
Test odolnosti (Soak Test): jedná se o dlouhodobé testy, které odhalují nedostatky v aplikaci při jejím nepřetržitém provozu.


Test selhání (Failover Test): tímto typem testů je možné ověřit chování systému v případě jeho selhání a nahrazení záložním systémem. Také je možné ověřit rychlost jeho zotavení pokud je pod zátěží proveden restart, nebo přepojen některý ze systémů, se kterým hlavní aplikace komunikuje.


Test části infrastruktury (Targeted Infrastructure Test): test zaměřený na konkrétní úroveň infrastuktury/architektury řešení. Pomocí testu je možné zjistit, ve které části řešení je nejslabší místo. Používá se velice často u složitých systémů.


Test citlivosti sítě (Network Sensitivity Test): jedná se o performance a stress testy, které se nezaměřují na výkonnost systému, ale rychlost a spolehlivost sítě.


Test objemu dat (Volume Test): tímto typem testů dochází k ověřování chování aplikace při zvyšujícím se objemu dat (např. dopad rychlosti volání při narůstajícím objemu dat v databázi).

II. Jak zátěžové testování probíhá

Pokud test simuluje chování uživatele, je tento vygenerovaný uživatel nazýván virtuální uživatel. Naprogramovaný proces, kterým uživatel prochází se nazývá scénář. Zátěžové testování předpokládá, že vzniká mnoho současných virtuálních uživatelů, kteří procházejí vlastní scénář. Počátek provádění scénáře je ale pro každého uživatel posunut v čase. Při ukončení scénáře je zpravidla okamžitě započata nová iterace průchodu. Výsledkem je mnoho paralelních procesů simulujících reálnou zátěž, které systém čelí při stejném počtu současně pracujících reálných uživatelů.

Základem kvalitně provedeného zátěžového testu je schopnost vytvořit mnoho paralelních procesů, jejich načasování a monitorování. Proto se pro zátěžové testy používá distribuovaný výkon, který zajistí dostatečné prostředky pro hladký průchod scénářem.

"Základem kvalitně provedeného zátěžového testu je schopnost vytvořit mnoho paralelních procesů, jejich načasování a monitorování."

III. Výhody a proč zátěžově testovat

Zátěžové testování v sobě spojuje mnoho výhod současně. Mezi hlavní přínosy patří ověření, zda aplikace zvládne svůj reálný nebo očekávaný provoz. V případě rozšíření dovedností aplikace je možné zjistit, zda nedošlo úpravou k ovlivnění výkonu celého systému. Velice snadno lze ověřit jakoukoli provedenou změnu, ať už se jedná o úpravu konfigurace, nasazení nové verze komponenty nebo změny hardwaru atp. 

Zátěžové testy nejsou primárně určeny k funkčnímu testování, dokáží ale odhalit i změny v systému, vedoucí k chybovosti některého z požadavků.

V případě očekávané zvýšené návštěvnosti (například při marketingové kampani) je možné ověřit limity aplikace. Případně zjistit, jakým způsobem potřebu vyššího výkonu dočasně zajistit.

IV. Příprava na DDOS útoky

Zátěžové testy také poslouží pro zjištění, jak se bude systém chovat v případě DOS nebo DDOS útoku. Je možné otestovat softwarově nastavené limity aplikace, a ověřit, zda nedojde k ohrožení dat, hardwaru či infrastruktury systému.

Zátěžové testy také umí simulovat produkční zátěž (nebo její aproximovanou sílu) na testovacím prostředí. Díky tomu je možno vyzkoušet zapojení integrace nové aplikace nebo funkce do již fungujícího systému a ověřit tak její výkonnost.

V. Mýty a fámy

"Zátěžové testování je zdlouhavé a drahé."
Řada aplikací stále pracuje na prohlubování této pověsti. Naštěstí to již není pravda. Testy je možné připravit i během několika hodin a jejich spuštění může okamžitě následovat. 
"Zátěžový test se musí po každé změně v systému vytvářet znovu."


Je-li udělaný špatně, pak ano. Při tvorbě testu musí dojít k použití takových kontrol a korelací, které se nemění často, nebo se jejich změna snadno identifikuje. A to i zcela automaticky. 


"Zprovoznění testovací aplikace, která využívá pro generování zátěže distribuovaný výkon, je drahé a časově náročné."


Instalace takového systému je otázkou několika hodin a je potřeba mít k dispozici výkonné servery. Existují však již připravená prostředí, která je možné si pronajmout na dobu provádění testu.


"Vytvoření scénáře je drahé. Je zapotřebí znát specifické syntaxe a nástroje."


Větší firmy rády používají vlastní řešení i specifické syntaxe. Vytvoření scénáře tedy většinou vyžaduje odborné zaškolení a často i konzultace v průběhu příprav testu. Existují ale i nástroje, jejichž schopnosti je možné snadno rozšířit v oblíbeném programovacím jazyce Java. Scénář se nemusí programovat, ale je možné ho nahrát "klikáním" v prohlížeči.


"Zátěžový test je zbytečný, pokud aplikace nemá výkonové problémy, nebo se neočekává vysoká návštěvnost."


Neodhalený problém při souběhu třeba jen dvou současných požadavků může způsobit nežádoucí stavy aplikace. Na systém také může být cílen útok, nebo se může dostat pod zatížení z důvodu chyby. Je důležité ověřit, že výkon systému je ohraničen záměrně definovanými pravidly, která ochrání hardware a data. Znovuzotavení systému nebude zbytečně nákladné nebo časově náročné. Na základní ověření chování zatíženého systému, u kterého není očekávaná veliká zátěž, stačí jednoduchý scénář, který je možné vytvořit během několika minut.

VI. Základní pravidla pro použití aplikace k zátěžovému testu

  • Průběh testu sbírat a sledovat z jiného serveru, než ze kterého probíhá generování virtuálních uživatelů.
  • Generovat test z více než jednoho serveru. Pak je možné jejich chování vzájemně porovnávat a výkonové rezervy umožní hladký průběh generování zátěže. Zkreslení testu může být způsobeno výkonem procesoru, využívání operační paměti, mnoha diskových operací i přetížení síťových karet. Servery musí být výkonově totožné.
  • Všechny servery ze kterých je test spuštěn monitorovat a výsledky jejich vytížení zahrnout do výsledků testu.
  • Na jednom serveru negenerovat více uživatelů než je ověřený a nezkreslující limit. Velice důležité také je, kolik volání za vteřinu musí server vytvořit.
  • Do testu v průběhu nezasahovat, pouze ho předčasně ukončit, není-li chování testovaného systému korektní. Jakmile není možné test přesně opakovat, nebude ani možné porovnat jeho výsledky s jiným během.
  • Z testu generovat kompletní a jednotný report tak, aby byl snadno porovnatelný s jiným během stejného testu.
  • K reportu ukládat i celý test, aby bylo možné ho později pustit v totožné podobě.

Všechna výše uvedená pravidla jsou automaticky dodržena u kvalitních testovacích aplikacích, nezvyšují tedy náklady na provedení testu, ani jeho časovou náročnost

VII. Nejčastěji odhalené problémy

Problémy, které se daří odhalovat pomocí zátěžových testů jsou vždy charakteristické pro konkrétní systém, jeho účel a technologie na kterých je postaven.

Nejčastěji se testy provádějí pro webové aplikace a jsou proto připraveny tak, aby došlo k rychlému otestování nejčastějších problémů. První úroveň je v propustnosti sítě. Webové stránky obsahují řadu statických zdrojů, které si prohlížeč stahuje. Tím dochází k přesunu velikých objemů dat. Mnoho těchto zdrojů je ale staženo pouze jednou za určitý čas. S tím musí umět test pracovat.

Další testy se specializují na ověření počtu sessions, které dokáže aplikace vytvořit. Velice často je problém přímo ve výkonu aplikace. Problém bývá v nehospodárném zacházení se zdroji, nedokonalém kódu či využitých algoritmech. Často se pro rychlou opravu přidá více výkonu. Toto řešení ale zpravidla nepřinese očekávaný výsledek. Omezení může být ve vnitřních strukturách aplikace, sdílených součástí řešení nebo síťové propustnosti. Podle dlouhodobých zkušeností je první slabé nalezené místo snadno odstranitelné a již během několika hodin je možné systém i mnohonásobně zrychlit.

Při systematickém provádění zátěžových testů je pak zajištěno, že nedojde k nasazení nevhodné úpravy, která by mohla způsobit nestabilitu nebo pád systému.

VIII. Závěr

Díky zátěžovým testům budete znát limity a reakce svého systému. Pomohou vám systematicky dohlížet na kvalitu dodávek i změn. Na základě odhalení a optimalizace slabých míst je možné posunout možnosti systému. Zároveň ušetřit na jeho provozu. Vyhněte se nečekaným překvapením při testování na reálných uživatelích. Připravte systém na růst návštěvnosti a vašeho online businessu. Vyzkoušejte zátěžové testy a jejich rychlý přínos pro spolehlivý a hladký chod vašeho systému a spokojenosti jeho uživatelů.

Autor: Pavel Lukeš
LinkedIn: http://www.linkedin.com/in/pavellukes

Přečti si taky