Locust: jak na zátěžové testy webu rychle a snadno

Při spuštění webu byste měli otestovat, jak zvládá zátěž spojenou s příchodem většího množství uživatelů. Tohle je zcela jiná metrika než rychlost načítání jako taková. Zátěžové testy dovede celá řada nástrojů. Rád bych vám představil bezplatný open source nástroj Locust, se kterým otestujete nejenom načítání stránek, ale i přihlašování a odesílání formulářů.

Řekl bych, že jde v současné době o poměrně aktuální téma. Weby poliklinik, nemocnic nebo informační weby o nemoci čelí vyššímu náporu návštěvníků než jindy. Ale vezměme to obecně. Váš web může mít vyšší návštěvnost z různých důvodů.

Stačí spustit velmi úspěšnou PPC kampaň. Mít sezónní zboží nebo nabídku služeb. Mít v blogu článek týkající se nějakého tématu, které se stane aktuální. Nebo o nějakém místě, které najednou začne lidi zajímat.

Zkrátka důvodů, proč mít povědomí o tom, jakou nárazovou návštěvnost váš web utáhne, je celá řada. Zátěžové testy vám také řeknou, jestli náhodou ten skvělý hosting, kde web běhá s výborným hodnocením rychlosti načítání, nevracejí při větší zátěži zvýšený počet chyb 500 místo zobrazení webu.

Nástrojů na zátěžové testování webu je celá řada. Já jsem dost používal Apache Benchmark. Na příkazovém řádku napíšete ab následované parametry s počtem souběžných spojení, celkového počtu návštěvníků a adresou webu. Spustíte a počkáte na výsledek měření.

Avšak netuším, zda lze s pomocí ab otestovat i odesílání formulářů. A určitě pohodlně neotestujete celou sadu stránek v rámci jednoho webu.

Proto se mi líbí nástroj Locust. Tohle všechno umí a nabízí k tomu jednoduchou konfiguraci a uživatelsky přívětivé zobrazení výsledků.

Locust - aplikace na load testing

Locust: open source měření zátěže webu v Pythonu

Co jsem slyšel od kolegů, Locust se řadě lidí líbí především díky snadné konfiguraci. Nemusíte popisovat nějaký rozsáhlý konfigurační soubor s parametry, ale stačí vám kousek skriptu v Pythonu. Jasně, ne každý Pythonem vládne. Ale zde je to tak jednoduché, že nad základy ani nemusíte přemýšlet.

Kdybych měl vyzdvihnout základní vlastnosti provádění load testu přes Locust:

  • Jednoduchá konfigurace v Pythonu
  • Můžete mít připravenu celou řadu skriptů
  • Specifikujete více stránek na webu a jejich poměr v celkové návštěvnosti
  • Můžete odesílat formuláře – přihlašování i nákupní košíky
  • Výsledky vidíte v přehledné tabulce a grafech ve webovém prohlížeči

Podle informací na webu aplikace Locust používá například Microsoft, Mozilla, Zalando nebo Intel. To je pěkné doporučení.

Jak to funguje?

  1. Do Python skriptu definujete seznam stránek, jejich poměr v celkovém balíku návštěvnosti a případná odesílání formulářů. Přidáte prodlevu pro nečinnost uživatele, než načte další stránku, a to intervalem od do.
  2. Spustíte Locust, který vytvoří lokální URL adresu. Otevřete ji v prohlížeči, zadáte adresu webu a počet návštěvníků.
  3. Potom jen sledujete průběh načítání webu, průměrnou rychlost servírování stránek, graf s ukazatelem vývoje hodnot v čase a přehled případných chyb při načítání.

Základní konfigurace load testu krok za krokem

Přestože má Locust hezky zpracovanou dokumentaci, určitě oceníte, když první zátěžový test vyzkoušíme spolu.

Po pravdě řečeno, více než nastavení Locustu mi dala zabrat jeho instalace. Potřebujete mít v systému Python a instalátor pip. Vše rozběhnete docela jednoduše na Macu i ve Windows. Horší je, pokud máte instalaci zaneřáděnou různými pokusy. Pak vám jednoduchý instalační příkaz pip install locustio nemusí proběhnout na první dobrou.

Připravte si nějaký editor se zvýrazňováním syntaxe, který umí Python. Není to tedy nezbytně nutné, ale uvidíte případné chyby a překlepy, kterých se dopustíte:

Výše uvedené platí jen pro opravdu jednoduchý web s několika stránkami, kde se toho moc nemění. Locust vám pomůže i ve složitějších případech, kdy je potřeba zkoumat odesílání formulářů.

Samozřejmě si můžete připravit více konfiguračních souborů i v jedné složce. Pokud chcete specifikovat, který z nich má Locust použít, zadáte příkaz pro jeho spuštění ve tvaru locust -f nazevsouboru.py.

Slíbená ukázka konfiguračního souboru:

from locust import HttpLocust, TaskSet, between

def oznaceni_stranky(l):
    l.client.get("/adresa-stranky-bez-domeny")

def oznaceni_jine_stranky(l):
    l.client.get("/adresa-jine-stranky")   

class UserBehavior(TaskSet):
    tasks = {oznaceni_stranky: 2, oznaceni_jine_stranky: 1}

class WebsiteUser(HttpLocust):
    task_set = UserBehavior
    wait_time = between(5.0, 9.0)

Celá aplikace se hodí i pro zátěžové testování začleněné do CI. Testy lze spouštět i bez výstupu do webového rozhraní a samozřejmě integrovat v Dockeru. Více najdete v dokumentaci na webu locust.io.

Buďme ve spojení, přihlaste se k newsletteru

Odesláním formuláře souhlasíte s podmínkami zpracováním osobních údajů. 
Více informací v Ochrana osobních údajů.

Autor článku: Jan Polzer

Tvůrce webů z Brna se specializací na Drupal, WordPress a Symfony. Acquia Certified Developer & Site Builder. Autor několika knih o Drupalu.
Web Development Director v Lesensky.cz. Ve volných chvílích podnikám výlety na souši i po vodě. Více se dozvíte na polzer.cz a mém LinkedIn profilu.

Komentáře k článku

návštěvník

Děkuji za tip vypadá to hodně zajímavě, jen přemýšlím, jestli to spouští i Javascript?

Přidat komentář

Odesláním komentáře souhlasíte s podmínkami Ochrany osobních údajů

reklama
Moje kniha o CMS Drupal

 

Kniha 333 tipů a triků pro Drupal 9


Více na KnihyPolzer.cz

Sledujte Maxiorla na Facebooku

Maxiorel na Facebooku

Hosting pro Drupal a WordPress

Hledáte český webhosting vhodný nejenom pro redakční systém Drupal? Tak vyzkoušejte Webhosting C4 za 1200 Kč na rok s doménou v ceně, 20 GB prostoru a automatické navyšováním o 2 GB každý rok. Podrobnosti zde.

@maxiorel na Twitteru

Maxiorel na Twitteru