|
|
""" |
|
|
Locust Load Testing Script for Skill Classification API |
|
|
|
|
|
This script defines user behavior for load testing the prediction and monitoring |
|
|
endpoints of the Skill Classification API. |
|
|
""" |
|
|
|
|
|
from locust import HttpUser, task, between |
|
|
|
|
|
|
|
|
class SkillClassificationUser(HttpUser): |
|
|
""" |
|
|
Simulated user for load testing the Skill Classification API. |
|
|
|
|
|
This user performs the following actions: |
|
|
- Single predictions (most frequent) |
|
|
- Batch predictions |
|
|
- Monitoring and health checks |
|
|
""" |
|
|
|
|
|
|
|
|
|
|
|
host = "https://dacrow13-hopcroft-skill-classification.hf.space" |
|
|
|
|
|
|
|
|
wait_time = between(1, 5) |
|
|
|
|
|
@task(3) |
|
|
def predict_single(self): |
|
|
""" |
|
|
Task 1: Single Prediction (Weight: 3) |
|
|
|
|
|
Performs a POST request to /predict with a single issue text. |
|
|
This is the main task and executes more frequently due to higher weight. |
|
|
""" |
|
|
payload = { |
|
|
"issue_text": "Fix authentication bug in login module" |
|
|
} |
|
|
|
|
|
with self.client.post( |
|
|
"/predict", |
|
|
json=payload, |
|
|
catch_response=True |
|
|
) as response: |
|
|
if response.status_code == 201: |
|
|
response.success() |
|
|
else: |
|
|
response.failure(f"Prediction failed with status {response.status_code}") |
|
|
|
|
|
@task(1) |
|
|
def predict_batch(self): |
|
|
""" |
|
|
Task 2: Batch Prediction (Weight: 1) |
|
|
|
|
|
Performs a POST request to /predict/batch with multiple issue texts. |
|
|
""" |
|
|
payload = { |
|
|
"issues": [ |
|
|
{"issue_text": "Test 1"}, |
|
|
{"issue_text": "Test 2"} |
|
|
] |
|
|
} |
|
|
|
|
|
with self.client.post( |
|
|
"/predict/batch", |
|
|
json=payload, |
|
|
catch_response=True |
|
|
) as response: |
|
|
if response.status_code == 200: |
|
|
response.success() |
|
|
else: |
|
|
response.failure(f"Batch prediction failed with status {response.status_code}") |
|
|
|
|
|
@task(1) |
|
|
def monitoring_and_history(self): |
|
|
""" |
|
|
Task 3: Monitoring and History (Weight: 1) |
|
|
|
|
|
Performs GET requests to check prediction history and system health. |
|
|
""" |
|
|
|
|
|
with self.client.get( |
|
|
"/predictions", |
|
|
catch_response=True |
|
|
) as response: |
|
|
if 200 <= response.status_code < 300: |
|
|
response.success() |
|
|
else: |
|
|
response.failure(f"Predictions history failed with status {response.status_code}") |
|
|
|
|
|
|
|
|
with self.client.get( |
|
|
"/health", |
|
|
catch_response=True |
|
|
) as response: |
|
|
if 200 <= response.status_code < 300: |
|
|
response.success() |
|
|
else: |
|
|
response.failure(f"Health check failed with status {response.status_code}") |
|
|
|