Gatling vs JMeter vs The Grinder: Porovnanie nástrojov na testovanie záťaže

1. Úvod

Výber správneho nástroja pre danú prácu môže byť skľučujúci. V tomto tutoriáli to zjednodušíme porovnaním troch nástrojov na testovanie zaťaženia webových aplikácií - Apache JMeter, Gatling a The Grinder - oproti jednoduchému rozhraniu REST API.

2. Nástroje na testovanie záťaže

Po prvé, poďme rýchlo preskúmať nejaké pozadie každého z nich.

2.1. Gatling

Gatling je nástroj na testovanie zaťaženia, ktorý v Scale vytvára testovacie skripty. Gatlingov rekordér generuje testovacie skripty Scala, čo je pre Gatlinga kľúčová vlastnosť. Ďalšie informácie nájdete v našom návode Úvod do Gatlinga.

2.2. JMeter

JMeter je nástroj na testovanie zaťaženia od spoločnosti Apache. Poskytuje pekné grafické používateľské rozhranie, ktoré používame na konfiguráciu. Unikátna funkcia nazývaná logické radiče poskytuje veľkú flexibilitu pri nastavovaní testov v grafickom používateľskom rozhraní.

Navštívte náš návod Úvod do JMeter, kde nájdete screenshoty a ďalšie vysvetlenie.

2.3. Mlynček

A náš posledný nástroj, The Grinder, poskytuje skriptovací engine viac programovateľný ako ostatné dva a používa Jython. Grinder 3 však má funkcie na zaznamenávanie skriptov.

Grinder sa tiež líši od ostatných dvoch nástrojov tým, že umožňuje procesy konzoly a agenta. Táto funkcionalita poskytuje schopnosť procesu agenta, aby sa záťažové testy mohli rozšíriť na viac serverov. Je špeciálne inzerovaný ako nástroj na testovanie zaťaženia, ktorý je určený pre vývojárov na hľadanie zablokovaní a spomalení.

3. Nastavenie testovacieho prípadu

Ďalej pre náš test potrebujeme API. Naše funkcie API zahŕňajú:

  • pridať / aktualizovať záznam o odmene
  • zobraziť jeden / všetky záznamy o odmenách
  • prepojiť transakciu so záznamom o odmenách zákazníka
  • zobraziť transakcie a zaznamenať zákaznícke odmeny

Náš scenár:

Obchod má celonárodný predaj s novými a vracajúcimi sa zákazníkmi, ktorí potrebujú účty s odmenami zákazníkov, aby dosiahli úspory. Rewards API kontroluje zákaznícky účet odmien podľa ID zákazníka. Ak žiadny účet s odmenami neexistuje, pridajte ho a potom prepojte s transakciou.

Potom vykonáme dotaz na transakcie.

3.1. Naše REST API

Poďme si rýchlo vyzdvihnúť API prezeraním niektorých pahýľov metód:

@PostMapping (path = "/ rewards / add") public @ResponseBody RewardsAccount addRewardsAcount (@RequestBody RewardsAccount body) @GetMapping (path = "/ rewards / find / {customerId}") public @ResponseBody Voliteľné findCustomer (@PathVariable Integer customerId) @PostMapping (cesta = "/ transakcie / pridať") verejné @ResponseBody transakcia addTransaction (@RequestBody transakčná transakcia) @GetMapping (cesta = "/ transakcie / findAll / {odměna}") verejné @ResponseBody Iterable findTransactions (@PathVariable Integer odměnaId) 

Všimnite si niektoré vzťahy, ako napríklad dopytovanie transakcií podľa ID odmeny a získanie účtu odmien podľa ID zákazníka. Tieto vzťahy si vynucujú určitú logiku a určitú reakciu pri tvorbe nášho testovacieho scenára.

Testovaná aplikácia tiež používa na vytrvalosť databázu H2 v pamäti.

Našťastie, všetky naše nástroje to zvládajú celkom dobre, niektoré lepšie ako iné.

3.2. Náš plán testovania

Ďalej potrebujeme testovacie skripty.

