""" Простой тест с подробным выводом в консоль. Запуск: python test_simple.py """ import asyncio import sys import os import time import random import traceback from pathlib import Path from datetime import datetime # Добавляем текущую директорию в путь sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) print("=" * 60) print("🚀 ЗАПУСК ТЕСТА") print("=" * 60) print(f"Python: {sys.version}") print(f"Директория: {os.getcwd()}") print(f"Время: {datetime.now()}") print() # Проверяем наличие необходимых файлов print("📁 Проверка файлов:") for file in [".env", "proxies.txt", "config/settings.py", "main.py"]: exists = os.path.exists(file) print(f" {'✅' if exists else '❌'} {file}") print() # Проверяем импорты print("📦 Проверка импортов:") try: import psutil print(" ✅ psutil") except ImportError: print(" ❌ psutil (установите: pip install psutil)") try: from config.settings import settings print(" ✅ config.settings") except Exception as e: print(f" ❌ config.settings: {e}") try: from managers.proxy_manager import ProxyManager print(" ✅ managers.proxy_manager") except Exception as e: print(f" ❌ managers.proxy_manager: {e}") try: from services.browser_service import BrowserService print(" ✅ services.browser_service") except Exception as e: print(f" ❌ services.browser_service: {e}") print() # Проверяем настройки print("⚙️ Настройки:") try: print(f" BOT_TOKEN: {'***' if settings.BOT_TOKEN else 'НЕ УСТАНОВЛЕН'}") print(f" VIEWPORT: {settings.VIEWPORT_WIDTH}x{settings.VIEWPORT_HEIGHT}") print(f" MIN_READING: {settings.DEFAULT_MIN_READING}s") print(f" MAX_READING: {settings.DEFAULT_MAX_READING}s") print(f" PROXY_FILE: {settings.PROXY_FILE}") except Exception as e: print(f" ❌ Ошибка загрузки настроек: {e}") print() async def simple_test(): """Простой тест с выводом каждого шага.""" print("=" * 60) print("🧪 НАЧАЛО ТЕСТИРОВАНИЯ") print("=" * 60) # Шаг 1: Инициализация print("\n📌 Шаг 1: Инициализация менеджеров") try: proxy_manager = ProxyManager() browser_service = BrowserService(proxy_manager) print(" ✅ Менеджеры созданы") except Exception as e: print(f" ❌ Ошибка: {e}") traceback.print_exc() return # Шаг 2: Проверка прокси print("\n📌 Шаг 2: Проверка прокси") try: stats = proxy_manager.get_stats() print(f" 📊 Всего прокси: {stats['total']}") print(f" 📊 Рабочих: {stats['working']}") print(f" 📊 Доступно: {stats['available']}") if stats['total'] > 0: print(" 🔌 Пробуем получить прокси...") proxy = await proxy_manager.acquire_proxy(timeout=10) if proxy: print(f" ✅ Прокси получен: {proxy.id}") await proxy_manager.release_proxy(proxy) else: print(" ⚠️ Не удалось получить прокси") except Exception as e: print(f" ❌ Ошибка: {e}") # Шаг 3: Тестовое посещение print("\n📌 Шаг 3: Тестовое посещение страницы") test_urls = [ "https://httpbin.org/headers", "https://httpbin.org/ip", "https://www.example.com", "https://httpbin.org/user-agent", ] url = random.choice(test_urls) reading_time = random.randint(5, 15) print(f" 🌐 URL: {url}") print(f" ⏱️ Время чтения: {reading_time}s") print(f" 🕐 Начало: {datetime.now().strftime('%H:%M:%S')}") # Замеряем память до process = psutil.Process() mem_before = process.memory_info().rss / (1024 * 1024) cpu_before = process.cpu_percent() print(f" 💾 Память до: {mem_before:.1f} MB") try: start_time = time.time() # Выполняем посещение print(" 🔄 Выполняем посещение...") result = await browser_service.visit_page_from_twitch(url, "jentteno", reading_time) elapsed = time.time() - start_time # Замеряем память после mem_after = process.memory_info().rss / (1024 * 1024) memory_delta = mem_after - mem_before print(f"\n 📊 Результаты:") print(f" {'✅' if result.success else '❌'} Статус: {'Успешно' if result.success else 'Ошибка'}") print(f" ⏱️ Время выполнения: {elapsed:.1f}s") print(f" 🔗 Начальный URL: {result.initial_url}") print(f" 🔗 Финальный URL: {result.final_url}") print(f" 🔄 Редирект: {'Да' if result.redirect_occurred else 'Нет'}") print(f" 🔌 Прокси: {result.proxy_info}") print(f" 📸 Скриншот: {result.screenshot_path}") if result.error: print(f" ❌ Ошибка: {result.error}") print(f"\n 💾 Память после: {mem_after:.1f} MB") print(f" 📈 Изменение памяти: {memory_delta:+.1f} MB") # Проверяем скриншот if result.screenshot_path and os.path.exists(result.screenshot_path): size = os.path.getsize(result.screenshot_path) print(f" 📁 Размер скриншота: {size / 1024:.1f} KB") except Exception as e: print(f" ❌ Ошибка выполнения: {e}") traceback.print_exc() # Шаг 4: Несколько посещений print("\n📌 Шаг 4: Серия из 3 посещений") for i in range(3): url = test_urls[i] reading = random.randint(5, 10) print(f"\n 📍 Посещение {i+1}/3: {url}") print(f" ⏱️ Чтение: {reading}s") mem_before = process.memory_info().rss / (1024 * 1024) try: start = time.time() result = await browser_service.visit_page(url, reading) elapsed = time.time() - start mem_after = process.memory_info().rss / (1024 * 1024) print(f" {'✅' if result.success else '❌'} " f"Время: {elapsed:.1f}s | " f"Память: {mem_before:.1f} → {mem_after:.1f} MB " f"({mem_after - mem_before:+.1f})") if result.error: print(f" Ошибка: {result.error}") except Exception as e: print(f" ❌ Ошибка: {e}") # Пауза if i < 2: delay = random.randint(3, 7) print(f" ⏳ Ожидание {delay}s...") await asyncio.sleep(delay) # Итоги print("\n" + "=" * 60) print("📊 ИТОГИ ТЕСТИРОВАНИЯ") print("=" * 60) final_memory = process.memory_info().rss / (1024 * 1024) print(f" 🕐 Завершено: {datetime.now().strftime('%H:%M:%S')}") print(f" 💾 Финальная память: {final_memory:.1f} MB") print(f" 📈 Общее изменение памяти: {final_memory - mem_before:+.1f} MB") # Системная информация print(f"\n 💻 Система:") print(f" • CPU: {psutil.cpu_count()} ядер") mem = psutil.virtual_memory() print(f" • RAM всего: {mem.total / (1024**3):.1f} GB") print(f" • RAM свободно: {mem.available / (1024**3):.1f} GB") print(f" • RAM использовано: {mem.percent}%") print(f"\n✅ Тест завершен!") # Сохраняем результаты в файл log_file = f"test_results_{datetime.now().strftime('%Y%m%d_%H%M%S')}.txt" with open(log_file, 'w') as f: f.write(f"Test completed: {datetime.now()}\n") f.write(f"Final memory: {final_memory:.1f} MB\n") f.write(f"Memory delta: {final_memory - mem_before:+.1f} MB\n") print(f"📝 Результаты сохранены: {log_file}") async def main(): """Главная функция с обработкой ошибок.""" try: await simple_test() except KeyboardInterrupt: print("\n⚠️ Тест прерван пользователем") except Exception as e: print(f"\n❌ Критическая ошибка: {e}") traceback.print_exc() # Держим окно открытым print("\nНажмите Enter для выхода...") await asyncio.get_event_loop().run_in_executor(None, input) if __name__ == "__main__": try: asyncio.run(main()) except KeyboardInterrupt: print("\nВыход...") except Exception as e: print(f"Ошибка запуска: {e}") traceback.print_exc() input("Нажмите Enter для выхода...")