IT Systems Integration Consultant
Gatling v praxi odhaľuje, že otázka výkonu aplikácií je rovnako dôležitá ako ich funkčnosť. Môžeš mať aplikáciu plnú skvelých funkcií, no ak sa načítava pomaly, padá pod záťažou alebo nezvládne obslúžiť očakávaný počet používateľov, stratíš dôveru zákazníkov. Práve preto existuje testovanie výkonu – disciplína, ktorá preveruje, ako sa aplikácia správa pri reálnom aj extrémnom zaťažení.

V článku sa dozvieš:
Gatling je nástroj vyvinutý primárne pre testovanie webových aplikácií a API testing. Ide o open-source platformu určenú na load testing a performance testing, ktorá umožňuje simulovať tisíce virtuálnych používateľov a sledovať, ako sa systém správa pod tlakom.
Gatling je známy svojou rýchlosťou, nízkou spotrebou zdrojov a možnosťou detailného skriptovania testov. Beží na Java Virtual Machine (JVM) a jeho testy sa píšu v Scala – modernom programovacom jazyku, ktorý kombinuje funkcionálne a objektovo-orientované programovanie.
Na rozdiel od niektorých starších riešení Gatling nepoužíva blokujúci model spracovania požiadaviek. Namiesto toho využíva asynchrónny, neblokujúci prístup (postavený na knižnici Akka), vďaka čomu dokáže simulovať obrovské množstvo používateľov bez toho, aby spotreboval nadmerné množstvo pamäte a CPU.
Gatling vznikol v roku 2011 ako reakcia na potrebu modernejšieho nástroja na performance testing, ktorý by nebol viazaný na ťažkopádne grafické rozhrania a neblokujúci prístup k spracovaniu požiadaviek. Jeho tvorcovia sa inšpirovali tým, ako sa webové aplikácie stávali čoraz komplexnejšími a nároky na rýchlosť a stabilitu rástli.
…na začiatku bol Gatling komunitný projekt vyvíjaný s cieľom ponúknuť jednoduché, ale programátorsky flexibilné riešenie? Kľúčovým rozdielom oproti starším nástrojom bolo použitie jazyka Scala a architektúry postavenej na asynchrónnych operáciách. Táto kombinácia umožnila simulovať vysoký počet používateľov na relatívne skromnom hardvéri.
Postupom času sa projekt rozdelil na dve vetvy:
V roku 2015 začal tím aktívne vyvíjať aj doplnky a pluginy na integráciu s CI/CD nástrojmi, čo viedlo k tomu, že Gatling sa stal bežnou súčasťou DevOps procesov vo firmách po celom svete.
Gatling je odpoveďou na skutočnosť, že vývoj softvéru už dávno nie je len o tom, aby „to fungovalo“. Moderné webové aplikácie musia zvládnuť:
Bez výkonnostného testovania môžeš mať dobrý kód, ale katastrofálne používateľské skúsenosti pri reálnom nasadení.
Gatling pomáha odhaliť:
Medzi navýraznešie výhody Gatlingu patria:
Gatling je navrhnutý ako modulárny systém, ktorý sa skladá z troch hlavných komponentov:
Proces Gatling testingu možno zhrnúť do niekoľkých krokov:
Či už ide o e-commerce, bankovníctvo či streamingové služby, Gatling dokáže verne simulovať správanie tisícok používateľov naraz a odhaliť, ako sa systém správa v čase najvyššej prevádzky.
Architektúra Gatlingu umožňuje simulovať správanie tisícov zákazníkov, ktorí si prezerajú produkty, pridávajú ich do košíka a platia. Výsledky ukážu, či je databáza a webserver schopný zvládnuť nápor.
Test môže simulovať súbežné prihlasovanie tisícov klientov, odosielanie prevodov a kontrolu zostatkov. Na základe dát sa odhalia moduly s najvyššou odozvou a návrhy na ich optimalizáciu.
Pri uvedení novej série je možné otestovať reakcie serverov pri tisíckach paralelných streamov.
Jednou z najsilnejších stránok Gatlingu je jeho DSL (Domain Specific Language) v jazyku Scala. Tento prístup umožňuje písať scenáre, ktoré sú čitateľné aj pre netechnických členov tímu, no zároveň poskytujú programátorom plnú flexibilitu pri definovaní správania virtuálnych používateľov.
Scenáre sa píšu ako kód, čo znamená, že ich možno verzovať v repozitári spolu s aplikáciou. Tento prístup eliminuje problém s „neviditeľnými“ konfiguráciami, ktoré bývajú uložené iba na konkrétnom počítači testera.
Každý testovací scenár v Gatlingu má typickú štruktúru:
Príklad jednoduchého scenára:
import io.gatling.core.Predef._
import io.gatling.http.Predef._
class BasicSimulation extends Simulation {
val httpProtocol = http
.baseUrl("https://example.com")
.acceptHeader("application/json")
val scn = scenario("Basic Test")
.exec(
http("Home Page")
.get("/")
.check(status.is(200))
)
setUp(
scn.inject(
rampUsers(1000) during (60 seconds)
).protocols(httpProtocol)
)
}
V tomto príklade Gatling:
Reálne testy často vyžadujú rôzne vstupné dáta – napríklad prihlasovacie údaje, vyhľadávacie frázy alebo ID produktov. Gatling podporuje feeders, čo sú zdroje dát načítavané zo súborov (CSV, JSON) alebo generované priamo v kóde.
Príklad CSV feederu:
val feeder = csv("users.csv").circular
val scn = scenario("Login Test")
.feed(feeder)
.exec(
http("Login Request")
.post("/login")
.formParam("username", "${username}")
.formParam("password", "${password}")
.check(status.is(200))
)
Len generovať záťaž nestačí – test musí aj overiť, či odpovede systému spĺňajú očakávania. Gatling ponúka checks, pomocou ktorých možno validovať odpovede.
Príklady:
Takéto validácie pomáhajú odhaliť, že aplikácia síce odpovedá rýchlo, ale vracia nesprávne alebo neúplné údaje.
Okrem jednoduchých krokov možno do scenárov zaradiť:
Tento prístup umožňuje simulovať veľmi realistické situácie, napríklad:
Gatling, tak ako aj iné moderné softvérové tímy, sa čoraz viac využíva prístup Continuous Integration a Continuous Delivery (CI/CD). Gatling je na tento účel ideálny, pretože scenáre sú uložené ako kód, čo umožňuje ich jednoduché začlenenie do existujúcich pipeline.
Ak sa výkonnostné testy spúšťajú pravidelne, tím dokáže včas odhaliť problémy, ktoré by sa inak prejavili až v produkcii. Napríklad:
…tým, že sa testy spúšťajú automaticky po každej väčšej zmene v kóde, sa výrazne znižuje riziko, že sa do produkcie dostane pomalá alebo nestabilná verzia aplikácie?
Pri nasadení v tíme sa Gatling často stáva pevnou súčasťou CI/CD pipeline.
Príklad integrácie v Jenkins Pipeline:
Nižšie nájdeš ukážku, ako môže vyzerať pipeline so spustením Gatling testov po build-e aplikácie:
pipeline {
agent any
stages {
stage('Build') {
steps {
sh './mvnw clean package'
}
}
stage('Performance Test') {
steps {
sh './mvnw gatling:test'
}
}
}
post {
always {
archiveArtifacts artifacts: 'target/gatling/**/*'
}
}
}
V tomto prípade:
Príklad integrácie v GitLab CI:
performance_test:
stage: test
script:
- ./mvnw gatling:test
artifacts:
paths:
- target/gatling
Výhodou GitLab CI je, že reporty možno otvoriť priamo v rozhraní GitLabu.
Niektoré tímy preferujú spúšťanie testov na cloudovej infraštruktúre, aby odľahčili lokálne zdroje. Na to je možné využiť:
Výsledky z Gatling testov možno automaticky ukladať do nástrojov na monitoring a analýzu, ako sú:
Takto má tím prehľad nielen o výsledkoch po teste, ale aj o priebežnom stave počas testovania.
Gatling sa dá nainštalovať a spustiť na rôznych operačných systémoch a spôsob inštalácie závisí od toho, či plánuješ používať open-source verziu alebo Gatling Enterprise.
Najjednoduchší spôsob, ako začať, je použiť oficiálnu distribúciu Gatlingu.
1. Stiahni ZIP a rozbaľ ho pomocou príkazu:
unzip gatling-charts-highcharts-bundle-X.X.X-bundle.zip
2. Prejdi do priečinka bin:
cd gatling-charts-highcharts-bundle-X.X.X/bin
3. Spusti Gatling príkazom:
./gatling.sh
Ak chceš Gatling integrovať do CI/CD alebo pracovať priamo v IDE, môžeš ho používať cez Maven plugin alebo SBT.
V súbore pom.xml pridaj:
<plugin>
<groupId>io.gatling</groupId>
<artifactId>gatling-maven-plugin</artifactId>
<version>4.9.0</version>
<configuration>
<simulationClass>simulacie.BasicSimulation</simulationClass>
</configuration>
</plugin>
Potom spusti test:
mvn gatling:test
Po inštalácii môžeš vytvoriť jednoduchý test, ktorý otestuje načítanie domovskej stránky.
Príklad:
import io.gatling.core.Predef._
import io.gatling.http.Predef._
import scala.concurrent.duration._
class BasicSimulation extends Simulation {
val httpProtocol = http
.baseUrl("https://example.com")
.acceptHeader("application/json")
val scn = scenario("Basic Test")
.exec(
http("Home Page")
.get("/")
.check(status.is(200))
)
setUp(
scn.inject(rampUsers(1000) during (60 seconds))
).protocols(httpProtocol)
}
Spustenie:
Po dokončení testu Gatling automaticky vytvorí HTML report.
results/meno_testu-čas_spustenia/index.html
target/gatling/meno_testu-čas_spustenia/index.html
Report obsahuje:
Ak chceš škálovať testy na viacerých strojoch, môžeš použiť Gatling Enterprise.
Gatling patrí medzi populárne riešenia, ale na trhu existuje viacero alternatív, ktoré majú svoje silné a slabé stránky. Výber správneho nástroja na testovanie záťaže je kľúčový, pretože rôzne projekty majú odlišné požiadavky. V tejto časti sa pozrieme na podrobné porovnanie Gatlingu s Apache JMeter, k6 a Locust.
Apache JMeter je jeden z najstarších a najznámejších nástrojov na testovanie výkonu:
Kedy zvoliť Gatling:
Kedy zvoliť JMeter:
k6 je moderný nástroj vyvíjaný spoločnosťou Grafana Labs, ktorý používa JavaScript na definovanie testov.
Kedy zvoliť Gatling:
Kedy zvoliť k6:
Locust je nástroj napísaný v Pythone a umožňuje definovať testy pomocou Python skriptov.
Kedy zvoliť Gatling:
Kedy zvoliť Locust:
Aby boli výsledky testovania čo najpresnejšie a užitočné, oplatí sa dodržiavať niekoľko osvedčených zásad. Tieto tipy ti pomôžu vyťažiť z Gatlingu maximum a predísť častým chybám pri load testovaní.
Je lákavé hneď simulovať desaťtisíce virtuálnych používateľov, no postupné zvyšovanie zaťaženia ti pomôže lepšie identifikovať úzke hrdlá.
Test by mal simulovať skutočné správanie používateľov. Ak tvoji reálni zákazníci najprv prechádzajú katalóg, až potom pridávajú produkty do košíka a následne platia, zahrň tieto kroky do testu v rovnakom poradí.
Krátke testy odhalia okamžité problémy, ale dlhodobé testy ti ukážu, či aplikácia netrpí únikom pamäte alebo postupným znižovaním výkonu.
Spúšťanie testov po každej väčšej zmene kódu zabezpečí, že nové funkcionality nebudú mať negatívny dopad na výkon.
Automaticky generované HTML reporty Gatlingu sú bohaté na informácie. Sleduj metriky ako stredná a maximálna odozva, počet chýb, percentilové hodnoty (napr. 95. alebo 99. percentil) a priepustnosť.
Výsledky z Gatling testov by nemali skončiť v šuplíku. Naopak, mali by slúžiť ako základ pre optimalizačné kroky:
Vývoj Gatlingu pokračuje aktívnym tempom. V posledných rokoch pribudli integrácie s cloudovými službami a možnosti spúšťania distribuovaných testov, ktoré umožňujú simulovať obrovské množstvo používateľov z viacerých geografických lokalít.
Trendy, ktoré ovplyvnia záťažové testovanie v blízkej budúcnosti:
Gatling je silný nástroj, ktorý vývojárom a testerom dáva jasnú odpoveď na otázku, či aplikácia zvládne reálne podmienky. Pomáha rýchlo odhaliť úzke hrdlá, optimalizovať infraštruktúru a zabezpečiť bezproblémovú používateľskú skúsenosť aj pri vysokej záťaži. Ak chceš mať istotu, že tvoj web alebo API bude spoľahlivé v každej situácii, pravidelné výkonové testy s Gatlingom sú správny krok.
Zdroje:
https://gatling.io/
Súvisiace články