| |
| """ |
| FRED ML - Complete System Test |
| Comprehensive testing of all system components |
| """ |
|
|
| import os |
| import sys |
| import subprocess |
| import logging |
| from pathlib import Path |
| from datetime import datetime |
| import json |
|
|
| |
| logging.basicConfig( |
| level=logging.INFO, |
| format='%(asctime)s - %(levelname)s - %(message)s' |
| ) |
| logger = logging.getLogger(__name__) |
|
|
| class FREDMLSystemTest: |
| """Complete system testing for FRED ML""" |
| |
| def __init__(self): |
| self.root_dir = Path(__file__).parent.parent |
| self.test_results = {} |
| |
| def run_complete_system_test(self): |
| """Run complete system test""" |
| logger.info("๐งช Starting FRED ML Complete System Test") |
| logger.info("=" * 60) |
| |
| |
| self.test_environment_setup() |
| |
| |
| self.test_dependencies() |
| |
| |
| self.test_configurations() |
| |
| |
| self.test_core_modules() |
| |
| |
| self.test_advanced_analytics() |
| |
| |
| self.test_streamlit_ui() |
| |
| |
| self.test_integration() |
| |
| |
| self.test_performance() |
| |
| |
| self.generate_test_report() |
| |
| def test_environment_setup(self): |
| """Test environment setup""" |
| logger.info("๐ง Testing environment setup...") |
| |
| |
| python_version = sys.version_info |
| if python_version.major >= 3 and python_version.minor >= 8: |
| logger.info(f"โ
Python version: {python_version.major}.{python_version.minor}.{python_version.micro}") |
| self.test_results['python_version'] = True |
| else: |
| logger.error(f"โ Python version too old: {python_version}") |
| self.test_results['python_version'] = False |
| |
| |
| logger.info(f"โ
Working directory: {self.root_dir}") |
| self.test_results['working_directory'] = True |
| |
| |
| required_env_vars = ['FRED_API_KEY'] |
| env_status = True |
| for var in required_env_vars: |
| if os.getenv(var): |
| logger.info(f"โ
Environment variable set: {var}") |
| else: |
| logger.warning(f"โ ๏ธ Environment variable not set: {var}") |
| env_status = False |
| |
| self.test_results['environment_variables'] = env_status |
| |
| def test_dependencies(self): |
| """Test dependencies""" |
| logger.info("๐ฆ Testing dependencies...") |
| |
| required_packages = [ |
| 'pandas', |
| 'numpy', |
| 'scikit-learn', |
| 'scipy', |
| 'statsmodels', |
| 'streamlit', |
| 'plotly', |
| 'boto3', |
| 'fredapi' |
| ] |
| |
| missing_packages = [] |
| for package in required_packages: |
| try: |
| __import__(package) |
| logger.info(f"โ
Package available: {package}") |
| except ImportError: |
| logger.error(f"โ Package missing: {package}") |
| missing_packages.append(package) |
| |
| if missing_packages: |
| self.test_results['dependencies'] = False |
| logger.error(f"โ Missing packages: {missing_packages}") |
| else: |
| self.test_results['dependencies'] = True |
| logger.info("โ
All dependencies available") |
| |
| def test_configurations(self): |
| """Test configuration files""" |
| logger.info("โ๏ธ Testing configurations...") |
| |
| config_files = [ |
| 'config/pipeline.yaml', |
| 'config/settings.py', |
| 'requirements.txt', |
| 'pyproject.toml' |
| ] |
| |
| config_status = True |
| for config_file in config_files: |
| full_path = self.root_dir / config_file |
| if full_path.exists(): |
| logger.info(f"โ
Configuration file exists: {config_file}") |
| else: |
| logger.error(f"โ Configuration file missing: {config_file}") |
| config_status = False |
| |
| self.test_results['configurations'] = config_status |
| |
| def test_core_modules(self): |
| """Test core modules""" |
| logger.info("๐ง Testing core modules...") |
| |
| |
| sys.path.append(str(self.root_dir / 'src')) |
| |
| core_modules = [ |
| 'src.core.enhanced_fred_client', |
| 'src.analysis.economic_forecasting', |
| 'src.analysis.economic_segmentation', |
| 'src.analysis.statistical_modeling', |
| 'src.analysis.comprehensive_analytics' |
| ] |
| |
| module_status = True |
| for module in core_modules: |
| try: |
| __import__(module) |
| logger.info(f"โ
Module available: {module}") |
| except ImportError as e: |
| logger.error(f"โ Module missing: {module} - {e}") |
| module_status = False |
| |
| self.test_results['core_modules'] = module_status |
| |
| def test_advanced_analytics(self): |
| """Test advanced analytics functionality""" |
| logger.info("๐ฎ Testing advanced analytics...") |
| |
| try: |
| |
| from src.core.enhanced_fred_client import EnhancedFREDClient |
| logger.info("โ
Enhanced FRED Client imported successfully") |
| |
| |
| from src.analysis.economic_forecasting import EconomicForecaster |
| logger.info("โ
Economic Forecasting imported successfully") |
| |
| |
| from src.analysis.economic_segmentation import EconomicSegmentation |
| logger.info("โ
Economic Segmentation imported successfully") |
| |
| |
| from src.analysis.statistical_modeling import StatisticalModeling |
| logger.info("โ
Statistical Modeling imported successfully") |
| |
| |
| from src.analysis.comprehensive_analytics import ComprehensiveAnalytics |
| logger.info("โ
Comprehensive Analytics imported successfully") |
| |
| self.test_results['advanced_analytics'] = True |
| |
| except Exception as e: |
| logger.error(f"โ Advanced analytics test failed: {e}") |
| self.test_results['advanced_analytics'] = False |
| |
| def test_streamlit_ui(self): |
| """Test Streamlit UI""" |
| logger.info("๐จ Testing Streamlit UI...") |
| |
| try: |
| |
| streamlit_app = self.root_dir / 'frontend/app.py' |
| if not streamlit_app.exists(): |
| logger.error("โ Streamlit app not found") |
| self.test_results['streamlit_ui'] = False |
| return |
| |
| |
| with open(streamlit_app, 'r') as f: |
| content = f.read() |
| |
| |
| required_components = [ |
| 'st.set_page_config', |
| 'ComprehensiveAnalytics', |
| 'EnhancedFREDClient', |
| 'show_executive_dashboard', |
| 'show_advanced_analytics_page' |
| ] |
| |
| missing_components = [] |
| for component in required_components: |
| if component not in content: |
| missing_components.append(component) |
| |
| if missing_components: |
| logger.error(f"โ Missing components in Streamlit app: {missing_components}") |
| self.test_results['streamlit_ui'] = False |
| else: |
| logger.info("โ
Streamlit UI components found") |
| self.test_results['streamlit_ui'] = True |
| |
| except Exception as e: |
| logger.error(f"โ Streamlit UI test failed: {e}") |
| self.test_results['streamlit_ui'] = False |
| |
| def test_integration(self): |
| """Test system integration""" |
| logger.info("๐ Testing system integration...") |
| |
| try: |
| |
| from config.settings import FRED_API_KEY |
| if FRED_API_KEY: |
| try: |
| from src.core.enhanced_fred_client import EnhancedFREDClient |
| client = EnhancedFREDClient(FRED_API_KEY) |
| logger.info("โ
FRED API client created successfully") |
| |
| |
| series_info = client.get_series_info('GDPC1') |
| if 'error' not in series_info: |
| logger.info("โ
FRED API connection successful") |
| self.test_results['fred_api_integration'] = True |
| else: |
| logger.warning("โ ๏ธ FRED API connection failed") |
| self.test_results['fred_api_integration'] = False |
| |
| except Exception as e: |
| logger.error(f"โ FRED API integration failed: {e}") |
| self.test_results['fred_api_integration'] = False |
| else: |
| logger.warning("โ ๏ธ FRED API key not available, skipping API test") |
| self.test_results['fred_api_integration'] = False |
| |
| |
| try: |
| from src.analysis.comprehensive_analytics import ComprehensiveAnalytics |
| logger.info("โ
Analytics integration successful") |
| self.test_results['analytics_integration'] = True |
| except Exception as e: |
| logger.error(f"โ Analytics integration failed: {e}") |
| self.test_results['analytics_integration'] = False |
| |
| except Exception as e: |
| logger.error(f"โ Integration test failed: {e}") |
| self.test_results['integration'] = False |
| |
| def test_performance(self): |
| """Test system performance""" |
| logger.info("โก Testing system performance...") |
| |
| try: |
| |
| import pandas as pd |
| import numpy as np |
| |
| |
| test_data = pd.DataFrame({ |
| 'GDPC1': np.random.randn(1000), |
| 'INDPRO': np.random.randn(1000), |
| 'RSAFS': np.random.randn(1000) |
| }) |
| |
| |
| from src.analysis.economic_forecasting import EconomicForecaster |
| from src.analysis.economic_segmentation import EconomicSegmentation |
| from src.analysis.statistical_modeling import StatisticalModeling |
| |
| |
| forecaster = EconomicForecaster(test_data) |
| logger.info("โ
Forecasting module performance test passed") |
| |
| |
| segmentation = EconomicSegmentation(test_data) |
| logger.info("โ
Segmentation module performance test passed") |
| |
| |
| modeling = StatisticalModeling(test_data) |
| logger.info("โ
Statistical modeling performance test passed") |
| |
| self.test_results['performance'] = True |
| |
| except Exception as e: |
| logger.error(f"โ Performance test failed: {e}") |
| self.test_results['performance'] = False |
| |
| def generate_test_report(self): |
| """Generate comprehensive test report""" |
| logger.info("๐ Generating test report...") |
| |
| |
| total_tests = len(self.test_results) |
| passed_tests = sum(1 for status in self.test_results.values() if status) |
| overall_status = "โ
PASSED" if passed_tests == total_tests else "โ FAILED" |
| |
| |
| report = { |
| "timestamp": datetime.now().isoformat(), |
| "overall_status": overall_status, |
| "summary": { |
| "total_tests": total_tests, |
| "passed_tests": passed_tests, |
| "failed_tests": total_tests - passed_tests, |
| "success_rate": f"{(passed_tests/total_tests)*100:.1f}%" |
| }, |
| "detailed_results": self.test_results |
| } |
| |
| |
| report_file = self.root_dir / 'system_test_report.json' |
| with open(report_file, 'w') as f: |
| json.dump(report, f, indent=2) |
| |
| |
| logger.info("=" * 60) |
| logger.info("๐ SYSTEM TEST REPORT") |
| logger.info("=" * 60) |
| logger.info(f"Overall Status: {overall_status}") |
| logger.info(f"Total Tests: {total_tests}") |
| logger.info(f"Passed: {passed_tests}") |
| logger.info(f"Failed: {total_tests - passed_tests}") |
| logger.info(f"Success Rate: {(passed_tests/total_tests)*100:.1f}%") |
| logger.info("=" * 60) |
| |
| |
| logger.info("Detailed Results:") |
| for test, status in self.test_results.items(): |
| status_icon = "โ
" if status else "โ" |
| logger.info(f" {status_icon} {test}") |
| |
| logger.info("=" * 60) |
| logger.info(f"Report saved to: {report_file}") |
| |
| return report |
| |
| def run_demo_tests(self): |
| """Run demo tests""" |
| logger.info("๐ฏ Running demo tests...") |
| |
| try: |
| |
| demo_script = self.root_dir / 'scripts/comprehensive_demo.py' |
| if demo_script.exists(): |
| logger.info("โ
Comprehensive demo script exists") |
| |
| |
| with open(demo_script, 'r') as f: |
| compile(f.read(), str(demo_script), 'exec') |
| logger.info("โ
Comprehensive demo script syntax valid") |
| |
| self.test_results['comprehensive_demo'] = True |
| else: |
| logger.error("โ Comprehensive demo script not found") |
| self.test_results['comprehensive_demo'] = False |
| |
| |
| analytics_script = self.root_dir / 'scripts/run_advanced_analytics.py' |
| if analytics_script.exists(): |
| logger.info("โ
Advanced analytics script exists") |
| |
| |
| with open(analytics_script, 'r') as f: |
| compile(f.read(), str(analytics_script), 'exec') |
| logger.info("โ
Advanced analytics script syntax valid") |
| |
| self.test_results['advanced_analytics_script'] = True |
| else: |
| logger.error("โ Advanced analytics script not found") |
| self.test_results['advanced_analytics_script'] = False |
| |
| except Exception as e: |
| logger.error(f"โ Demo tests failed: {e}") |
| self.test_results['demo_tests'] = False |
|
|
| def main(): |
| """Main test function""" |
| tester = FREDMLSystemTest() |
| |
| try: |
| |
| tester.run_complete_system_test() |
| |
| |
| tester.run_demo_tests() |
| |
| logger.info("๐ Complete system test finished!") |
| |
| except Exception as e: |
| logger.error(f"โ System test failed: {e}") |
| sys.exit(1) |
|
|
| if __name__ == "__main__": |
| main() |