Performance

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.