Alkalmazás tesztelés Apache JMeter-rel

Hogyan működik a Java-alapú teljesítménytesztelő eszköz?

Időt és pénzt spórolhat a vállalat azzal, ha már a fejlesztés korai szakaszában teljesítmény szempontjából teszteli az adott alkalmazást, legyen szó webszolgáltatásról, adatbázisról, szerveroldali rendszerekről. A teljesítmény teszteléshez az egyik legjobb megoldásnak a nyílt forráskódú, Java-alapú teljesítménytesztelő eszköz, az Apache JMeter számít, amelyet a LogiNet a közép- és nagyvállalati környezetben tesztelt, alkalmazott.

A fejlesztés korai szakaszában a teljesítmény tesztelés kulcsfontosságú ahhoz, hogy időben kiderüljön, milyen megbízhatóan tud működni az adott rendszer végfelhasználói környezetben. A hangsúly tehát azon van, hogy az alkalmazás, webszolgáltatás milyen teljesítményt mutat a változó munkaterhelési és forgalmi szintek esetén. Ez segít abban, hogy még időben észlelni lehessen a problémákat, megelőzhetőek legyenek a váratlan terhelés miatti esetleges leállások, amelyek kijavítása így még kisebb költséggel elvégezhető.

A teszteléshez számos eszköz közül választhatunk, licenszköteles, illetve nyílt forráskódú szoftverek közül egyaránt. Az egyik legjobb megoldásnak a JMeter számít: az ingyenes és nyílt forráskódú terhelés- és teljesítmény tesztelő eszközt az Apache Foundation fejleszti. Alkalmas különböző típusú alkalmazások, webszolgáltatások, adatbázisok és egyéb szerveroldali rendszerek teljesítményének tesztelésére. A segítségével lehetőség van a válaszidők, terhelési kapacitás, és egyéb teljesítmény mutatók mérésére, az alkalmazások teljesítményének optimalizálására.

Milyen előnyei vannak a JMeter-nek?

  • Széles körű támogatás. A JMeter egyszerűen, a hivatalos weboldalról letölthető. Támogatja a különböző protokollokat és technológiákat, beleértve az HTTP, HTTPS, JDBC, FTP, JMS, LDAP, SOAP, és sok mást, így sokféle rendszer és alkalmazás tesztelésére alkalmas.
  • Felhasználói forgalom szimulációja. Segítségével lehetőség van a felhasználói forgalom szimulálására, azaz hogyan reagálna egy alkalmazás egyidejűleg több felhasználóra, vagy mekkora terhelést bírna el egy adott szerver.
  • Funkcionális tesztelés. A JMeter nem csak a teljesítményt, hanem a funkcionális működést is tesztelni képes. Ez azt jelenti, hogy lehetőség van HTTP kérések, adatbázis lekérdezések, vagy más típusú kérések automatizált tesztelésére.
  • Grafikus felhasználói felület (GUI). A JMeter egy grafikus felhasználói felülettel rendelkezik, ami lehetővé teszi a tesztek könnyű konfigurálását, futtatását és eredményeinek elemzését. Emellett lehetőség van a parancssori mód használatára is a tesztek automatizálásához.
  • Bővíthetőség. A JMeter moduláris struktúrával rendelkezik, ami lehetővé teszi a funkcionalitásának kiterjesztését és testreszabását a felhasználói igényeknek megfelelően.

