Hány látogatót tud kiszolgálni a webáruházad?

A teljesítmény tesztelés (performance testing vagy röviden PET) során azt vizsgáljuk, hogy az alkalmazásunk – a mi esetünkben szinte mindig egy Magento webáruház – mennyire terhelhető. A vizsgálat végén a kapott adatok alapján kimutatásokat készítünk és tanácsokat adunk arra nézve, hogy a tesztelt alkalmazás mely pilléreit (szoftver, hardver, egyéb) kell megerősítenünk abban, hogy még jobban terhelhető, optimálisabb teljesítményű legyen.

Mi is az a teljesítmény tesztelés?

Az ISTBQ (International Software Testing and Qualification Board) szerint a teljesítmény tesztelés nem más, mint a “Tesztelési folyamat, mellyel a szoftvertermék teljesítményét lehet meghatározni.”

Wikipédia szerint: Tesztelési folyamat, amely meghatározza, hogy milyen gyors a rendszer egy bizonyos szempontból, adott terhelés alatt. Ezenkívül validálhat és verifikálhat más minőségi tényezőket is, mint skálázhatóságot, megbízhatóságot vagy forrás kihasználtságot.

Tehát egy olyan nem funkcionális tesztelési folyamat, amely az alkalmazás (szoftver, azaz Magento webáruház) teljesítményével foglalkozik és a fejlesztés teljes szakaszában használható a problémák felfedésére és megelőzésére.

Szerintem a Wikipédia megállapítása áll legközelebb a meghatározáshoz, azonban pontos definíciót adni, mint sok más esetben, úgy itt sem lehet.

Miért van szükséged teljesítmény tesztelésre?

Az internet térhódításával egyre többen élnek az online vásárlás lehetőségével, így egyre többen érik el a webáruházakat is. Manapság már az emberek többsége – ahelyett, hogy a boltba menne és kipróbálná a terméket az eladótól segítséget kérve – már szinte igazi szakértőként összehasonlít, vizsgál, keresgél a világ minden webáruházának termékeiből, hogy számára a legmegfelelőbbet találja meg. Egy ünnep vagy nagy akció (mint például a Karácsony vagy a Fekete Péntek) közeledtével pedig a boltok helyett a web világában rohanják meg a vásárlók áruházunkat.

Ezeket a megnövekedett terheléseket vagy a folyamatos, erős forgalmat áruházunknak ki kell szolgálnia, ezért is szükséges a teljesítmény tesztelése.

A webáruházat több komponens alkotja, van szoftveres, hardveres és hálózati keresztmetszet része is, melyek további szegmensekre bonthatók egészen a használt keretrendszer, a szerver processzorának teljesítménye vagy a letöltött oldal kódjának adat mennyiségéig. Ha ezekre nem figyelünk oda, akkor egy-egy kiugró terhelés esetén a webáruházunk lelassulhat, elérhetetlenné válhat vagy a legrosszabb esetben teljesen össze is omolhat.

 

A TELJESÍTMÉNY TESZTELÉS FAJTÁI

Az alábbi felsorolásban ismerjük meg a releváns teljesítmény tesztelés fajtáit, a teljesség igénye nélkül, kiemelve a webáruházakon alkalmazott legfontosabb teszteléseket. Részletesebb információért a Wikipédia szoftver tesztelés leírását tudom ajánlani.

1. Terheléses tesztelés (Load testing): A legegyszerűbb teszt, mivel itt azt verifikáljuk, hogy az alkalmazás hogyan viselkedik normális vagy magasabb terhelés alatt, változik-e a viselkedése mindeközben.

   a) Tűrőképesség teszt (Endurance testing): Hosszabb ideig tartó, folyamatos terhelés mellett vizsgálja a rendszer működését, így az egy-két órás tesztek alatt rejtve maradó problémákat az akár több napos teszt segíthet a felszínre hozni.

2. Stressz tesztelés (Stress testing): Ideális esetben arra használjuk, hogy megismerjük a rendszer felső határait, a töréspontokat. Ez a teszt típus kész meghatározni a rendszer robusztusságát extrém terhelés közben, és segíti az adminisztrátorokat, hogy meghatározzák a rendszer ideális működési tartományát és maximumát.

   a) Kapacitás teszt (Capacity testing): A Stressz tesztelés folyamán megállapítjuk, hogy mennyi felhasználót / lekérdezést / műveletet tud egyszerre végrehajtani hibamentesen a rendszer.

