Performance

AI-asistované performance testing v Locustu

Klasické záťažové testy majú problém: simulujú naivného používateľa. Jeden login za sekundu, jeden click, jeden POST. Realita je iná — používatelia otvoria 5 tabov, opustia checkout na 3 minúty, vrátia sa, skúsia 2 platby. AI vie toto správanie modelovať realistickejšie než ručne napísaný Locust script.

Tento článok ukazuje, ako postaviť AI-powered Locust setup s realistickým user behaviour modelom.

Čo je Locust a prečo nie JMeter

Locust je Python-based framework pre distribuované záťažové testovanie. Oproti JMeter:

  • Testy píšeš v Pythone (nie v clickaním v UI).
  • Jednoduchšie distribuuje medzi workers.
  • Natívna podpora pre complex user behaviour (task sets, weights).
  • Live web UI s real-time metrikami.

Pre AI-integrované scenáre je Locust jednoznačne lepšia voľba — Python stack, flexibilita.

Tradičný Locust script vs. realistický

Klasika — all users robia to isté:

from locust import HttpUser, task, between

class WebsiteUser(HttpUser):
    wait_time = between(1, 3)

    @task
    def browse(self):
        self.client.get("/")
        self.client.get("/products")
        self.client.get("/products/42")

Realitou je, že 60 % používateľov sú „window shoppers", 25 % rozmýšľajú o kúpe a 15 % reálne kúpia. AI-modelovaná verzia:

from locust import HttpUser, TaskSet, task, between
import random

class WindowShopper(TaskSet):
    @task(10)
    def browse_homepage(self): self.client.get("/")
    @task(8)
    def view_category(self): self.client.get(f"/category/{random.randint(1,20)}")
    @task(3)
    def view_product(self): self.client.get(f"/products/{random.randint(1,500)}")
    @task(1)
    def abandon(self): self.interrupt()

class ActiveBuyer(TaskSet):
    @task(5)
    def add_to_cart(self):
        self.client.post("/cart/add", json={"product_id": random.randint(1,500)})
    @task(3)
    def view_cart(self): self.client.get("/cart")
    @task(2)
    def checkout(self):
        self.client.post("/checkout", json={"payment_method": "card"})

class RealisticUser(HttpUser):
    wait_time = between(2, 8)
    tasks = {WindowShopper: 60, ActiveBuyer: 15, FreshBrowser: 25}

Weights {60, 15, 25} reflektujú reálny conversion funnel.

Kde AI prichádza do hry

Tieto dáta získaš nie z vlastnej hlavy, ale z Google Analytics / Mixpanel eventu. AI to spracuje a vygeneruje Locust script:

> Stiahni posledných 7 dní eventu z cypress/data/ga-exports/.
Analyzuj user flows a vygeneruj Locust script, ktorý simuluje
realistické správanie s weights podľa skutočnej frekvencie
eventu. Zohľadni session duration distribúciu.

Claude prečíta CSV export z GA, spočíta prechody medzi stránkami a vygeneruje TaskSet-y s správnymi weights.

Detekcia anomálií v behu

Pri každom beh máte time-series RPS, p95 latency, error rate. AI anomaly detector (napr. Prophet alebo jednoduchý Isolation Forest) upozorní:

import pandas as pd
from sklearn.ensemble import IsolationForest

# Načítaj metriky z Locust stats CSV
df = pd.read_csv('locust_stats_history.csv')
features = df[['num_requests', 'avg_response_time', 'fail_ratio']]

model = IsolationForest(contamination=0.05)
df['anomaly'] = model.fit_predict(features)

anomalies = df[df['anomaly'] == -1]
if not anomalies.empty:
    print(f"⚠ Detected {len(anomalies)} anomalies:")
    print(anomalies[['timestamp', 'avg_response_time', 'fail_ratio']])

Anomálie sa zvyčajne zhodujú s deployment eventmi alebo DB locking issues — čo by ti bez AI trvalo hodiny grep-ovaním logov.

Integrácia do CI

# Jenkinsfile stage
stage('Performance test') {
    steps {
        sh 'locust --headless -u 500 -r 20 -t 10m --html report.html'
        sh 'python3 analyze_anomalies.py'
    }
    post {
        always {
            archiveArtifacts 'report.html'
            slackSend(
                channel: '#perf-alerts',
                message: "Performance test: ${currentBuild.result}"
            )
        }
    }
}

Reálny use-case: školský zápisový portál

Klient z odvetvia školstva má portál, kde sa v septembri prihlasujú 50 000 rodičov naraz. Klasický záťažový test s 500 stabilnými userami by úspech nezachytil. AI-modelovaný scenár:

  • Burst simulation — všetci naraz v 07:00
  • 70 % prvý login (cold cache), 30 % session restart
  • Reálne thinking time (rodičia čítajú formuláre 2–5 min)
  • Retry behaviour pri 5xx odpovedi

Výsledok: odhalili sme connection pool limit, ktorý by v produkcii zavinil pád o 5 minút po spustení. Oprava pred go-live.

Keď AI k Locustu nepotrebujete

  • Jednoduchý baseline test „servor zvládne 100 RPS?" — tradičný Locust bez AI.
  • Malá aplikácia s jednoduchým flow (prihlás + jedna operácia).
  • Keď nemáte dáta o reálnom správaní — musíš začať od analytiky.

Chcete rovnaký prístup u vás? Napište nám — dohodneme 30minutový discovery call.