JMeter, változó terhelésű tesztelés

Becsült olvasási idő:
4 perc

Mint már korábban talán írtam, nem vagyok egy JMeter guru. Így aztán ha felmerül valami kérdés, az AI-hoz fordulok, mintsem órákat töltsek azzal, hogy a Google segítségével talált linkeket végigolvassam.  Így történt ez most is, amikor egy váltakozó terhelésű tesztet szerettem volna előállítani. Az elmélet megvolt, hiszen csináltam már ilyen HP LoadRunnerrel réges régen, viszont a JMeter beállításaival és technikai adottságaival nem vagyok komfortos, mivel ez egy elég jól konfigurálható „műszer”.

Nézzük, mint mondott a Gemini:

Egyszerű eset

JMeterben a változó terhelésű (ramping, lépcsőzetes vagy hullámzó) tesztelés megvalósítására három fő módszer létezik, a legegyszerűbb beépített megoldástól a legrugalmasabb pluginokig.

1. Beépített megoldás: Standard Thread Group

Ha nincs lehetőséged pluginokat telepíteni, a sima Thread Group beállításaival is elérhetsz alapvető terhelésnövekedést (Ramp-up).

  • Ramp-up Period (seconds): Megadja, hogy a virtuális felhasználók mennyi idő alatt induljanak el fokozatosan.
  • Példa beállítás:
    • Number of Threads (users):100
    • Ramp-up Period (seconds):50
    • Loop Count:Infinite (vagy adj meg egy fix időtartamot a Specify Thread lifetime opcióval)
  • Működés: 50 másodperc alatt másodpercenként 2 új virtuális felhasználó lép be, amíg el nem éri a 100-at.

2. A legrugalmasabb módszer: Ultimate Thread Group (Ajánlott)

A változó terhelés (pl. hullámzás, lépcsőzetes emelés, hirtelen tüskék/spike tesztek) grafikusan és precízen a JMeter Plugins Manager segítségével telepíthető Custom Thread Groups csomaggal valósítható meg.

A telepítés után válaszd a jp@gc - Ultimate Thread Group elemet. Ebben egy táblázatban (Threads Schedule) tetszőleges számú terhelési szakaszt kombinálhatsz:

Start Thread CountInitial Delay (sec)Startup Time (sec)Hold Load For (sec)Shutdown Time (sec)
1000306010
200903012020
  • Működés:
    1. Az első sor lefut: 30 mp alatt felmegy 100 felhasználóra, tartja 60 mp-ig, majd leáll.
    2. A második sor 90 mp várakozás után belép, és további 200 felhasználóval megemeli a terhelést (lépcsőzetes teszt).

3. Kérés/másodperc (RPS/TPS) alapú szabályozás

Ha nem a virtuális felhasználók száma, hanem a másodpercenkénti kérésszám (Throughput) változtatása a célod:

  1. Throughput Shaping Timer (Plugin):
    • Helyezd a kérések alá (vagy a Thread Group szintjére).
    • Egy táblázatban megadhatod a kívánt RPS-t időtartam alapján:
      • Start RPS:10$\rightarrow$End RPS:50 (Duration:60s) — lineáris emelkedés
      • Start RPS:50$\rightarrow$End RPS:50 (Duration:180s) — állandó terhelés tartása
  2. Concurrency Thread Group + Throughput Shaping Timer:
    • A két plugin összekapcsolható (a Concurrency Thread Group automatikusan beállítja a szükséges virtuális felhasználók számát a Throughput Shaping Timer által kért RPS eléréséhez).

Gyors összefoglaló a megközelítés kiválasztásához

  • Lépcsőzetes / Hullámzó terhelés userekkel: Use jp@gc - Ultimate Thread Group
  • Fix Target RPS / Áteresztőképesség tesztelése: Use Throughput Shaping Timer
  • Egyszerű lineáris felfutás: Standard Thread Group (Ramp-Up Period)

Több Thread Group esetén