3. Kitartás tesztelés (Soak testing): A normális működést szimulálva a kitartás teszt egy olyan működés, ami képes meghatározni, hogy a folyamatos használati terhelését mennyire bírja a rendszer. A teszt alatt folyamatosan figyelni kell a memóriát és ezzel felderíthetők a memória szivárgási problémák.

4. Tüske tesztelés (Spike testing): Hirtelen megugrott terhelést adunk a rendszernek, majd ezt ugyanilyen hirtelen lecsökkentjük. Ez a gyors változtatás „tüskeként” jelenik meg a rendszer terhelésének grafikonjában, innen kapta a teszt a nevét.

5. Konfigurációs tesztelés (Configuration testing): Felmerülhet a kérdés, hogy ez a teszt mit keres a teljesítmény tesztek között. Mivel ez a teszt azt vizsgálja, hogy a konfigurációs beállítások megváltoztatásával milyen hatással van a rendszer részeire vagy egészére, elsősorban a teljesítményére, ezért az itteni említése jogos.

6. Izolációs tesztelés (Isolation testing): A teljesítmény tesztelésnek nem egy egyedi típusáról van szó, inkább egy ismétlődő tesztelésről, ami fényt derít egy rendszerproblémára. A tesztek gyakran külön környezetekbe izoláltak és a teszt eredményeként csak a hibás környezetet kapjuk eredményül.

Teljesítmény tesztelés fajtái

A tesztelés lépései

  1. Tesztkörnyezet meghatározása (létrehozása, kialakítása)
  2. Eredmények kiértékelése, riportok készítése, újrafuttatás
  3. Tesztek futtatás
  4. Tesztek implementálása
  5. Tesztkörnyezet konfigurálása (adatfeltöltés, paraméterek beállítása)
  6. Teszt(ek) megtervezése (tesztelési forgatókönyv megírása)
  7. Elfogadási kritérium(ok) meghatározása

Tsunami IDX

Tsung (IDX-Tsunami 1.6.0)

A Tsung egy megosztott terheléses teszt eszköz. Protokoll függő és jelenleg a következő protokollal kommunikáló szervereken futtatható:

 A Tsung fő erőssége, hogy képes szimulálni egyetlen gépről nagy mennyiségű felhasználót. Ha több gépen (klaszter) használjuk, akkor pedig igazán lenyűgöző teljesítményt tud produkálni, mindezt könnyen konfigurálhatjuk és fenntarthatjuk.

Tsunami IDX működése

Jellemzők

  • Magas teljesítmény
  • Elosztott működés
  • Több protokoll támogatás
  • SSL támogatás
  • Különböző IP címek kiosztása azonos gépről
  • Operációs rendszer monitorozása a tesztelés alatt
  • XML konfigurációs rendszer
  • Dinamikus forgatókönyvek (tranzakciók)
  • Kevert viselkedés a felhasználóknak (munkamenetek)
  • Sztohasztikus feldolgozás (thinktime)

 

Mi az az Erlang és miért fontos?

A Tsung-ot Erlang nyelven fejlesztették és ez az, ami olyan erőssé teszi, mivel az Erlang egy párhuzamosság-orinetált programozási nyelv (concurrent programming). Az Erlang OTP (Open Transaction Platform) képezi a Tsung alapját, ami így a következő főbb jellemzőkkel ruházza fel:  

  • Teljesítmény
  • Hibatűrő képesség
  • Skálázhatóság

 

Protokollok és teljesítmény

A Tsung nagy teljesítményre képes, ha a megfelelő hátteret biztosítjuk a számára. Számokban ez az alábbiakat jelenti:  

  • Jabber/XMPP protokoll:
    • 90,000 szimulált JABBER felhasználó egy 4-es Tsung klaszteren.
    • 10,000 szimulált felhasználó: Tsung 3 számítógépből (800MHz-es CPU) álló klaszteren.

 

  • HTTP és HTTPS protokoll:
    • 12,000 szimulált felhasználó: Tsung 4 számítógépből álló klaszteren (2003) 3000 lekérés/másodperc
    • 10,000,000 szimulált felhasználó: Tsung 75 számítógépből álló klaszteren több, mint 1,000,000 lekérés/másodperc

 

A Tsung használata

A Tsung teljesítmény tesztelés végrehajtásához először is fel kell telepítenünk azt a szerverünkre, melyhez az Amazon EC2 – Virtual Server Hosting szolgáltatása az egyik legkézenfekvőbb és kényelmes szolgáltatás.

 

A Tsung telepítése

