Files
Click/test_simple.py
T
2026-05-14 16:15:58 +07:00

261 lines
9.4 KiB
Python

"""
Простой тест с подробным выводом в консоль.
Запуск: 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 для выхода...")