Spaces:
Sleeping
Sleeping
| """ | |
| Test script for SuperKart Backend API | |
| Simple test script to verify the API endpoints are working correctly. | |
| Run this after starting the Flask application. | |
| """ | |
| import requests | |
| from typing import Any, Dict, List, Tuple | |
| # API base URL | |
| BASE_URL = "http://localhost:7860" | |
| def test_health_check() -> bool: | |
| """Test the health check endpoint.""" | |
| print("π Testing health check endpoint...") | |
| try: | |
| response = requests.get(f"{BASE_URL}/") | |
| print(f"Status: {response.status_code}") | |
| print(f"Response: {response.json()}") | |
| return response.status_code == 200 | |
| except Exception as e: | |
| print(f"β Health check failed: {e}") | |
| return False | |
| def test_features_endpoint() -> bool: | |
| """Test the features information endpoint.""" | |
| print("\nπ Testing features endpoint...") | |
| try: | |
| response = requests.get(f"{BASE_URL}/features") | |
| print(f"Status: {response.status_code}") | |
| data = response.json() | |
| print(f"Required features: {len(data['required_features'])}") | |
| return response.status_code == 200 | |
| except Exception as e: | |
| print(f"β Features endpoint failed: {e}") | |
| return False | |
| def test_single_prediction() -> bool: | |
| """Test single prediction endpoint.""" | |
| print("\nπ Testing single prediction endpoint...") | |
| # Example input data | |
| test_data: Dict[str, Any] = { | |
| "Product_Weight": 12.66, | |
| "Product_Sugar_Content": "Low Sugar", | |
| "Product_Allocated_Area": 0.027, | |
| "Product_Type": "Frozen Foods", | |
| "Product_MRP": 117.08, | |
| "Store_Establishment_Year": 2009, | |
| "Store_Size": "Medium", | |
| "Store_Location_City_Type": "Tier 2", | |
| "Store_Type": "Supermarket Type2", | |
| } | |
| try: | |
| response = requests.post(f"{BASE_URL}/predict", json=test_data) | |
| print(f"Status: {response.status_code}") | |
| if response.status_code == 200: | |
| result = response.json() | |
| print(f"Predicted sales: ${result['predicted_sales']:.2f}") | |
| return True | |
| else: | |
| print(f"Error: {response.json()}") | |
| return False | |
| except Exception as e: | |
| print(f"β Single prediction failed: {e}") | |
| return False | |
| def test_batch_prediction() -> bool: | |
| """Test batch prediction endpoint.""" | |
| print("\nπ Testing batch prediction endpoint...") | |
| # Example batch data | |
| batch_data: Dict[str, List[Dict[str, Any]]] = { | |
| "predictions": [ | |
| { | |
| "Product_Weight": 12.66, | |
| "Product_Sugar_Content": "Low Sugar", | |
| "Product_Allocated_Area": 0.027, | |
| "Product_Type": "Frozen Foods", | |
| "Product_MRP": 117.08, | |
| "Store_Establishment_Year": 2009, | |
| "Store_Size": "Medium", | |
| "Store_Location_City_Type": "Tier 2", | |
| "Store_Type": "Supermarket Type2", | |
| }, | |
| { | |
| "Product_Weight": 16.54, | |
| "Product_Sugar_Content": "Low Sugar", | |
| "Product_Allocated_Area": 0.144, | |
| "Product_Type": "Dairy", | |
| "Product_MRP": 171.43, | |
| "Store_Establishment_Year": 1999, | |
| "Store_Size": "Medium", | |
| "Store_Location_City_Type": "Tier 1", | |
| "Store_Type": "Departmental Store", | |
| }, | |
| ], | |
| } | |
| try: | |
| response = requests.post(f"{BASE_URL}/predict/batch", json=batch_data) | |
| print(f"Status: {response.status_code}") | |
| if response.status_code == 200: | |
| result = response.json() | |
| print(f"Successful predictions: {result['successful_predictions']}") | |
| print(f"Failed predictions: {result['failed_predictions']}") | |
| # Print each prediction value | |
| if "results" in result: | |
| for pred in result["results"]: | |
| idx = pred.get("index", "?") | |
| val = pred.get("predicted_sales", "?") | |
| print(f"Prediction {idx}: ${val:.2f}") | |
| return True | |
| else: | |
| print(f"Error: {response.json()}") | |
| return False | |
| except Exception as e: | |
| print(f"β Batch prediction failed: {e}") | |
| return False | |
| def run_all_tests() -> None: | |
| """Run all API tests.""" | |
| print("π Starting SuperKart API Tests\n") | |
| tests: List[Tuple[str, Any]] = [ | |
| ("Health Check", test_health_check), | |
| ("Features Endpoint", test_features_endpoint), | |
| ("Single Prediction", test_single_prediction), | |
| ("Batch Prediction", test_batch_prediction), | |
| ] | |
| results: List[Tuple[str, bool]] = [] | |
| for test_name, test_func in tests: | |
| result = test_func() | |
| results.append((test_name, result)) | |
| print("β PASSED" if result else "β FAILED") | |
| print(f"\nπ Test Summary:") | |
| passed = sum(1 for _, result in results if result) | |
| total = len(results) | |
| print(f"Passed: {passed}/{total}") | |
| if passed == total: | |
| print("π All tests passed!") | |
| else: | |
| print("β οΈ Some tests failed. Check the API server.") | |
| if __name__ == "__main__": | |
| run_all_tests() | |