Эндпоинты не работают
This commit is contained in:
97
tests/conftest.py
Normal file
97
tests/conftest.py
Normal file
@@ -0,0 +1,97 @@
|
||||
"""
|
||||
Конфигурация pytest для тестирования API эндпоинтов
|
||||
"""
|
||||
import pytest
|
||||
import requests
|
||||
import time
|
||||
import os
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
# Добавляем путь к проекту для импорта модулей
|
||||
project_root = Path(__file__).parent.parent
|
||||
sys.path.insert(0, str(project_root / "python_parser"))
|
||||
|
||||
from adapters.local_storage import LocalStorageAdapter
|
||||
|
||||
# Базовый URL API
|
||||
API_BASE_URL = "http://localhost:8000"
|
||||
|
||||
# Путь к тестовым данным
|
||||
TEST_DATA_DIR = Path(__file__).parent / "test_data"
|
||||
|
||||
@pytest.fixture(scope="session")
|
||||
def api_base_url():
|
||||
"""Базовый URL для API"""
|
||||
return API_BASE_URL
|
||||
|
||||
@pytest.fixture(scope="session")
|
||||
def test_data_dir():
|
||||
"""Директория с тестовыми данными"""
|
||||
return TEST_DATA_DIR
|
||||
|
||||
@pytest.fixture(scope="session")
|
||||
def wait_for_api():
|
||||
"""Ожидание готовности API"""
|
||||
max_attempts = 30
|
||||
for attempt in range(max_attempts):
|
||||
try:
|
||||
response = requests.get(f"{API_BASE_URL}/docs", timeout=5)
|
||||
if response.status_code == 200:
|
||||
print(f"✅ API готов после {attempt + 1} попыток")
|
||||
return True
|
||||
except requests.exceptions.RequestException:
|
||||
pass
|
||||
|
||||
if attempt < max_attempts - 1:
|
||||
time.sleep(2)
|
||||
|
||||
pytest.fail("❌ API не готов после 30 попыток")
|
||||
|
||||
@pytest.fixture
|
||||
def upload_file(test_data_dir):
|
||||
"""Фикстура для загрузки файла"""
|
||||
def _upload_file(filename):
|
||||
file_path = test_data_dir / filename
|
||||
if not file_path.exists():
|
||||
pytest.skip(f"Файл {filename} не найден в {test_data_dir}")
|
||||
return file_path
|
||||
return _upload_file
|
||||
|
||||
@pytest.fixture(scope="session")
|
||||
def local_storage():
|
||||
"""Фикстура для локального storage"""
|
||||
storage = LocalStorageAdapter("tests/local_storage")
|
||||
yield storage
|
||||
# Очищаем storage после всех тестов
|
||||
storage.clear_all()
|
||||
|
||||
@pytest.fixture
|
||||
def clean_storage(local_storage):
|
||||
"""Фикстура для очистки storage перед каждым тестом"""
|
||||
local_storage.clear_all()
|
||||
yield local_storage
|
||||
|
||||
def make_api_request(url, method="GET", data=None, files=None, json_data=None):
|
||||
"""Универсальная функция для API запросов"""
|
||||
try:
|
||||
if method.upper() == "GET":
|
||||
response = requests.get(url, timeout=30)
|
||||
elif method.upper() == "POST":
|
||||
if files:
|
||||
response = requests.post(url, files=files, timeout=30)
|
||||
elif json_data:
|
||||
response = requests.post(url, json=json_data, timeout=30)
|
||||
else:
|
||||
response = requests.post(url, data=data, timeout=30)
|
||||
else:
|
||||
raise ValueError(f"Неподдерживаемый метод: {method}")
|
||||
|
||||
return response
|
||||
except requests.exceptions.RequestException as e:
|
||||
pytest.fail(f"Ошибка API запроса: {e}")
|
||||
|
||||
@pytest.fixture
|
||||
def api_request():
|
||||
"""Фикстура для API запросов"""
|
||||
return make_api_request
|
||||
Reference in New Issue
Block a user