Hogyan végezzük a performancia tesztet?

  • Tesztkörnyzet meghatározás. Mielőtt elkezdenénk az adott rendszer tesztelését, az ügyféllel közösen célszerű meghatározni, milyen tesztkörnyezetben folyjon a tesztelés. Ide sorolható többek között, hogy mit tudunk a felhasználókról, hogyan és honnan fogják elérni a rendszert? Milyen fizikai kapcsolatuk van (kapcsolat sebessége stb.)? Milyen kliens oldali alkalmazással teszik ezt? Milyen hardware-rel rendelkezik a szerver, illetve a kliens? Milyen processzorral, memóriával dolgoznak?
  • Kilépési feltétel meghatározása. Érdemes meghatározni a kilépési pontokat a teljesítmény mutatók segítségével, azaz mikor tekintjük befejezettnek az egész folyamatot. Ilyen konkrétumok lehetnek, mint például 1000 felhasználót „bírjon el” a weboldal, azaz elfogadható válasz időn belül még elérhető legyen, vagy, hogy 500 felhasználói után is 40 ms alatt legyen a válaszidő.
  • Tesztek megtervezése. A tesztek megtervezésénél meg kell határozni a teljes tesztforgatókönyvet: milyen felhasználókat fogunk ráereszteni a rendszerre? Milyen felhasználói esetet szimuláljunk? Milyen tesztadatokkal fogunk dolgozni? Mivel fogjuk ezeket generálni? Itt tervezünk meg minden részletet a későbbi megvalósításhoz.
  • Tesztkörnyezet konfigurálása. Ahhoz, hogy egy rendszert terhelésnek vessük alá, elő kell készítenünk a tesztkörnyezetet. Itt érdemes az éles környezethez leginkább hasonló, jó esetben megegyező környezetet létrehozni annak érdekében, hogy a teszt megfelelő adatokkal szolgáljon. Ki kell választani a megfelelő monitorozó eszközöket/toolokat.

Teszt létrehozása

Thread Group hozzáadása a Test Plan-hez. Ennek keretében állíthatók be a paraméterek, mint a felhasználók száma, a felfutási idő (pl. teljes terhelést 10 perc alatt érje el), összesen hány iterációt fusson, illetve mennyi ideig fusson.Ha ezzel megvagyunk, ez alá tudjuk felvenni a kéréseket (pl. HTTP Request), ahhoz pedig, hogy láttuk a futás eredményét, listenert kell hozzáadni.

JMeter: Teszt létrehozása

JMeter: Teszt létrehozása

JMeter funkciói

Különböző controllerek alá tudjuk szervezni a tesztet, annak megfelelően, hogy milyen milyen logikát szeretnénk megvalósítani. Így lehet If Controller, Loop Controller, While Controller, Switch Controller, Transaction Controller, Random Controller, Once Only Controller, ForEach Controller.

Az Assertion a JMeter egyik alapvető funkciója, ami lehetővé teszi a válaszok automatikus ellenőrzését a teszt során. Ezt a Request-ek alá tudjuk szervezni. A Response Assertion lehetővé teszi a válaszok ellenőrzését a teszt során, és ellenőrzi, hogy a válaszok tartalmazzák-e a várt mintát, vagy kifejezést. A JSON tesztelésére van egy külön JSON Assertion, ami lehetővé teszi a JSON Response-ok ellenőrzését.

A Timer akkor hasznos, ha szabályozni szeretnénk a kérések közötti időzítést a tesztek során. Segítségükkel szimulálni lehet a valós körülmények közötti váratlan kérések közötti késlekedéseket. A különböző Request-ek vagy Request csoportok közé tudjuk be tudjuk tenni, hogy például 20 mp-et várjon a következő Request előtt, vagy random várjon valamennyi időt, vagy meg tudjuk adni, hogy például 10 és 20 mp között valamilyen random időpontot várjon, mielőtt a következő Request-et meghívja.

A Pre-Processor-ok olyan elemek, amelyek előkészítő műveleteket végeznek a Sampler-ek előtt. Segítségükkel lehetőség van adatok előkészítésére, változók beállítására, HTTP kérések előtti beállításokra, stb. Különböző nyelveken tudjuk írni ezeket. A JMeter számos Pre-Processor típust kínál (pl. User Parameters Pre-Processor, JSR223 Pre-Processor, BeanShell Pre-Processor), amelyek mindegyike különböző célokra használható. A Pre-Processor-okat általában a Sampler elemek alatt helyezik el a teszttervben, ami lehetővé teszi a specifikus előkészítő műveletek végrehajtását az adott Sampler előtt.

A Post-Processor hasonló a Pre-Processor-okhoz, ezek a Sampler után végzik a feldolgozó műveleteket. Segítségükkel lehetőség van a válaszok feldolgozására, adatok kinyerésére, változók beállítására. A JMeter számos Post-Processor típust kínál, melyek mindegyike különböző célokra használható, például a válaszokból adatok kinyerésére (pl. Regular Expression Extractor, JSON Extractor, XPath Extractor). A Post-Processor-okat általában a Sampler elemek alatt helyezik el a teszttervben, ami lehetővé teszi a specifikus feldolgozási műveletek végrehajtását az adott Sampler után. A leggyakoribb felhasználása a Post-Processoroknak az adatkinyerés a válaszokból, például a Regular Expression Extractor segítségével lehetőség van egy HTML vagy JSON válaszból kinyerni bizonyos adatokat.

