LocustIO - sgml/signature GitHub Wiki

Login Testing

import os
import sys
from locust import HttpUser, task, between
from pathlib import Path

# Credentials from environment (sourced via .bashrc)
USERNAME = os.getenv("LOGIN_USERNAME")
PASSWORD = os.getenv("LOGIN_PASSWORD")

# Target base URL from command line argument
if len(sys.argv) < 2:
    print("Usage: locust -f script.py <base_url>")
    sys.exit(1)
BASE_URL = sys.argv[-1]

# Local path to save downloaded file
DOWNLOAD_PATH = Path("downloads/bop.csv")
DOWNLOAD_PATH.parent.mkdir(parents=True, exist_ok=True)

class WebsiteUser(HttpUser):
    host = BASE_URL
    wait_time = between(1, 2)

    def on_start(self):
        self.login()

    def login(self):
        with self.client.post(
            "/login",
            data={"username": USERNAME, "password": PASSWORD},
            catch_response=True
        ) as response:
            if response.status_code != 200:
                response.failure(f"Login failed: {response.status_code}")
                raise Exception(f"Login failed with status: {response.status_code}")
            response.success()

    @task
    def get_foo(self):
        self.check_status("/foo")

    @task
    def get_bar(self):
        self.check_status("/foo/bar")

    @task
    def get_baz(self):
        self.check_status("/foo/bar/baz")

    @task
    def download_csv(self):
        with self.client.get("/foo/bar/baz/bop.csv", stream=True, catch_response=True) as response:
            if response.status_code != 200:
                response.failure(f"Download failed: {response.status_code}")
                raise Exception(f"CSV download failed: {response.status_code}")
            with open(DOWNLOAD_PATH, "wb") as f:
                f.write(response.content)
            response.success()

        # Trigger logout request after successful download
        with self.client.get("/logout", catch_response=True) as logout_response:
            if logout_response.status_code != 200:
                logout_response.failure(f"Logout failed: {logout_response.status_code}")
                raise Exception(f"Logout failed with status: {logout_response.status_code}")
            logout_response.success()

URL Rate Limit Testing

Long Running JWT

'''
lr_jwt.py
'''

import jwt
import datetime

def long_running_jwt()
    # Define a secret key
    SECRET_KEY = "your_secret_key"

    # Create a payload with a long expiration time
    payload = {
        "user": "locust_test_user",
        "iat": datetime.datetime.utcnow(),  # Issued at
        "exp": datetime.datetime.utcnow() + datetime.timedelta(hours=6),  # Expires in 6 hours
    }

    # Generate the token
    token = jwt.encode(payload, SECRET_KEY, algorithm="HS256")

    print(f"Generated JWT: {token}")
    return token

URL Request/Response

from locust import HttpUser, task
from lr_jwt import long_running_jwt

# Replace with your generated JWT
JWT_TOKEN = long_running_jwt()

class LoadTestUser(HttpUser):
    @task
    def test_endpoint(self):
        headers = {"Authorization": f"Bearer {JWT_TOKEN}"}
        self.client.get("/your/api/endpoint", headers=headers)
⚠️ **GitHub.com Fallback** ⚠️