""" Script untuk test Python API secara lokal """ import requests import base64 import sys import json def test_health(api_url): """Test health check endpoint""" print(f"\n{'='*50}") print("Testing /health endpoint...") print(f"{'='*50}") try: response = requests.get(f"{api_url}/health", timeout=10) print(f"Status Code: {response.status_code}") print(f"Response:\n{json.dumps(response.json(), indent=2)}") return response.status_code == 200 except Exception as e: print(f"Error: {e}") return False def test_classify(api_url, image_path): """Test classification endpoint""" print(f"\n{'='*50}") print("Testing /classify endpoint...") print(f"{'='*50}") try: # Read and encode image with open(image_path, 'rb') as f: img_data = base64.b64encode(f.read()).decode() # Prepare request payload = { 'image': f'data:image/jpeg;base64,{img_data}' } # Send request print(f"Sending image: {image_path}") response = requests.post( f"{api_url}/classify", json=payload, timeout=30 ) print(f"Status Code: {response.status_code}") result = response.json() print(f"\nPrediction Result:") print(f" Class: {result.get('predicted_class')}") print(f" Confidence: {result.get('confidence', 0)*100:.2f}%") print(f" Mode: {result.get('mode', 'unknown')}") print(f"\n Probabilities:") for cls, prob in result.get('probabilities', {}).items(): print(f" {cls}: {prob*100:.2f}%") return response.status_code == 200 except FileNotFoundError: print(f"Error: Image file not found: {image_path}") return False except Exception as e: print(f"Error: {e}") return False def main(): # Configuration API_URL = "http://localhost:5000" # Change this to your deployed URL if len(sys.argv) > 1: API_URL = sys.argv[1] print(f"\n{'#'*50}") print(f"# Testing Palm Seedling Classifier API") print(f"# API URL: {API_URL}") print(f"{'#'*50}") # Test health endpoint health_ok = test_health(API_URL) if not health_ok: print("\n❌ Health check failed! Please check if the API is running.") return print("\n✓ Health check passed!") # Test classification (only if image provided) if len(sys.argv) > 2: image_path = sys.argv[2] classify_ok = test_classify(API_URL, image_path) if classify_ok: print("\n✓ Classification test passed!") else: print("\n❌ Classification test failed!") else: print("\n⚠ No image provided for classification test.") print("Usage: python test_local.py [API_URL] [IMAGE_PATH]") print("Example: python test_local.py http://localhost:5000 bibit.jpg") print("\n" + "="*50) print("Test completed!") print("="*50 + "\n") if __name__ == "__main__": main()