Base code
This commit is contained in:
179
backend/test/test_seo_tools.py
Normal file
179
backend/test/test_seo_tools.py
Normal file
@@ -0,0 +1,179 @@
|
||||
#!/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())
|
||||
Reference in New Issue
Block a user