| | """ |
| | Test client for the Sema Translation API |
| | """ |
| |
|
| | import requests |
| | import json |
| | import time |
| |
|
| | def test_api_endpoint(base_url="http://localhost:8000"): |
| | """Test the translation API endpoints""" |
| | |
| | print("π§ͺ Testing Sema Translation API\n") |
| | |
| | |
| | print("1οΈβ£ Testing health check endpoint...") |
| | try: |
| | response = requests.get(f"{base_url}/") |
| | if response.status_code == 200: |
| | data = response.json() |
| | print(f"β
Health check passed: {data}") |
| | else: |
| | print(f"β Health check failed: {response.status_code}") |
| | return False |
| | except Exception as e: |
| | print(f"β Health check error: {e}") |
| | return False |
| | |
| | |
| | print("\n2οΈβ£ Testing translation with auto-detection...") |
| | test_data = { |
| | "text": "Habari ya asubuhi, ulimwengu", |
| | "target_language": "eng_Latn" |
| | } |
| | |
| | try: |
| | response = requests.post( |
| | f"{base_url}/translate", |
| | headers={"Content-Type": "application/json"}, |
| | data=json.dumps(test_data) |
| | ) |
| | |
| | if response.status_code == 200: |
| | data = response.json() |
| | print(f"β
Auto-detection translation successful:") |
| | print(f" π Original: {test_data['text']}") |
| | print(f" π Detected source: {data['source_language']}") |
| | print(f" π― Target: {data['target_language']}") |
| | print(f" β¨ Translation: {data['translated_text']}") |
| | print(f" β±οΈ Inference time: {data['inference_time']:.3f}s") |
| | else: |
| | print(f"β Auto-detection translation failed: {response.status_code}") |
| | print(f" Error: {response.text}") |
| | return False |
| | except Exception as e: |
| | print(f"β Auto-detection translation error: {e}") |
| | return False |
| | |
| | |
| | print("\n3οΈβ£ Testing translation with specified source language...") |
| | test_data_with_source = { |
| | "text": "WΔ© mwega?", |
| | "source_language": "kik_Latn", |
| | "target_language": "eng_Latn" |
| | } |
| | |
| | try: |
| | response = requests.post( |
| | f"{base_url}/translate", |
| | headers={"Content-Type": "application/json"}, |
| | data=json.dumps(test_data_with_source) |
| | ) |
| | |
| | if response.status_code == 200: |
| | data = response.json() |
| | print(f"β
Specified source translation successful:") |
| | print(f" π Original: {test_data_with_source['text']}") |
| | print(f" π Source: {data['source_language']}") |
| | print(f" π― Target: {data['target_language']}") |
| | print(f" β¨ Translation: {data['translated_text']}") |
| | print(f" β±οΈ Inference time: {data['inference_time']:.3f}s") |
| | else: |
| | print(f"β Specified source translation failed: {response.status_code}") |
| | print(f" Error: {response.text}") |
| | return False |
| | except Exception as e: |
| | print(f"β Specified source translation error: {e}") |
| | return False |
| | |
| | |
| | print("\n4οΈβ£ Testing error handling (empty text)...") |
| | test_data_empty = { |
| | "text": "", |
| | "target_language": "eng_Latn" |
| | } |
| | |
| | try: |
| | response = requests.post( |
| | f"{base_url}/translate", |
| | headers={"Content-Type": "application/json"}, |
| | data=json.dumps(test_data_empty) |
| | ) |
| | |
| | if response.status_code == 400: |
| | print("β
Empty text error handling works correctly") |
| | else: |
| | print(f"β Empty text error handling failed: {response.status_code}") |
| | return False |
| | except Exception as e: |
| | print(f"β Empty text error handling error: {e}") |
| | return False |
| | |
| | |
| | print("\n5οΈβ£ Testing multiple translations for performance...") |
| | test_texts = [ |
| | {"text": "Jambo", "target_language": "eng_Latn"}, |
| | {"text": "Asante sana", "target_language": "eng_Latn"}, |
| | {"text": "Karibu", "target_language": "eng_Latn"}, |
| | {"text": "Pole sana", "target_language": "eng_Latn"}, |
| | {"text": "Tutaonana", "target_language": "eng_Latn"} |
| | ] |
| | |
| | total_time = 0 |
| | successful_translations = 0 |
| | |
| | for i, test_data in enumerate(test_texts, 1): |
| | try: |
| | start_time = time.time() |
| | response = requests.post( |
| | f"{base_url}/translate", |
| | headers={"Content-Type": "application/json"}, |
| | data=json.dumps(test_data) |
| | ) |
| | end_time = time.time() |
| | |
| | if response.status_code == 200: |
| | data = response.json() |
| | request_time = end_time - start_time |
| | total_time += request_time |
| | successful_translations += 1 |
| | |
| | print(f" {i}. '{test_data['text']}' β '{data['translated_text']}' " |
| | f"({request_time:.3f}s)") |
| | else: |
| | print(f" {i}. Failed: {response.status_code}") |
| | except Exception as e: |
| | print(f" {i}. Error: {e}") |
| | |
| | if successful_translations > 0: |
| | avg_time = total_time / successful_translations |
| | print(f"\nπ Performance Summary:") |
| | print(f" β
Successful translations: {successful_translations}/{len(test_texts)}") |
| | print(f" β±οΈ Average request time: {avg_time:.3f}s") |
| | print(f" π Total time: {total_time:.3f}s") |
| | |
| | return True |
| |
|
| | def test_api_documentation(base_url="http://localhost:8000"): |
| | """Test API documentation endpoints""" |
| | |
| | print("\nπ Testing API documentation...") |
| | |
| | |
| | try: |
| | response = requests.get(f"{base_url}/docs") |
| | if response.status_code == 200: |
| | print("β
OpenAPI docs accessible at /docs") |
| | else: |
| | print(f"β OpenAPI docs failed: {response.status_code}") |
| | except Exception as e: |
| | print(f"β OpenAPI docs error: {e}") |
| | |
| | |
| | try: |
| | response = requests.get(f"{base_url}/openapi.json") |
| | if response.status_code == 200: |
| | print("β
OpenAPI JSON accessible at /openapi.json") |
| | else: |
| | print(f"β OpenAPI JSON failed: {response.status_code}") |
| | except Exception as e: |
| | print(f"β OpenAPI JSON error: {e}") |
| |
|
| | if __name__ == "__main__": |
| | import sys |
| | |
| | |
| | base_url = "http://localhost:8000" |
| | if len(sys.argv) > 1: |
| | base_url = sys.argv[1] |
| | |
| | print(f"π― Testing API at: {base_url}") |
| | print("β οΈ Make sure the API server is running before running this test!\n") |
| | |
| | |
| | success = test_api_endpoint(base_url) |
| | test_api_documentation(base_url) |
| | |
| | if success: |
| | print("\nπ All API tests passed!") |
| | else: |
| | print("\nβ Some API tests failed!") |
| | sys.exit(1) |
| |
|