261 lines
9.4 KiB
Python
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(url, 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 для выхода...") |