A Config Element-ek esetében különböző típusok vannak. Így például a HTTP Request Default, a User Defined Variables, a HTTP Cookie Manager, a HTTP Header Manager, a CSV Data Set Config.
A Test Fragment elem egy speciális típusú vezérlő, amely a Test Plan-ben a Thread Group elemmel azonos szinten található. Ez abban különbözik a Thread Grouptól, hogy akkor kerül végrehajtásra, ha egy Module Controller vagy egy Include Controller hivatkozik rá. Ez az elem kizárólag a tesztterveken belüli kód újrafelhasználására szolgál.

Lehet bővíteni a JMeter-t plugin-okkal, ezt a plugins-manager.jar oldalról lehet megtenni, saját tesztjeinkben tudjuk használni.

JMeter: pluginok

Lehetőség van felvenni az oldal működését, azaz rögzíteni a HTTP vagy HTTPS forgalmat - ez a Test Script Recorder eszköz, amellyel létrehozhatunk JMeter tesztterveket. A létrehozott tesztterveket tovább lehet finomítani a tesztelendő funkcionalitásnak megfelelően.

A teszt futtatásra több lehetőség is van:

  • GUI mód: ebben a módban könnyen elkészíthetők, szerkeszthetők és futtathatók a tesztek a felhasználóbarát felületen keresztül.
  • A parancssoros (CLI) mód lehetővé teszi a tesztek automatizálását és futtatását parancssorból. Ez különösen hasznos lehet a CI / CD folyamatokban.
  • A JMeter tesztek egy vagy több gépen is futtathatók, amelyek lehetnek a tesztelő szerverek. Ebben a módban a tesztek részei szét vannak osztva és párhuzamosan futnak, ami növelheti a terhelést és jobb teljesítményt eredményezhet.

JMeter: Teszt futtatása

JMeter: Teszt futtatása

Eredmények elemzése

Két fontos mérőszámot kapunk a tesztek eredményének (csv) feldolgozását követően:

  • Áteresztő képesség (Throughput): a rendszer, folyamat képességét jelenti arra, hogy mennyi adatot vagy folyamatot tud átengedni vagy kezelni egy adott idő alatt.
  • Hibaarány (Error): összes request-ből mennyi lett hibás a teszt futása alatt

Lehetőség van HTML riport generálására, ezt GUI felületről de CLI módból is meg tudjuk tenni.

JMeter: Eredmények elemzése, riport generálása

Riport tartalma:

  • Összefoglaló: Eredmények rövid összefoglalása
  • Projekt összefoglaló: Rövid leírása a tesztelt szoftvernek
  • Mérési módszertan: Mérési módszertan részletes ismertetése
  • Eredmények: Futtatások alakulása, értékelése; áteresztő képesség és hibaarányok elemzése
  • Szerver oldali mérések (szerver monitorozó alkalmazásokból grafikonok (pl.: grafana): CPU, Memória, Disk

JMeter: Riport tartalma
JMeter: Riport tartalma

Példák JMeter tesztekre

Az egyik nagyvállalati ügyfelünk esetében a teszt célja az volt, hogy meghatározzuk, a vállalat által megadott körülbelül háromszoros forgalomnövekedés milyen terhelés növekedéssel jár, és ezáltal milyen szerver kapacitás növelés szükséges. A valós forgalmat és a teszt eredményeit együttesen vizsgálva azt az eredményt kaptuk, hogy szükséges az adatbázis szerverek teljesítmény növelése, és egy plusz webszerver beállítása.

Egy másik nagyvállalati ügyfelünknél a megörökölt load teszt javítása, továbbfejlesztése, több funkcióval történő kiegészítése történt meg. Több teszt is készült, ami az alkalmazás különböző részeit tesztelte.

Olyan fejlesztő céget keresel, amely komoly tapasztalatokkal rendelkezik nagyvállalati környezetben alkalmazás tesztelésben? Hívd munkatársunkat ingyenes konzultációért!