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

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.”

A 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.

teljesitmény teszt PET ábra

A teljesítmény tesztelési típusok fajtái

 

A tesztelés lépései

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

Tsung teljesítmény teszt logó 

 

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.

Tsung működése ábra, teljesítmény teszt

A Tsung működésének elvi vázlata

 

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
      • Skálázhatóság
      • Hibatűrő képessé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
      • CPU: 8 magos (Intel(R) Xeon(R) CPU E5-2630 v2 @ 2.60GHz)
      • Memória: 3 GB
      • Tárhely: 10 GB HDD

 

      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).

 


[root@aion-tsung ~]# yum -y install erlang perl perl-RRD-Simple.noarch perl-Log-Log4perl-RRDs.noarch gnuplot perl-Template-Toolkit firefox

 

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

 


[root@aion-tsung ~]# wget http://tsung.erlang-projects.org/dist/tsung-1.6.0.tar.gz
[root@aion-tsung ~]# tar zxfv tsung-1.6.0.tar.gz
[root@aion-tsung ~]# cd tsung-1.6.0
[root@aion-tsung ~]# ./configure && make && make install

 

      1. 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):

 


[root@aion-tsung ~]# vim ~/.bashrc
vim > alias treport="/usr/lib/tsung/bin/tsung_stats.pl; firefox report.html"
vim > :w
vim > :q
[root@aion-tsung ~]# source ~/.bashrc

 

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

 


[root@aion-tsung ~]# cd /root/
[root@aion-tsung ~]# mkdir .tsung
[root@aion-tsung ~]# cd ..
[root@aion-tsung ~]# 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. A 195.56.150.103 kezdő oldal elérése (HTTP GET request)
      2. A 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.
      3. A 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.
      4. A 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. A felhasználó ezután 0-20 másodperc közötti véletlen időtartamig várakozik.
      6. A 195.56.150.103/index.en.html oldal betöltése.

 

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:  

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

 

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á:


[root@aion-tsung ~]# $ 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:    


[root@aion-tsung ~]# 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-HHMM kö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ózási mappa

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

Tsung treport futtatása

A treport futtatása konzolból

Tsung naplózási mappa teljesítmény teszt

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

 

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 jelentés statisztikája

 

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
      • Network Throughput: A hálózat áteresztő képessége (sebesség/adatmennyiség)
      • Counters: Ferlhasználók, sikeres csatlakozás, lefutott fázisok, stb.
      • Server monitoring: A monitorozás eredménye
      • HTTP status: A HTTP állapot kódok
      • Errors: A futás folyamán fellépő hibák

 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.
      • Throughput graphs: A hálózat terhelésének változása a teszt alatt.
      • Simultaneous Users: A teszt alatt szimulált felhasználók viselkedése.
      • Server monitoring: Az opercáiós rendszer CPU, memória terhelése
      • HTTP status: A válasz HTTP kódok a tesztelés alatt.
      • Errors: A kapott hibák a tesztelés alatt.

 

Tsung jelentés grafikonok

A Tsung jelentés grafikonjai

 

Ö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.

 

Nincs szerző információ

  • celticaion .

    Koszi, jo kis iras.

SZÜKSÉGE VAN EGY MEGBÍZHATÓ, PROFI MAGENTO FEJLESZTŐ PARTNERRE?

Kérjük, keressen bennünket, ha bármilyen kérdése, igénye lenne új vagy meglévő webáruház készítésével, megújításával kapcsolatban!

Next