This commit is contained in:
@@ -7,6 +7,7 @@ from sqlalchemy.pool import StaticPool
|
||||
import time
|
||||
import uuid
|
||||
from starlette.testclient import TestClient
|
||||
import requests
|
||||
|
||||
from services.redis import redis
|
||||
from orm.base import BaseModel as Base
|
||||
@@ -27,6 +28,22 @@ def get_test_client():
|
||||
return app
|
||||
|
||||
return TestClient(_import_app())
|
||||
@pytest.fixture(autouse=True, scope="session")
|
||||
def _set_requests_default_timeout():
|
||||
"""Глобально задаем таймаут по умолчанию для requests в тестах, чтобы исключить зависания.
|
||||
|
||||
🪓 Упрощение: мокаем методы requests, добавляя timeout=10, если он не указан.
|
||||
"""
|
||||
original_request = requests.sessions.Session.request
|
||||
|
||||
def request_with_default_timeout(self, method, url, **kwargs): # type: ignore[override]
|
||||
if "timeout" not in kwargs:
|
||||
kwargs["timeout"] = 10
|
||||
return original_request(self, method, url, **kwargs)
|
||||
|
||||
requests.sessions.Session.request = request_with_default_timeout # type: ignore[assignment]
|
||||
yield
|
||||
requests.sessions.Session.request = original_request # type: ignore[assignment]
|
||||
|
||||
|
||||
@pytest.fixture(scope="session")
|
||||
|
||||
@@ -60,8 +60,8 @@ class TestCommunityDeleteE2EBrowser:
|
||||
# В CI/CD используем uv run python
|
||||
backend_process = subprocess.Popen(
|
||||
["uv", "run", "python", "dev.py"],
|
||||
stdout=subprocess.PIPE,
|
||||
stderr=subprocess.PIPE,
|
||||
stdout=subprocess.DEVNULL,
|
||||
stderr=subprocess.DEVNULL,
|
||||
cwd=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
||||
)
|
||||
|
||||
@@ -80,11 +80,7 @@ class TestCommunityDeleteE2EBrowser:
|
||||
# Если сервер не запустился, выводим логи и завершаем тест
|
||||
print("❌ Бэкенд сервер не запустился за 20 секунд")
|
||||
|
||||
# Получаем логи процесса
|
||||
if backend_process:
|
||||
stdout, stderr = backend_process.communicate()
|
||||
print(f"📋 STDOUT: {stdout.decode()}")
|
||||
print(f"📋 STDERR: {stderr.decode()}")
|
||||
# Логи процесса не собираем, чтобы не блокировать выполнение
|
||||
|
||||
raise Exception("Бэкенд сервер не запустился за 20 секунд")
|
||||
|
||||
@@ -128,8 +124,8 @@ class TestCommunityDeleteE2EBrowser:
|
||||
try:
|
||||
frontend_process = subprocess.Popen(
|
||||
["npm", "run", "dev"],
|
||||
stdout=subprocess.PIPE,
|
||||
stderr=subprocess.PIPE,
|
||||
stdout=subprocess.DEVNULL,
|
||||
stderr=subprocess.DEVNULL,
|
||||
cwd=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
||||
)
|
||||
|
||||
@@ -149,11 +145,7 @@ class TestCommunityDeleteE2EBrowser:
|
||||
# Если фронтенд не запустился, выводим логи
|
||||
print("❌ Фронтенд сервер не запустился за 15 секунд")
|
||||
|
||||
# Получаем логи процесса
|
||||
if frontend_process:
|
||||
stdout, stderr = frontend_process.communicate()
|
||||
print(f"📋 STDOUT: {stdout.decode()}")
|
||||
print(f"📋 STDERR: {stderr.decode()}")
|
||||
# Логи процесса не собираем, чтобы не блокировать выполнение
|
||||
|
||||
print("⚠️ Продолжаем тест без фронтенда (только API тесты)")
|
||||
frontend_process = None
|
||||
|
||||
Reference in New Issue
Block a user