Aby sme dosiahli spravodlivé porovnanie, vykonáme pre každý nástroj rovnaké kroky automatizácie:

  1. Generujte náhodné ID zákazníckych účtov
  2. Zaúčtujte transakciu
  3. Analyzujte odpoveď na náhodné ID zákazníka a ID transakcie
  4. Dotaz na zákazníka odmeňuje ID účtu za ID zákazníka
  5. Analyzujte odpoveď na ID účtu odmeny
  6. Ak ID účtu pre odmeny neexistuje, pridajte ho spolu s príspevkom
  7. Odošlite tú istú počiatočnú transakciu s aktualizovaným ID odmien pomocou ID transakcie
  8. Dotaz na všetky transakcie podľa ID účtu odmeny

Pozrime sa podrobnejšie na krok 4 pre každý nástroj. Nezabudnite skontrolovať ukážku všetkých troch dokončených skriptov.

3.3. Gatling

Pre Gatlinga je oboznámenie so Scalou prínosom pre vývojárov, pretože Gatling API je robustné a obsahuje veľa funkcií.

Gatlingovo API využíva prístup staviteľa DSL, ako vidíme v kroku 4:

.exec (http ("get_reward") .get ("/ rewards / find / $ {custId}") .check (jsonPath ("$. id"). saveAs ("rwdId"))) 

Za osobitnú pozornosť stojí podpora Gatlinga pre cestu JSON, keď potrebujeme prečítať a overiť odpoveď HTTP. Tu vyzdvihneme ID odmeny a uložíme ju do Gatlingovho vnútorného stavu.

Gatlingov jazyk vyjadrenia tiež uľahčuje dynamické spracovanie tela žiadosti Struny:

