AI-asistované performance testing v Locustu
Klasické zátěžové testy mají problém: simulují naivního uživatele. Jeden login za sekundu, jeden klik, jeden POST. Realita je jiná — uživatelé otevřou pět tabů, opustí checkout na tři minuty, vrátí se a zkusí dvě platby. Tohle chování umí AI namodelovat realističtěji než ručně psaný Locust skript.
Tenhle článek ukazuje, jak postavit Locust setup s AI a realistickým modelem chování uživatelů.
Co je Locust a proč ne JMeter
Locust je framework pro distribuované zátěžové testování postavený na Pythonu. Oproti JMeteru:
- Testy píšete v Pythonu (ne klikáním v UI).
- Snáz se distribuuje mezi workery.
- Nativní podpora složitého chování uživatelů (task sety, váhy).
- Živé webové UI s metrikami v reálném čase.
Pro scénáře s AI je Locust jednoznačně lepší volba — Python stack a flexibilita.
Tradiční Locust skript vs. realistický
Klasika — všichni uživatelé dělají totéž:
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")
Realita je, že 60 % uživatelů jen kouká, 25 % o nákupu uvažuje a 15 % reálně koupí. Verze namodelovaná s AI:
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}
Váhy {60, 15, 25} odpovídají reálnému konverznímu trychtýři.
Kde do hry vstupuje AI
Tahle data neberete z hlavy, ale z událostí v Google Analytics nebo Mixpanelu. AI je zpracuje a vygeneruje Locust skript:
> 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 přečte CSV export z GA, spočítá přechody mezi stránkami a vygeneruje TaskSety se správnými váhami.
Detekce anomálií během běhu
U každého běhu máte časovou řadu RPS, p95 latence a error rate. Detektor anomálií (třeba Prophet nebo jednoduchý Isolation Forest) vás 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 se obvykle kryjí s nasazeními nebo s locky v databázi — což by vám bez AI zabralo hodiny grepování logů.
Integrace 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álný use-case: školní zápisový portál
Klient ze školství má portál, na který se v září hlásí 50 000 rodičů naráz. Klasický zátěžový test s 500 stabilními uživateli by problém neodhalil. Scénář namodelovaný s AI:
- Simulace nárazu — všichni naráz v 7:00
- 70 % první přihlášení (studená cache), 30 % obnovení session
- Reálný čas na rozmyšlenou (rodiče čtou formuláře 2–5 minut)
- Opakování pokusu při odpovědi 5xx
Výsledek: odhalili jsme limit connection poolu, který by v produkci způsobil pád pět minut po spuštění. Oprava proběhla před go-live.
Kdy AI k Locustu nepotřebujete
- Jednoduchý baseline test „zvládne server 100 RPS?" — klasický Locust bez AI.
- Malá aplikace s jednoduchým flow (přihlášení + jedna operace).
- Když nemáte data o reálném chování — musíte začít od analytiky.
Chcete stejný přístup u vás? Napište nám — domluvíme 30minutový discovery call.