A Tsung telepítését kísérjük most végig lépésről lépésre, hogy mindenki számára könnyen érthető legyen. A VPS szerver konfiguráció, amire telepítésre kerül, a következő:

  • CentOS 6.7 opercáiós rendszer
  • Tárhely: 10 GB HDD
  • Memória: 3 GB
  • CPU: 8 magos (Intel(R) Xeon(R) CPU E5-2630 v2 @ 2.60GHz)

 

1. Első lépésként az Erlang-ot kell telepíteni, valamint a Firefox-ot is, mivel azon keresztül történik a jelentések generálása (és megnyitása, ha GUI-t használunk).

 > yum -y install erlang perl perl-RRD-Simple.noarch perl-Log-Log4perl-RRDs.noarch gnuplot perl-Template-Toolkit firefox

 

2. Ezt követően töltsük le a Tsung-ot és installáljuk:

 > wget http://tsung.erlang-projects.org/dist/tsung-1.6.0.tar.gz 
 > tar zxfv tsung-1.6.0.tar.gz
 > cd tsung-1.6.0
 > ./configure && make && make install

 

3. A Tsung jelentés elkészítésének parancsára hozzunk létre egy pre-set parancsot (alias command) a könnyebb használat érdekében (vim használatával):

> vim ~/.bashrc vim
> alias treport="/usr/lib/tsung/bin/tsung_stats.pl; firefox report.html"
> vim > :w
> vim > :q
> source ~/.bashrc

 

4. Készítsük elő az első felhasználáshoz a Tsungot (opcionális):

 > cd /root/
 > mkdir .tsung
 > cd ..
 > cp /usr/share/doc/tsung/examples/http_simple.xml /root/.tsung/tsung.xml

 

A Tsung konfigurálása (/root/.tsung/tsung.xml)

A Tsung XML konfigurációs állományának első szintje meglehetősen kötött, azonban a munkamenetek és a tranzakciók használatával jól irányíthatóak a folyamatok és a monitorozás. Nézzük meg példának az examples/http_simple.xml állományt:

<?xml version="1.0"?>
<!DOCTYPE tsung SYSTEM "/usr/share/tsung/tsung-1.0.dtd">
<tsung loglevel="notice" version="1.0">

    <!-- Client side setup -->
    <clients>
        <client host="localhost" use_controller_vm="true"/>
    </clients>

    <!-- Server side setup -->
    <servers>
        <server host="195.56.150.103" port="80" type="tcp"></server>
    </servers>

    <!-- to start os monitoring (cpu, network, memory) -->
    <monitoring>
        <monitor host="195.56.150.103" type="snmp"></monitor>
    </monitoring>

    <load>
        <!-- several arrival phases can be set: for each phase, you can set
        the mean inter-arrival time between new clients and the phase
        duration -->
        <arrivalphase phase="1" duration="10" unit="minute">
            <users interarrival="2" unit="second"></users>
        </arrivalphase>
    </load>

    <options>
        <option type="ts_http" name="user_agent">
            <user_agent probability="80">Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.7.8) Gecko/20050513 Galeon/1.3.21</user_agent>
            <user_agent probability="20">Mozilla/5.0 (Windows; U; Windows NT 5.2; fr-FR; rv:1.7.8) Gecko/20050511 Firefox/1.0.4</user_agent>
        </option>
    </options>

    <!-- start a session for a http user. the probability is the
    frequency of this type os session. The sum of all session's
    probabilities must be 100 -->

    <sessions>
        <session name="http-example" probability="100" type="ts_http">

            <!-- full url with server name, this overrides the "server" config value -->
            <request>
                <http url="/" method="GET" version="1.1"></http>
            </request>
            <request>
                <http url="/images/accueil1.gif" method="GET" version="1.1" if_modified_since="Fri, 14 Nov 2003 02:43:31 GMT"></http>
            </request>
            <request>
                <http url="/images/accueil2.gif" method="GET" version="1.1" if_modified_since="Fri, 14 Nov 2003 02:43:31 GMT"></http>
            </request>
            <request>
                <http url="/images/accueil3.gif" method="GET" version="1.1" if_modified_since="Fri, 14 Nov 2003 02:43:31 GMT"></http>
            </request>

            <thinktime value="20" random="true"></thinktime>

            <request>
                <http url="/index.en.html" method="GET" version="1.1"></http>
            </request>

        </session>
    </sessions>
</tsung>

