179 lines
6.8 KiB
Python
179 lines
6.8 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
Test Script for AI SEO Tools API
|
|
|
|
This script tests all the migrated SEO tools endpoints to ensure
|
|
they are working correctly after migration to FastAPI.
|
|
"""
|
|
|
|
import asyncio
|
|
import aiohttp
|
|
import json
|
|
from datetime import datetime
|
|
|
|
BASE_URL = "http://localhost:8000"
|
|
|
|
async def test_endpoint(session, endpoint, method="GET", data=None):
|
|
"""Test a single endpoint"""
|
|
url = f"{BASE_URL}{endpoint}"
|
|
|
|
try:
|
|
if method == "POST":
|
|
async with session.post(url, json=data) as response:
|
|
result = await response.json()
|
|
return {
|
|
"endpoint": endpoint,
|
|
"status": response.status,
|
|
"success": response.status == 200,
|
|
"response": result
|
|
}
|
|
else:
|
|
async with session.get(url) as response:
|
|
result = await response.json()
|
|
return {
|
|
"endpoint": endpoint,
|
|
"status": response.status,
|
|
"success": response.status == 200,
|
|
"response": result
|
|
}
|
|
except Exception as e:
|
|
return {
|
|
"endpoint": endpoint,
|
|
"status": 0,
|
|
"success": False,
|
|
"error": str(e)
|
|
}
|
|
|
|
async def run_seo_tools_tests():
|
|
"""Run comprehensive tests for all SEO tools"""
|
|
|
|
print("🚀 Starting AI SEO Tools API Tests")
|
|
print("=" * 50)
|
|
|
|
async with aiohttp.ClientSession() as session:
|
|
|
|
# Test health endpoint
|
|
print("\n1. Testing Health Endpoints...")
|
|
health_tests = [
|
|
("/api/seo/health", "GET", None),
|
|
("/api/seo/tools/status", "GET", None)
|
|
]
|
|
|
|
for endpoint, method, data in health_tests:
|
|
result = await test_endpoint(session, endpoint, method, data)
|
|
status = "✅ PASS" if result["success"] else "❌ FAIL"
|
|
print(f" {status} {endpoint} - Status: {result['status']}")
|
|
|
|
# Test meta description generation
|
|
print("\n2. Testing Meta Description Generation...")
|
|
meta_desc_data = {
|
|
"keywords": ["SEO", "content marketing", "digital strategy"],
|
|
"tone": "Professional",
|
|
"search_intent": "Informational Intent",
|
|
"language": "English"
|
|
}
|
|
|
|
result = await test_endpoint(session, "/api/seo/meta-description", "POST", meta_desc_data)
|
|
status = "✅ PASS" if result["success"] else "❌ FAIL"
|
|
print(f" {status} Meta Description Generation - Status: {result['status']}")
|
|
|
|
if result["success"]:
|
|
data = result["response"].get("data", {})
|
|
descriptions = data.get("meta_descriptions", [])
|
|
print(f" Generated {len(descriptions)} meta descriptions")
|
|
|
|
# Test PageSpeed analysis
|
|
print("\n3. Testing PageSpeed Analysis...")
|
|
pagespeed_data = {
|
|
"url": "https://example.com",
|
|
"strategy": "DESKTOP",
|
|
"categories": ["performance"]
|
|
}
|
|
|
|
result = await test_endpoint(session, "/api/seo/pagespeed-analysis", "POST", pagespeed_data)
|
|
status = "✅ PASS" if result["success"] else "❌ FAIL"
|
|
print(f" {status} PageSpeed Analysis - Status: {result['status']}")
|
|
|
|
# Test sitemap analysis
|
|
print("\n4. Testing Sitemap Analysis...")
|
|
sitemap_data = {
|
|
"sitemap_url": "https://www.google.com/sitemap.xml",
|
|
"analyze_content_trends": False,
|
|
"analyze_publishing_patterns": False
|
|
}
|
|
|
|
result = await test_endpoint(session, "/api/seo/sitemap-analysis", "POST", sitemap_data)
|
|
status = "✅ PASS" if result["success"] else "❌ FAIL"
|
|
print(f" {status} Sitemap Analysis - Status: {result['status']}")
|
|
|
|
# Test OpenGraph generation
|
|
print("\n5. Testing OpenGraph Generation...")
|
|
og_data = {
|
|
"url": "https://example.com",
|
|
"title_hint": "Test Page",
|
|
"description_hint": "Test description",
|
|
"platform": "General"
|
|
}
|
|
|
|
result = await test_endpoint(session, "/api/seo/opengraph-tags", "POST", og_data)
|
|
status = "✅ PASS" if result["success"] else "❌ FAIL"
|
|
print(f" {status} OpenGraph Generation - Status: {result['status']}")
|
|
|
|
# Test on-page SEO analysis
|
|
print("\n6. Testing On-Page SEO Analysis...")
|
|
onpage_data = {
|
|
"url": "https://example.com",
|
|
"target_keywords": ["test", "example"],
|
|
"analyze_images": True,
|
|
"analyze_content_quality": True
|
|
}
|
|
|
|
result = await test_endpoint(session, "/api/seo/on-page-analysis", "POST", onpage_data)
|
|
status = "✅ PASS" if result["success"] else "❌ FAIL"
|
|
print(f" {status} On-Page SEO Analysis - Status: {result['status']}")
|
|
|
|
# Test technical SEO analysis
|
|
print("\n7. Testing Technical SEO Analysis...")
|
|
technical_data = {
|
|
"url": "https://example.com",
|
|
"crawl_depth": 2,
|
|
"include_external_links": True,
|
|
"analyze_performance": True
|
|
}
|
|
|
|
result = await test_endpoint(session, "/api/seo/technical-seo", "POST", technical_data)
|
|
status = "✅ PASS" if result["success"] else "❌ FAIL"
|
|
print(f" {status} Technical SEO Analysis - Status: {result['status']}")
|
|
|
|
# Test workflow endpoints
|
|
print("\n8. Testing Workflow Endpoints...")
|
|
|
|
# Website audit workflow
|
|
audit_data = {
|
|
"website_url": "https://example.com",
|
|
"workflow_type": "complete_audit",
|
|
"target_keywords": ["test", "example"]
|
|
}
|
|
|
|
result = await test_endpoint(session, "/api/seo/workflow/website-audit", "POST", audit_data)
|
|
status = "✅ PASS" if result["success"] else "❌ FAIL"
|
|
print(f" {status} Website Audit Workflow - Status: {result['status']}")
|
|
|
|
# Content analysis workflow
|
|
content_data = {
|
|
"website_url": "https://example.com",
|
|
"workflow_type": "content_analysis",
|
|
"target_keywords": ["content", "strategy"]
|
|
}
|
|
|
|
result = await test_endpoint(session, "/api/seo/workflow/content-analysis", "POST", content_data)
|
|
status = "✅ PASS" if result["success"] else "❌ FAIL"
|
|
print(f" {status} Content Analysis Workflow - Status: {result['status']}")
|
|
|
|
print("\n" + "=" * 50)
|
|
print("🎉 SEO Tools API Testing Completed!")
|
|
print("\nNote: Some tests may show connection errors if the server is not running.")
|
|
print("Start the server with: uvicorn app:app --reload --host 0.0.0.0 --port 8000")
|
|
|
|
if __name__ == "__main__":
|
|
asyncio.run(run_seo_tools_tests()) |