68 lines
2.5 KiB
Python
68 lines
2.5 KiB
Python
import pytest
|
|
import os
|
|
import sys
|
|
import logging
|
|
|
|
# Dodanie katalogu nadrzędnego do ścieżki dla importów
|
|
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
|
|
|
|
# Konfiguracja pytest-asyncio
|
|
# Ta opcja spowoduje, że wszystkie funkcje testowe z 'async def'
|
|
# będą automatycznie traktowane jako testy asynchroniczne
|
|
pytest_plugins = ['pytest_asyncio']
|
|
|
|
# Konfiguracja logowania dla testów
|
|
def pytest_configure(config):
|
|
"""Konfiguracja pytest przed uruchomieniem testów."""
|
|
# Ustawienie domyślnego zakresu pętli zdarzeń
|
|
config.option.asyncio_default_fixture_loop_scope = "function"
|
|
|
|
# Ustawienie trybu asyncio na AUTO, aby nie było ostrzeżeń o brakującym dekoratorze
|
|
# dla testów asynchronicznych
|
|
config.option.asyncio_mode = "auto"
|
|
|
|
# Rejestracja niestandardowych markerów testów
|
|
config.addinivalue_line(
|
|
"markers", "integration: testy wymagające rzeczywistych zewnętrznych usług"
|
|
)
|
|
config.addinivalue_line(
|
|
"markers", "slow: testy, które trwają dłużej niż standardowe testy jednostkowe"
|
|
)
|
|
|
|
# Konfiguracja logowania
|
|
logging.basicConfig(
|
|
level=logging.INFO,
|
|
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
|
|
handlers=[
|
|
logging.StreamHandler(), # Log do konsoli
|
|
logging.FileHandler('pytest.log') # Log do pliku
|
|
]
|
|
)
|
|
|
|
# Zmniejsz poziom logowania dla bibliotek zewnętrznych
|
|
logging.getLogger('urllib3').setLevel(logging.WARNING)
|
|
logging.getLogger('aiohttp').setLevel(logging.WARNING)
|
|
|
|
# Zwiększ poziom logowania dla naszych modułów
|
|
logging.getLogger('src').setLevel(logging.DEBUG)
|
|
|
|
# Hook uruchamiany przed każdym testem
|
|
def pytest_runtest_setup(item):
|
|
"""Dodatkowa konfiguracja przed każdym testem."""
|
|
# Dodaj linię oddzielającą w logach dla lepszej czytelności
|
|
logging.info("=" * 80)
|
|
logging.info(f"Rozpoczęcie testu: {item.name}")
|
|
|
|
# Hook uruchamiany po każdym teście
|
|
def pytest_runtest_teardown(item, nextitem):
|
|
"""Dodatkowa konfiguracja po każdym teście."""
|
|
logging.info(f"Zakończenie testu: {item.name}")
|
|
logging.info("-" * 80)
|
|
|
|
# Hook do obsługi niepowodzeń testów
|
|
def pytest_runtest_logreport(report):
|
|
"""Logowanie dodatkowych informacji o niepowodzeniach testów."""
|
|
if report.when == "call" and report.failed:
|
|
logging.error(f"Test zakończony niepowodzeniem: {report.nodeid}")
|
|
if hasattr(report, "longrepr"):
|
|
logging.error(f"Szczegóły błędu: {report.longrepr}") |