Files
moreminimore-marketing/backend/test/test_seo_tools.py
Kunthawat Greethong c35fa52117 Base code
2026-01-08 22:39:53 +07:00

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())