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}")