.body (StringBody ("" "{" customerRewardsId ":" $ {rwdId} "," customerId ":" $ {custId} "," transactionDate ":" $ {txtDate} "}" ")). asJson) 

Na záver naša konfigurácia pre toto porovnanie. 1 000 behov nastavených ako opakovanie celého scenára, atOnceUsers metóda nastavuje vlákna / používateľov:

val scn = scenár ("RewardsScenario") .repeat (1000) {...} setUp (scn.inject (atOnceUsers (100))) .protocols (httpProtocol)

Celý skript Scala je možné prezerať v našom repozitári Github.

3.4. JMeter

JMeter generuje XML súbor po konfigurácii GUI. Súbor obsahuje špecifické objekty JMeter s nastavenými vlastnosťami a ich hodnotami, napríklad:

Pozrite sa na testname atribúty, môžu byť označené tak, ako ich poznáme, že zodpovedajú vyššie uvedeným logickým krokom. Schopnosť pridávať deti, premenné a kroky závislostí poskytuje JMeter flexibilitu, ktorú poskytuje skriptovanie. Ďalej sme dokonca nastavili rozsah pre naše premenné!

Naša konfigurácia pre behy a používateľov v JMeter používa Skupiny vlákien:

100

Zobraziť celú jmx súbor ako referencia. Pokiaľ je to možné, písanie testov v XML ako .jmx súbory nemajú zmysel s plne funkčným GUI.

3.5. Mlynček

Bez funkčného programovania Scala a GUI vyzerá náš skript Jython pre The Grinder celkom jednoducho. Pridajte niekoľko systémových tried Java a máme oveľa menej riadkov kódu.

customerId = str (random.nextInt ()); result = request1.POST ("// localhost: 8080 / operations / add", "{" '"customerRewardsId"' ": null," '"customerId"' ":" + customerId + "," '"transactionDate"' ": null}") txnId = parseJsonString (result.getText (), "id")

Menej riadkov kódu nastavenia testu je však vyvážených potrebou viac kódu na údržbu reťazcov, ako je napríklad analýza reťazcov JSON. Rozhranie HTTPRequest API je tiež obmedzené na funkčnosť.

S nástrojom The Grinder definujeme vlákna, procesy a hodnoty v externom súbore vlastností:

brúska.vlákna = 100 brúska.procesy = 1 brúska.behy = 1000

Náš celý skript Jython pre The Grinder bude vyzerať takto.

4. Skúšobné chody

4.1. Vykonanie testu

Všetky tri nástroje odporúčajú pri veľkých záťažových testoch používať príkazový riadok.

Na spustenie testov použijeme Gatling open-source verziu 3.4.0 ako samostatný nástroj, JMeter 5.3 a The Grinder verzia 3.

Gatling vyžaduje iba to, čo máme JAVA_HOME a GATLING_HOME nastaviť. Na vykonanie Gatlinga používame:

./gatling.sh

v adresári GATLING_HOME / bin.

Program JMeter potrebuje parameter na zakázanie grafického používateľského rozhrania pre test, ako sa zobrazí pri spustení grafického používateľského rozhrania na konfiguráciu:

./jmeter.sh -n -t TestPlan.jmx -l log.jtl

Rovnako ako Gatling, aj The Grinder vyžaduje, aby sme to nastavili JAVA_HOME a GRINDERPATH. Potrebuje však tiež niekoľko ďalších vlastností:

export CLASSPATH = / home / lore / Documents / grinder-3 / lib / grinder.jar: $ CLASSPATH export GRINDERPROPERTIES = / home / lore / Documents / grinder-3 / examples / grinder.properties

Ako už bolo spomenuté vyššie, poskytujeme a brúska.vlastnosti súbor pre ďalšiu konfiguráciu, ako sú vlákna, behy, procesy a hostitelia konzoly.

Nakoniec konzolu a agentov zaviažeme pomocou:

java -classpath $ CLASSPATH net.grinder.Console
java -classpath $ CLASSPATH net.grinder.Grinder $ GRINDERPROPERTIES

4.2. Výsledky testu

Každý z testov bežal na 1000 behoch so 100 používateľmi / vláknami. Rozbaľme niektoré z najdôležitejších vecí:

Úspešné žiadostiChybyCelkový čas testuPriemerný čas odozvy (ms) Priemerná priepustnosť
Gatling500 000 žiadostí0218-te roky422283 požiadaviek / s
JMeter499997 Žiadosti0237462101 žiadostí / s
Mlynček499997 Žiadosti0221s432 280 req / s

Výsledky ukazujú, že 3 nástroje majú podobnú rýchlosť, pričom Gatling mierne vyčnieval ďalšie 2 na základe priemernej priepustnosti.

Každý nástroj poskytuje aj ďalšie informácie v priateľskejšom používateľskom rozhraní.

Gatling na konci behu vygeneruje správu vo formáte HTML, ktorá obsahuje viac grafov a štatistík, a to pre celkové spustenie aj pre každú požiadavku. Tu je útržok správy o výsledku testu:

Pri použití JMeter môžeme po testovacej prevádzke otvoriť grafické užívateľské rozhranie a vygenerovať správu HTML na základe súboru protokolu kde sme uložili výsledky:

Správa JMeter HTML obsahuje aj rozpis štatistík na žiadosť.

Nakoniec konzola The Grinder Console zaznamená štatistiku pre každého agenta a spustí sa:

Zatiaľ čo The Grinder je vysokorýchlostný, stojí to za cenu dodatočného času na vývoj a menšej rozmanitosti výstupných údajov.

5. Zhrnutie

Teraz je čas sa celkovo pozrieť na každý z nástrojov na testovanie zaťaženia.

GatlingJMeterMlynček
Projekt a komunita996
Výkon989
Skriptovateľnosť / API798
UI986
Správy976
Integrácia797
Zhrnutie8.38.37

Gatling:

  • Pevný, leštený nástroj na testovanie záťaže, ktorý poskytuje nádherné správy so skriptovaním Scala
  • Úrovne podpory produktu Open Source a Enterprise

JMeter:

  • Robustné API (prostredníctvom grafického používateľského rozhrania) na vývoj testovacieho skriptu bez nutnosti kódovania
  • Podpora Apache Foundation a skvelá integrácia s Maven

Brúska:

  • Nástroj na rýchle testovanie záťaže výkonu pre vývojárov používajúcich Jython
  • Škálovateľnosť medzi servermi poskytuje ešte väčší potenciál pre veľké testy

Jednoducho povedané, ak je rýchlosť a škálovateľnosť nevyhnutná, použite The Grinder.

Ak skvele vyzerajúce interaktívne grafy ukazujú nárast výkonu pri argumentovaní za zmenu, použite Gatlinga.

JMeter je nástroj pre komplikovanú obchodnú logiku alebo integračnú vrstvu s mnohými typmi správ. Ako súčasť Apache Software Foundation poskytuje JMeter vyspelý produkt a veľkú komunitu.

6. Záver

Na záver vidíme, že nástroje majú porovnateľné funkčnosti v niektorých oblastiach, zatiaľ čo v iných svietia. Správnym nástrojom pre správne zamestnanie je hovorová múdrosť, ktorá funguje pri vývoji softvéru.

Nakoniec API a skripty nájdete na Githube.