A fenti példában a szerverre telepített tsung a localhost-ról indítja a klienseket, melyek célja a 195.56.150.103 ip címen lévő szerver 80-as portja. A szerver monitorozására az SNMP protokollt használjuk és egy tsung klienst. A <load> szakaszban látható, hogy egy szakaszból áll a teszt, ami 10 percig fut és 2 másodpercenként hoz létre egy felhasználót. Az <options> szakaszban megadott böngészővel azonosítják magukat a létrehozott felhasználók 20-80%-os arányban.   A <sessions> munkameneteket leíró szakasz határozza meg a felhasználók interakcióját, mely a következő lépésekből áll:

  1. 195.56.150.103 kezdő oldal elérése (HTTP GET request)
  2. 195.56.150.103/index.en.html oldal betöltése.
  3. A felhasználó ezután 0-20 másodperc közötti véletlen időtartamig várakozik.
  4. 195.56.150.103/images/accueil3.gif kép elérésnek ellenőrzése, ha azt a megadott időpont óta módosították.
  5. 195.56.150.103/images/accueil2.gif kép elérésnek ellenőrzése, ha azt a megadott időpont óta módosították.
  6. 195.56.150.103/images/accueil1.gif kép elérésnek ellenőrzése, ha azt a megadott időpont óta módosították.

 

Tsung konfigurációs lehetőségek

Az előző példában bemutatott XML mellett további lehetőségeink vannak még, melyekkel még jobban személyre szabhatjuk teljesítmény tesztjeinket. Az alábbi lista a teljesség igénye nélkül készült, részletekért keresd fel a Tsung konfigurációs XML dokumentációját:  

  1. Felhasználók felső határának korlátja (maxusers)
  2. Iterációk megvalósítása (for, repeat, if, foreach)
  3. Dinamikus változók használata (JSONPath, Regexp, XPath, PostgreSQL, dinmaikus változók)
  4. Külső (CSV) állományok betöltése és feldolgozása
  5. Variálható munkamenet típusok
  6. MySQL lekérdezések futtatása
  7. HTTP, LDAP authentikáció lehetősége
  8. Ismételt próbálkozások száma, ha a kapcsolat nem épült fel
  9. Kapcsolat időtúllépésének megadása
  10. Felhasználók „gondolkozási idejének” beállítása, véletlenszerűség, hibernálás
  11. Szakaszok maximális futási idejének meghatározása
  12. Dinamikusan és statikusan létrehozható felhasználók

 

A Tsung paraméterezése és futtatása

A Tsung futtatása meglehetősen egyszerű, azonban mindenképpen a Screen alkalmazás használatával javasolt, hogy ha a VPS-sel elveszne a kapcsolat, akkor is tovább fusson a teszt. Nézzük meg a beépített helpert, ami megfelelően dokumentált, így külön magyarázatot nem is fűznék hozzá:

tsung -h
Usage: tsung <options> start|stop|debug|status
 Options:
   -f <file>     set configuration file (default is ~/.tsung/tsung.xml) (use - for standard input)
   -l <logdir>   set log directory (default is ~/.tsung/log/YYYYMMDD-HHMM/)
   -i <id>       set controller id (default is empty)
   -r <command>  set remote connector (default is ssh)
   -s                  enable erlang smp on client nodes
   -p <max>      set maximum erlang processes per vm (default is 250000)
   -m <file>     write monitoring output on this file (default is tsung.log) (use - for standard output)
   -F                  use long names (FQDN) for erlang nodes
   -w                  warmup delay (default is 10 sec)
   -v                  print version information and exit
   -6                  use IPv6 for Tsung internal communications
   -h                  display this help and exit

 

Tsung futtatása a /root/.tsung/ könyvtárból, ha a konfigurációs állomány a simple_website_check.xml:   

screen tsung -f simple_website_check.xml start

A parancs hatására egy külön taszkban fog futni a tsung, amennyiben az xml konfigurációs állomány megfelelő szintaktikájú. A validálást a futtatás előtt megteszi a Tsung, ha hibát talál akkor hibakeresési információkkal megszakítja a futtatást. A teszt alatt keletkező napló állományok alapértelmezetten a ~/.tsung/log/YYYYMMDD-HHMMkönyvtárba kerülnek, de ez könyvtár a -l paraméterrel módosítható.

 

Futtatás közben

Az 1.6-os verziótól kezdve közvetlen webes monitorozási lehetőséget (dashboard) kapunk a teszt futása alatt, ami nagy segítség abban, hogy lássuk hogyan alakul a teszt folyamata. Így lehetőségünk van még időben beavatkozni, hogyha esetleg a teszt szélsőséges eredményeket hozna vagy a rendszer összeomolna.

