216 lines
7.3 KiB
Python
216 lines
7.3 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
Diagnostic Performance Test
|
|
|
|
This test helps diagnose the performance issues by testing different scenarios.
|
|
"""
|
|
|
|
import requests
|
|
import time
|
|
import traceback
|
|
|
|
BASE_URL = "http://localhost:8000"
|
|
|
|
def login():
|
|
"""Login and get access token"""
|
|
response = requests.post(f"{BASE_URL}/auth/login", json={
|
|
"email": "admin@vfx.com",
|
|
"password": "admin123"
|
|
})
|
|
if response.status_code == 200:
|
|
return response.json()["access_token"]
|
|
return None
|
|
|
|
def test_basic_endpoints():
|
|
"""Test basic endpoint functionality."""
|
|
print("=== Basic Endpoint Test ===")
|
|
|
|
token = login()
|
|
if not token:
|
|
print("❌ Login failed")
|
|
return
|
|
|
|
headers = {"Authorization": f"Bearer {token}"}
|
|
|
|
# Test 1: Simple shot endpoint without parameters
|
|
print("Testing basic shot endpoint...")
|
|
try:
|
|
start_time = time.time()
|
|
response = requests.get(f"{BASE_URL}/shots/", headers=headers)
|
|
end_time = time.time()
|
|
|
|
print(f" Status: {response.status_code}")
|
|
print(f" Time: {(end_time - start_time) * 1000:.2f}ms")
|
|
|
|
if response.status_code == 200:
|
|
shots = response.json()
|
|
print(f" Shots returned: {len(shots)}")
|
|
if shots:
|
|
print(f" Sample shot keys: {list(shots[0].keys())}")
|
|
else:
|
|
print(f" Error: {response.text}")
|
|
except Exception as e:
|
|
print(f" Exception: {e}")
|
|
traceback.print_exc()
|
|
|
|
# Test 2: Simple asset endpoint without parameters
|
|
print("\nTesting basic asset endpoint...")
|
|
try:
|
|
start_time = time.time()
|
|
response = requests.get(f"{BASE_URL}/assets/", headers=headers)
|
|
end_time = time.time()
|
|
|
|
print(f" Status: {response.status_code}")
|
|
print(f" Time: {(end_time - start_time) * 1000:.2f}ms")
|
|
|
|
if response.status_code == 200:
|
|
assets = response.json()
|
|
print(f" Assets returned: {len(assets)}")
|
|
if assets:
|
|
print(f" Sample asset keys: {list(assets[0].keys())}")
|
|
else:
|
|
print(f" Error: {response.text}")
|
|
except Exception as e:
|
|
print(f" Exception: {e}")
|
|
traceback.print_exc()
|
|
|
|
# Test 3: Shot endpoint with small limit
|
|
print("\nTesting shot endpoint with limit=1...")
|
|
try:
|
|
start_time = time.time()
|
|
response = requests.get(f"{BASE_URL}/shots/?limit=1", headers=headers)
|
|
end_time = time.time()
|
|
|
|
print(f" Status: {response.status_code}")
|
|
print(f" Time: {(end_time - start_time) * 1000:.2f}ms")
|
|
|
|
if response.status_code == 200:
|
|
shots = response.json()
|
|
print(f" Shots returned: {len(shots)}")
|
|
else:
|
|
print(f" Error: {response.text}")
|
|
except Exception as e:
|
|
print(f" Exception: {e}")
|
|
|
|
# Test 4: Asset endpoint with small limit
|
|
print("\nTesting asset endpoint with limit=1...")
|
|
try:
|
|
start_time = time.time()
|
|
response = requests.get(f"{BASE_URL}/assets/?limit=1", headers=headers)
|
|
end_time = time.time()
|
|
|
|
print(f" Status: {response.status_code}")
|
|
print(f" Time: {(end_time - start_time) * 1000:.2f}ms")
|
|
|
|
if response.status_code == 200:
|
|
assets = response.json()
|
|
print(f" Assets returned: {len(assets)}")
|
|
else:
|
|
print(f" Error: {response.text}")
|
|
except Exception as e:
|
|
print(f" Exception: {e}")
|
|
|
|
def test_with_project_filter():
|
|
"""Test with project filtering to see if that helps performance."""
|
|
print("\n=== Project Filter Test ===")
|
|
|
|
token = login()
|
|
if not token:
|
|
print("❌ Login failed")
|
|
return
|
|
|
|
headers = {"Authorization": f"Bearer {token}"}
|
|
|
|
# Get a project ID first
|
|
try:
|
|
response = requests.get(f"{BASE_URL}/projects/", headers=headers)
|
|
if response.status_code == 200:
|
|
projects = response.json()
|
|
if projects:
|
|
project_id = projects[0]['id']
|
|
print(f"Using project ID: {project_id}")
|
|
|
|
# Test shots with project filter
|
|
print("Testing shots with project filter...")
|
|
start_time = time.time()
|
|
response = requests.get(f"{BASE_URL}/shots/?project_id={project_id}&limit=10", headers=headers)
|
|
end_time = time.time()
|
|
|
|
print(f" Status: {response.status_code}")
|
|
print(f" Time: {(end_time - start_time) * 1000:.2f}ms")
|
|
|
|
if response.status_code == 200:
|
|
shots = response.json()
|
|
print(f" Shots returned: {len(shots)}")
|
|
|
|
# Test assets with project filter
|
|
print("Testing assets with project filter...")
|
|
start_time = time.time()
|
|
response = requests.get(f"{BASE_URL}/assets/?project_id={project_id}&limit=10", headers=headers)
|
|
end_time = time.time()
|
|
|
|
print(f" Status: {response.status_code}")
|
|
print(f" Time: {(end_time - start_time) * 1000:.2f}ms")
|
|
|
|
if response.status_code == 200:
|
|
assets = response.json()
|
|
print(f" Assets returned: {len(assets)}")
|
|
else:
|
|
print(f" Error: {response.text}")
|
|
else:
|
|
print("No projects found")
|
|
else:
|
|
print(f"Failed to get projects: {response.status_code}")
|
|
except Exception as e:
|
|
print(f"Exception: {e}")
|
|
traceback.print_exc()
|
|
|
|
def test_individual_endpoints():
|
|
"""Test individual shot/asset by ID."""
|
|
print("\n=== Individual Item Test ===")
|
|
|
|
token = login()
|
|
if not token:
|
|
print("❌ Login failed")
|
|
return
|
|
|
|
headers = {"Authorization": f"Bearer {token}"}
|
|
|
|
# Get a shot ID and test individual shot
|
|
try:
|
|
response = requests.get(f"{BASE_URL}/shots/?limit=1", headers=headers)
|
|
if response.status_code == 200:
|
|
shots = response.json()
|
|
if shots:
|
|
shot_id = shots[0]['id']
|
|
print(f"Testing individual shot {shot_id}...")
|
|
|
|
start_time = time.time()
|
|
response = requests.get(f"{BASE_URL}/shots/{shot_id}", headers=headers)
|
|
end_time = time.time()
|
|
|
|
print(f" Status: {response.status_code}")
|
|
print(f" Time: {(end_time - start_time) * 1000:.2f}ms")
|
|
|
|
if response.status_code == 200:
|
|
shot = response.json()
|
|
print(f" Shot: {shot['name']}")
|
|
print(f" Task count: {shot.get('task_count', 'N/A')}")
|
|
except Exception as e:
|
|
print(f"Exception: {e}")
|
|
|
|
if __name__ == "__main__":
|
|
print("Diagnostic Performance Test")
|
|
print("=" * 40)
|
|
|
|
# Check server
|
|
try:
|
|
response = requests.get(f"{BASE_URL}/docs", timeout=5)
|
|
print(f"Server status: {response.status_code}")
|
|
except Exception as e:
|
|
print(f"❌ Server connection failed: {e}")
|
|
exit(1)
|
|
|
|
test_basic_endpoints()
|
|
test_with_project_filter()
|
|
test_individual_endpoints() |