#!/usr/bin/env python3 """ Gradio 앱 기본 기능 테스트 스크립트 """ import os import sys import logging # 로깅 설정 logging.basicConfig(level=logging.INFO) logger = logging.getLogger(__name__) def test_imports(): """필수 모듈 import 테스트""" try: import gradio as gr logger.info(f"✓ Gradio 버전: {gr.__version__}") import torch logger.info(f"✓ PyTorch 버전: {torch.__version__}") import whisper logger.info("✓ OpenAI Whisper 가져오기 성공") import google.generativeai as genai logger.info("✓ Google Generative AI 가져오기 성공") from stt_processor import STTProcessor logger.info("✓ STTProcessor 모듈 가져오기 성공") return True except ImportError as e: logger.error(f"❌ 모듈 import 실패: {e}") return False def test_stt_processor_init(): """STTProcessor 초기화 테스트 (API 키 없이)""" try: from stt_processor import STTProcessor # API 키 없이 초기화 시도 (예상되는 오류) try: processor = STTProcessor() logger.error("❌ API 키 없이 초기화 성공 (예상되지 않음)") return False except ValueError as e: logger.info(f"✓ API 키 검증 로직 정상 작동: {e}") return True except Exception as e: logger.error(f"❌ STTProcessor 테스트 실패: {e}") return False def test_gradio_interface(): """Gradio 인터페이스 생성 테스트""" try: from app import create_interface # 인터페이스 생성 테스트 interface = create_interface() logger.info("✓ Gradio 인터페이스 생성 성공") # 인터페이스 구성 요소 확인 if hasattr(interface, 'blocks'): logger.info("✓ Gradio Blocks 구조 확인") return True except Exception as e: logger.error(f"❌ Gradio 인터페이스 테스트 실패: {e}") return False def test_file_structure(): """필수 파일 구조 확인""" required_files = [ 'app.py', 'stt_processor.py', 'requirements.txt', 'README.md', 'deployment_guide.md' ] missing_files = [] for file in required_files: if not os.path.exists(file): missing_files.append(file) if missing_files: logger.error(f"❌ 누락된 파일: {missing_files}") return False else: logger.info("✓ 모든 필수 파일 존재 확인") return True def main(): """테스트 실행""" logger.info("🧪 Gradio STT 앱 테스트 시작") logger.info("=" * 50) tests = [ ("필수 모듈 import", test_imports), ("파일 구조 확인", test_file_structure), ("STTProcessor 초기화", test_stt_processor_init), ("Gradio 인터페이스", test_gradio_interface) ] passed = 0 total = len(tests) for test_name, test_func in tests: logger.info(f"\n🔍 {test_name} 테스트...") try: if test_func(): passed += 1 logger.info(f"✅ {test_name} 통과") else: logger.error(f"❌ {test_name} 실패") except Exception as e: logger.error(f"❌ {test_name} 오류: {e}") logger.info("\n" + "=" * 50) logger.info(f"📊 테스트 결과: {passed}/{total} 통과") if passed == total: logger.info("🎉 모든 테스트 통과! 앱이 배포 준비되었습니다.") return True else: logger.warning("⚠️ 일부 테스트가 실패했습니다. 문제를 확인해주세요.") return False if __name__ == "__main__": success = main() sys.exit(0 if success else 1)