A dashboard a Tsung szerveren érhető el a 8091-es porton keresztül az alábbi paraméterezéssel:

{tsung szerver domain/ip}:8091/es/ts_web:status

Tsung konzol

A konzolban nem sok információt kapunk vissza a tesztről.

Tsung dashboard státusz

Tsung Dashboard működés közben: {domain}:8091/es/ts_web:status

 

Futtatás után: jelentés készítése

Ha a tesztünk lefutott, akkor a naplózáshoz megadott vagy az alapértelmezett (vagy a paraméterként megadott) mappában megtaláljuk a napló (.log) állományokat, az XML konfigurációs állományunk és a csatolt csv-k másolatát is. A mappába belépve kiadva a treport parancsot – amit korábban létrehoztunk – és ezzel legeneráljuk a teszt eredményeihez tartozó HTML jelentést, melyet böngészőben a report.html file megnyitásával tekinthetünk meg.   A jelentés állomány készítése előtt csak a napló állományok és a dashboard HTML oldala található a naplózáshoz kijelölt mappában:

Tsung napló mappa

A naplózási mappa tartalma a teszt lefutása után:

Tsung treport futtatás

A jelentés készítés után a naplózási mappa tartalma:

Tsung mappa teszt után

 

Jelentés felépítése

Az elkészített jelentést egyszerűen böngészővel nyissuk meg és megkapjuk számszerűsítve a teljesítmény teszt eredményét. A jelentés megfelelően részletes ahhoz, hogy meghatározzuk a rendszer töréspontjait, az esetlegesen nem megfelelő folyamatokat vagy azok gyenge pontjait és ezek alapján kód refaktorálással, szerver skálázással vagy fejlesztéssel megerősítsük/felgyorsítsuk az alkalmazásunkat.

Tsung jelentés statisztika

A bal oldali menü két nagyobb szakaszra bomlik a felső részben vannak a számszerűsített statisztikák:

 

Main Statistics

  • Transactions: A tranzakciók összefoglalása
  • Errors: A futás folyamán fellépő hibák
  • HTTP status: A HTTP állapot kódok
  • Server monitoring: A monitorozás eredménye
  • Counters: Ferlhasználók, sikeres csatlakozás, lefutott fázisok, stb.
  • Network Throughput: A hálózat áteresztő képessége (sebesség/adatmennyiség)

 A második szakaszban az egyes grafikonokat nézhetjük meg, azonban ezt én még meglehetősen kezdetlegesnek érzem.

Graphs

  • Response times: Válaszidők változása a teszt alatt.
  • Errors: A kapott hibák a tesztelés alatt.
  • HTTP status: A válasz HTTP kódok a tesztelés alatt.
  • Server monitoring: Az opercáiós rendszer CPU, memória terhelése
  • Simultaneous Users: A teszt alatt szimulált felhasználók viselkedése.
  • Throughput graphs: A hálózat terhelésének változása a teszt alatt.

Tsung grafikonok

 

ÖSSZEFOGLALÁS

A teljesítmény tesztelés kiemelten fontos az e-kereskedelmi megoldásoknál, főleg a Magento webáruházaknál, hiszen a felhasználók gyorsan, akadály- és hibamentesen akarnak eljutni a vásárlás végéig és megkapni termékeiket. Főleg ünnepnapok, akciók és jól célzott marketingaktivitás közben és után számítanunk kell komoly terhelésre, így azoknak, akik szeretnék a vásárlóikat megtartani és nem arról híressé/hírhedtté válni, hogy a webáruházuk elérhetetlen, erősen javasolt a teljesítmény tesztelés.

A Tsung tökéletesen alkalmas eszköz arra, hogy teljesítmény teszteket végezzünk, akár az egész áruházra, akár az egyes folyamatokra nézve (adatbázis terhelés, fizetés, stb.), mindezt a legismertebb és leginkább használt protokollok támogatása mellett. Könnyű konfigurálása miatt ideális, hogy rövid tanulással is komoly, minden tekintetben profi teszteket futtassunk. Az automatikus jelentés készítésével pedig mindezt – grafikonokkal színesítve – „laikus” emberek számára is érthető formába önthetjük.

 

Forrás: Egy korábbi cikkemet, melyet még az AionHill-nél írtam közöltem le itt, melynek eredeti példánya elérhető ezen a linken.