Ha több Thread Group-ot használsz egyetlen Test Planen belül, akkor összetett, valósághű terhelési profilokat építhetsz fel. Például szimulálhatsz különböző felhasználói viselkedéseket (pl. 70% vásárló, 30% böngésző) vagy egymásra csúsztatott terhelési hullámokat.

A több Thread Group összehangolására két alapvető megközelítés létezik: Párhuzamos (egyszerre futnak) és Egymás utáni (szekvenciális).

1. Párhuzamos futtatás (Alapértelmezett beállítás)

Alapértelmezetten a JMeter az összes Thread Group-ot egyszerre, párhuzamosan kezdi el futtatni. A változó terhelést az határozza meg, hogy a csoportok időben hogyan vannak beidőzítve egymáshoz képest.

Példa scenárió: Vásárlási csúcsforgalom szimulációja

  • Thread Group A (Állandó háttérterhelés – Cikkolvasók): Folyamatosan jelen lévő felhasználók.
  • Thread Group B (Lépcsőzetes terhelés – Vásárlók): Hullámokban érkező vásárlók.

Beállítás Ultimate Thread Group pluginnal:

Test Plan

  • ⚙️ Test Plan(a „Run Thread Groups consecutively” opció kivétele)
    • 👥 jp@gc - Ultimate Thread Group(Háttérterhelés – Böngészők)
    • 👥 jp@gc - Ultimate Thread Group(Csúcsforgalom – Vásárlók)

A) Háttérterhelés csoport (Böngészők):

Start Thread CountInitial Delay (sec)Startup Time (sec)Hold Load For (sec)Shutdown Time (sec)
5001030010

(Gyorsan feláll 50 felhasználóra, és végig fut 5 percig.)

B) Csúcsforgalom csoport (Vásárlók):

Start Thread CountInitial Delay (sec)Startup Time (sec)Hold Load For (sec)Shutdown Time (sec)
10060306010
200180306010

(A teszt 1. percében belép 100 vásárló, majd a 3. percben egy újabb 200 fős tüske érkezik.)

2. Szekvenciális (Egymás utáni) futtatás

Ha a terhelési fázisokat szigorúan egymás után akarod futtatni (pl. Felfűtés $\rightarrow$ Terhelési teszt $\rightarrow$ Kiürülés), be kell kapcsolnod a JMeterben az egymás utáni futtatást.

Beállítás lépései:

  1. Kattints a Test Plan gyökérelemre.
  2. Pipáld be a Run Thread Groups consecutively (i.e. run one at a time) opciót.

Példa felépítés:

Test Plan(Egymás utáni futtatás bekapcsolva)

  • 1️⃣ Thread Group - 1. Fázis (Bemelegítés)
    • Threads: 20, Ramp-Up: 20s, Duration: 60s
  • 2️⃣ Thread Group - 2. Fázis (Fő terhelés)
    • Threads: 200, Ramp-Up: 30s, Duration: 300s
  • 3️⃣ Thread Group - 3. Fázis (Lecsengés)
    • Threads: 10, Ramp-Up: 1s, Duration: 30s
  • Működés: A JMeter megvárja, amíg az 1. csoport teljesen leáll, és csak utána indítja el a 2. csoportot, majd végül a 3.-at.

💡 Fontos tipp adatok megosztásához a Thread Groupok között

Ha több Thread Groupot használsz, a sima JMeter változók (${var}) nem terjednek át az egyik csoportból a másikba, mert a változók szál-specifikusak.

Ha az egyik csoportban (pl. Bejelentkezés) generált adatot akarod használni egy másik csoportban:

  • Használj JMeter Property-ket a megosztáshoz (pl. Groovy scriptben: props.put("token", "${extracted_token}") és a másik csoportban: ${__P(token)}).
  • Használj jp@gc - Inter-Thread Communication plugint az adatok átadására a csoportok között.
Szerző:
Kategória:
Bejegyzés dátuma:

Hozzászólások

Vélemény, hozzászólás?