MnemoCore / tests /load /locustfile.py
Granis87's picture
Initial upload of MnemoCore
dbb04e4 verified
"""
Locust load testing file for MnemoCore API.
Usage:
locust -f tests/load/locustfile.py --host http://localhost:8100
Then open http://localhost:8089 to configure and run the load test.
"""
import random
import string
from locust import HttpUser, task, between
def random_content(length: int = 100) -> str:
"""Generate random content string."""
return ''.join(random.choices(string.ascii_letters + string.digits + ' ', k=length))
class StoreMemoryUser(HttpUser):
"""User that stores memories to MnemoCore."""
wait_time = between(0.1, 0.5)
def on_start(self):
"""Initialize user with API key."""
self.api_key = "test-api-key"
self.headers = {"X-API-Key": self.api_key}
@task(10)
def store_memory(self):
"""Store a random memory."""
payload = {
"content": random_content(200),
"metadata": {
"source": "load_test",
"timestamp": random.randint(1000000000, 2000000000)
}
}
self.client.post(
"/memories",
json=payload,
headers=self.headers,
name="/memories [STORE]"
)
class QueryMemoryUser(HttpUser):
"""User that queries memories from MnemoCore."""
wait_time = between(0.05, 0.2)
def on_start(self):
"""Initialize user with API key and some queries."""
self.api_key = "test-api-key"
self.headers = {"X-API-Key": self.api_key}
self.queries = [
"test query",
"memory search",
"find similar",
"cognitive recall",
"semantic search"
]
@task(20)
def query_memory(self):
"""Query for similar memories."""
query = random.choice(self.queries)
self.client.get(
f"/query?q={query}&limit=10",
headers=self.headers,
name="/query [SEARCH]"
)
class MixedUser(HttpUser):
"""User that performs both store and query operations."""
wait_time = between(0.1, 0.3)
def on_start(self):
"""Initialize user."""
self.api_key = "test-api-key"
self.headers = {"X-API-Key": self.api_key}
@task(3)
def store_memory(self):
"""Store a random memory."""
payload = {
"content": random_content(150),
"metadata": {"source": "mixed_user"}
}
self.client.post(
"/memories",
json=payload,
headers=self.headers,
name="/memories [STORE]"
)
@task(7)
def query_memory(self):
"""Query for memories."""
self.client.get(
"/query?q=test&limit=5",
headers=self.headers,
name="/query [SEARCH]"
)
@task(1)
def health_check(self):
"""Check API health."""
self.client.get("/health", name="/health [CHECK]")