#!/usr/bin/env python3
"""
Web Search MCP 테스트 스크립트
"""
import sys
import asyncio
import logging
# 로깅 설정
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
def test_imports():
"""모듈 임포트 테스트"""
try:
from web_search_base import SearchEngine, SearchRequest, SearchResponse
logger.info("✅ web_search_base 모듈 임포트 성공")
from web_search_antibot import EnhancedAntiBotManager
logger.info("✅ web_search_antibot 모듈 임포트 성공")
from web_search_analyzer import ContentAnalyzer
logger.info("✅ web_search_analyzer 모듈 임포트 성공")
try:
from web_search_playwright import PlaywrightManager
logger.info("✅ web_search_playwright 모듈 임포트 성공")
except ImportError as e:
logger.warning(f"⚠️ web_search_playwright 모듈 임포트 실패 (Playwright 없음): {e}")
from web_search_engine import AdvancedSearchEngineHandler
logger.info("✅ web_search_engine 모듈 임포트 성공")
try:
from web_search_main import CompleteWebSearchMCP, WebSearchMCPServer
logger.info("✅ web_search_main 모듈 임포트 성공")
except Exception as e:
logger.error(f"❌ web_search_main 모듈 임포트 실패: {e}")
return False
logger.info("🎯 모든 핵심 모듈 임포트 성공!")
return True
except Exception as e:
logger.error(f"❌ 모듈 임포트 실패: {e}")
import traceback
traceback.print_exc()
return False
def test_basic_functionality():
"""기본 기능 테스트"""
try:
from web_search_base import SearchEngine, SearchRequest
from web_search_antibot import EnhancedAntiBotManager
from web_search_analyzer import ContentAnalyzer
# 1. SearchRequest 생성 테스트
request = SearchRequest(
query="Python 프로그래밍",
engines=[SearchEngine.GOOGLE],
num_results=5
)
logger.info(f"✅ SearchRequest 생성 성공: {request.query}")
# 2. AntiBotManager 테스트
antibot = EnhancedAntiBotManager()
headers = antibot.get_optimized_headers(SearchEngine.GOOGLE)
logger.info(f"✅ AntiBotManager 헤더 생성 성공: {len(headers)}개 헤더")
# 3. ContentAnalyzer 테스트
analyzer = ContentAnalyzer()
test_content = "<html><body><h1>테스트 제목</h1><p>테스트 내용입니다.</p></body></html>"
quality, score, analysis = analyzer.analyze_content_quality(
test_content, "https://example.com"
)
logger.info(f"✅ ContentAnalyzer 분석 성공: 품질={quality}, 점수={score:.2f}")
# 4. 캐시 키 생성 테스트
cache_key = request.get_cache_key()
logger.info(f"✅ 캐시 키 생성 성공: {cache_key[:16]}...")
logger.info("🎯 기본 기능 테스트 성공!")
return True
except Exception as e:
logger.error(f"❌ 기본 기능 테스트 실패: {e}")
import traceback
traceback.print_exc()
return False
async def test_search_engine_handler():
"""검색 엔진 핸들러 테스트"""
try:
from web_search_base import SearchEngine, SearchRequest
from web_search_antibot import EnhancedAntiBotManager
from web_search_playwright import PlaywrightManager
from web_search_engine import AdvancedSearchEngineHandler
# 매니저 초기화
antibot = EnhancedAntiBotManager()
playwright = PlaywrightManager() # 초기화하지 않음
# 핸들러 생성
handler = AdvancedSearchEngineHandler(antibot, playwright)
# URL 생성 테스트
request = SearchRequest(
query="Python tutorial",
engines=[SearchEngine.GOOGLE],
num_results=5
)
url = handler.build_search_url(request, SearchEngine.GOOGLE)
logger.info(f"✅ Google 검색 URL 생성 성공: {url[:50]}...")
url2 = handler.build_search_url(request, SearchEngine.GITHUB)
logger.info(f"✅ GitHub 검색 URL 생성 성공: {url2[:50]}...")
logger.info("🎯 검색 엔진 핸들러 테스트 성공!")
return True
except Exception as e:
logger.error(f"❌ 검색 엔진 핸들러 테스트 실패: {e}")
import traceback
traceback.print_exc()
return False
def test_cache_system():
"""캐시 시스템 테스트"""
try:
from web_search_main import SearchCache
from web_search_base import SearchRequest, SearchResponse, SearchResult, SearchEngine, SearchResultType
from datetime import datetime
# 캐시 초기화
cache = SearchCache(db_path="test_cache.db", ttl_hours=1)
# 테스트 데이터 생성
test_result = SearchResult(
title="테스트 제목",
url="https://example.com",
snippet="테스트 스니펫",
result_type=SearchResultType.ORGANIC,
ranking=1,
timestamp=datetime.now()
)
test_response = SearchResponse(
query="테스트 쿼리",
results=[test_result],
total_results=1,
search_time=0.5,
engines_used=[SearchEngine.GOOGLE]
)
# 캐시 저장 및 조회 테스트
cache_key = "test_key_123"
cache.save_results(cache_key, test_response)
logger.info("✅ 캐시 저장 성공")
cached_response = cache.get_cached_results(cache_key)
if cached_response and cached_response.query == "테스트 쿼리":
logger.info("✅ 캐시 조회 성공")
else:
logger.warning("⚠️ 캐시 조회 실패")
# 정리
cache.cleanup_expired()
logger.info("✅ 캐시 정리 완료")
logger.info("🎯 캐시 시스템 테스트 성공!")
return True
except Exception as e:
logger.error(f"❌ 캐시 시스템 테스트 실패: {e}")
import traceback
traceback.print_exc()
return False
def main():
"""메인 테스트 함수"""
logger.info("🚀 Web Search MCP 테스트 시작")
test_results = []
# 1. 모듈 임포트 테스트
logger.info("\n📦 모듈 임포트 테스트")
test_results.append(("모듈 임포트", test_imports()))
# 2. 기본 기능 테스트
logger.info("\n⚙️ 기본 기능 테스트")
test_results.append(("기본 기능", test_basic_functionality()))
# 3. 검색 엔진 핸들러 테스트
logger.info("\n🔍 검색 엔진 핸들러 테스트")
test_results.append(("검색 엔진 핸들러", asyncio.run(test_search_engine_handler())))
# 4. 캐시 시스템 테스트
logger.info("\n💾 캐시 시스템 테스트")
test_results.append(("캐시 시스템", test_cache_system()))
# 결과 요약
logger.info("\n📊 테스트 결과 요약")
passed = 0
total = len(test_results)
for test_name, result in test_results:
status = "✅ 통과" if result else "❌ 실패"
logger.info(f" {test_name}: {status}")
if result:
passed += 1
logger.info(f"\n🏆 전체 결과: {passed}/{total} 테스트 통과")
if passed == total:
logger.info("🎉 모든 테스트 성공! Web Search MCP가 정상적으로 구현되었습니다.")
return True
else:
logger.warning(f"⚠️ {total - passed}개 테스트 실패. 추가 작업이 필요합니다.")
return False
if __name__ == "__main__":
success = main()
sys.exit(0 if success else 1)