File size: 3,998 Bytes
ae9ec05
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
#!/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)