Basic API Testing
Test a simple API endpoint:- Python
- JavaScript/TypeScript
Copy
from hopx_ai import Sandbox
def test_api_endpoint(url: str):
"""Test an API endpoint"""
with Sandbox.create(template="code-interpreter") as sandbox:
sandbox.commands.run("pip install requests pytest --quiet")
result = sandbox.run_code(f"""
import requests
import json
# Test GET request
response = requests.get('{url}')
test_results = {{
'url': '{url}',
'status_code': response.status_code,
'success': response.status_code == 200,
'response_time_ms': response.elapsed.total_seconds() * 1000,
'headers': dict(response.headers),
'content_type': response.headers.get('Content-Type', 'unknown')
}}
# Try to parse JSON
try:
test_results['json_data'] = response.json()
test_results['has_json'] = True
except:
test_results['has_json'] = False
test_results['text_preview'] = response.text[:200]
# Save results
with open('/workspace/test_results.json', 'w') as f:
json.dump(test_results, f, indent=2)
print(f"API Test Results:")
print(f"Status: {test_results['status_code']}")
print(f"Response Time: {test_results['response_time_ms']:.2f}ms")
""")
# Download results
results_json = sandbox.files.read("/workspace/test_results.json")
import json
return json.loads(results_json)
# Example
results = test_api_endpoint("https://jsonplaceholder.typicode.com/posts/1")
print(f"Status: {results['status_code']}")
print(f"Success: {results['success']}")
Comprehensive API Test Suite
Create a complete API test suite:- Python
- JavaScript/TypeScript
Copy
from hopx_ai import Sandbox
import json
def run_api_test_suite(base_url: str):
"""Run comprehensive API tests"""
with Sandbox.create(template="code-interpreter") as sandbox:
sandbox.commands.run("pip install requests pytest --quiet")
result = sandbox.run_code(f"""
import requests
import json
import time
base_url = '{base_url}'
test_results = []
# Test 1: GET request
start = time.time()
response = requests.get(f'{{base_url}}/posts/1')
elapsed = (time.time() - start) * 1000
test_results.append({{
'test': 'GET /posts/1',
'status_code': response.status_code,
'success': response.status_code == 200,
'response_time_ms': elapsed,
'has_data': 'id' in response.json() if response.status_code == 200 else False
}})
# Test 2: POST request
post_data = {{'title': 'Test Post', 'body': 'Test Body', 'userId': 1}}
start = time.time()
response = requests.post(f'{{base_url}}/posts', json=post_data)
elapsed = (time.time() - start) * 1000
test_results.append({{
'test': 'POST /posts',
'status_code': response.status_code,
'success': response.status_code in [200, 201],
'response_time_ms': elapsed,
'created_id': response.json().get('id') if response.status_code in [200, 201] else None
}})
# Test 3: PUT request
put_data = {{'title': 'Updated Post', 'body': 'Updated Body', 'userId': 1}}
start = time.time()
response = requests.put(f'{{base_url}}/posts/1', json=put_data)
elapsed = (time.time() - start) * 1000
test_results.append({{
'test': 'PUT /posts/1',
'status_code': response.status_code,
'success': response.status_code == 200,
'response_time_ms': elapsed
}})
# Test 4: DELETE request
start = time.time()
response = requests.delete(f'{{base_url}}/posts/1')
elapsed = (time.time() - start) * 1000
test_results.append({{
'test': 'DELETE /posts/1',
'status_code': response.status_code,
'success': response.status_code in [200, 204],
'response_time_ms': elapsed
}})
# Summary
summary = {{
'total_tests': len(test_results),
'passed': sum(1 for t in test_results if t['success']),
'failed': sum(1 for t in test_results if not t['success']),
'avg_response_time_ms': sum(t['response_time_ms'] for t in test_results) / len(test_results),
'tests': test_results
}}
# Save results
with open('/workspace/test_suite_results.json', 'w') as f:
json.dump(summary, f, indent=2)
print(f"Test Suite Results:")
print(f"Total: {{summary['total_tests']}}, Passed: {{summary['passed']}}, Failed: {{summary['failed']}}")
print(f"Average Response Time: {{summary['avg_response_time_ms']:.2f}}ms")
""")
# Download results
results_json = sandbox.files.read("/workspace/test_suite_results.json")
return json.loads(results_json)
# Example
results = run_api_test_suite("https://jsonplaceholder.typicode.com")
print(f"Passed: {results['passed']}/{results['total_tests']}")
Load Testing
Perform load testing on APIs:- Python
- JavaScript/TypeScript
Copy
from hopx_ai import Sandbox
import json
def load_test_api(url: str, num_requests: int = 100):
"""Perform load testing on an API"""
with Sandbox.create(template="code-interpreter") as sandbox:
sandbox.commands.run("pip install requests --quiet")
result = sandbox.run_code(f"""
import requests
import json
import time
import statistics
url = '{url}'
num_requests = {num_requests}
response_times = []
status_codes = []
errors = []
print(f"Running {{num_requests}} requests to {{url}}...")
for i in range(num_requests):
try:
start = time.time()
response = requests.get(url, timeout=10)
elapsed = (time.time() - start) * 1000
response_times.append(elapsed)
status_codes.append(response.status_code)
except Exception as e:
errors.append(str(e))
# Calculate statistics
# Build status code distribution manually
status_dist = dict()
for code in set(status_codes):
status_dist[code] = status_codes.count(code)
if response_times:
stats = {{
'total_requests': num_requests,
'successful_requests': len(response_times),
'failed_requests': len(errors),
'min_response_time_ms': min(response_times),
'max_response_time_ms': max(response_times),
'avg_response_time_ms': statistics.mean(response_times),
'median_response_time_ms': statistics.median(response_times),
'p95_response_time_ms': sorted(response_times)[int(len(response_times) * 0.95)] if response_times else 0,
'p99_response_time_ms': sorted(response_times)[int(len(response_times) * 0.99)] if response_times else 0,
'status_code_distribution': status_dist
}}
else:
stats = {{'error': 'All requests failed'}}
# Save results
with open('/workspace/load_test_results.json', 'w') as f:
json.dump(stats, f, indent=2)
print(f"\\nLoad Test Results:")
print(f"Successful: {{stats.get('successful_requests', 0)}}/{{num_requests}}")
print(f"Average Response Time: {{stats.get('avg_response_time_ms', 0):.2f}}ms")
""")
# Download results
results_json = sandbox.files.read("/workspace/load_test_results.json")
return json.loads(results_json)
# Example
results = load_test_api("https://jsonplaceholder.typicode.com/posts/1", num_requests=50)
print(f"Average response time: {results['avg_response_time_ms']:.2f}ms")
print(f"P95 response time: {results['p95_response_time_ms']:.2f}ms")

