#!/usr/bin/env python3
"""
UniGUI-MCP 간단한 통합 테스트
핵심 기능들만 테스트하여 빠른 검증
"""
import asyncio
import json
import time
import logging
import sys
import traceback
# 모듈 임포트
try:
from unigui_web_module import WebModuleMCP
except ImportError as e:
print(f"❌ 모듈 임포트 실패: {e}")
sys.exit(1)
# 로깅 설정
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
async def test_basic_functionality():
"""기본 기능 테스트"""
print("🧪 UniGUI-MCP 기본 기능 테스트 시작...")
mcp_server = WebModuleMCP()
test_results = {}
try:
# 초기화 테스트
print("\n🔧 초기화 테스트...")
init_result = await mcp_server.initialize()
test_results["initialization"] = init_result
print(f"초기화 결과: {init_result}")
if not init_result:
print("❌ 초기화 실패로 테스트 중단")
return test_results
# 코드 생성 세션 테스트
print("\n📝 코드 생성 세션 테스트...")
session_options = {
"outputPath": "/tmp/test_codegen",
"testNamePrefix": "SimpleTest",
"includeComments": True
}
session_result = await mcp_server.start_codegen_session(session_options)
test_results["codegen_session"] = session_result.get("success", False)
print(f"세션 생성: {'성공' if session_result.get('success', False) else '실패'}")
# 브라우저 네비게이션 테스트
print("\n🌐 브라우저 네비게이션 테스트...")
nav_result = await mcp_server.playwright_navigate(
url="https://httpbin.org/get",
browserType="chromium",
headless=True
)
test_results["navigation"] = nav_result.get("success", False)
print(f"네비게이션: {'성공' if nav_result.get('success', False) else '실패'}")
if nav_result.get("success", False):
# 스크린샷 테스트
print("\n📸 스크린샷 테스트...")
screenshot_result = await mcp_server.playwright_screenshot(
name="simple_test",
storeBase64=True,
savePng=False
)
test_results["screenshot"] = screenshot_result.get("success", False)
print(f"스크린샷: {'성공' if screenshot_result.get('success', False) else '실패'}")
# 텍스트 가져오기 테스트
print("\n📄 텍스트 가져오기 테스트...")
text_result = await mcp_server.playwright_get_visible_text()
test_results["get_text"] = text_result.get("success", False)
print(f"텍스트 가져오기: {'성공' if text_result.get('success', False) else '실패'}")
# HTTP GET 요청 테스트
print("\n🌐 HTTP GET 요청 테스트...")
get_result = await mcp_server.playwright_get("https://httpbin.org/get")
test_results["http_get"] = get_result.get("success", False)
print(f"HTTP GET: {'성공' if get_result.get('success', False) else '실패'}")
# 브라우저 닫기
print("\n🔚 브라우저 닫기...")
close_result = await mcp_server.playwright_close()
test_results["close_browser"] = close_result.get("success", False)
print(f"브라우저 닫기: {'성공' if close_result.get('success', False) else '실패'}")
except Exception as e:
print(f"❌ 테스트 중 오류 발생: {e}")
traceback.print_exc()
test_results["error"] = str(e)
return test_results
def print_test_report(results):
"""테스트 결과 보고서 출력"""
print("\n" + "="*50)
print("📋 UniGUI-MCP 기본 테스트 결과")
print("="*50)
total_tests = 0
passed_tests = 0
for test_name, success in results.items():
if test_name == "error":
continue
total_tests += 1
if success:
passed_tests += 1
print(f"✅ {test_name}: 통과")
else:
print(f"❌ {test_name}: 실패")
if "error" in results:
print(f"⚠️ 에러 발생: {results['error']}")
success_rate = (passed_tests / total_tests * 100) if total_tests > 0 else 0
print(f"\n📊 전체 결과:")
print(f" 총 테스트: {total_tests}개")
print(f" 통과: {passed_tests}개")
print(f" 실패: {total_tests - passed_tests}개")
print(f" 성공률: {success_rate:.1f}%")
if success_rate >= 80:
print(f"\n🎉 테스트 성공! UniGUI-MCP가 정상 작동합니다.")
return True
else:
print(f"\n⚠️ 테스트 부분 실패. 추가 점검이 필요합니다.")
return False
async def main():
"""메인 테스트 실행"""
try:
results = await test_basic_functionality()
success = print_test_report(results)
return 0 if success else 1
except KeyboardInterrupt:
print("\n⚠️ 사용자에 의해 테스트가 중단되었습니다.")
return 1
except Exception as e:
print(f"\n❌ 예상치 못한 오류 발생: {e}")
traceback.print_exc()
return 1
if __name__ == "__main__":
sys.exit(asyncio.run(main()))