fix: use module scope for E2E fixtures

This commit is contained in:
root 2026-03-29 23:44:06 +00:00
parent 3fbf12163a
commit e619dc9368

View File

@ -4,6 +4,7 @@ E2E тесты для Kwork API.
Требуют реальных credentials и запускаются только локально. Требуют реальных credentials и запускаются только локально.
""" """
import asyncio
import os import os
from pathlib import Path from pathlib import Path
@ -15,6 +16,9 @@ from kwork_api import KworkClient
# Загружаем .env # Загружаем .env
load_dotenv(Path(__file__).parent / ".env") load_dotenv(Path(__file__).parent / ".env")
# Отключаем auto mode для pytest-asyncio чтобы использовать один event loop
pytest_plugins = ('pytest_asyncio',)
@pytest.fixture(scope="session") @pytest.fixture(scope="session")
def kwork_credentials(): def kwork_credentials():
@ -36,35 +40,31 @@ def require_credentials(kwork_credentials):
return kwork_credentials return kwork_credentials
@pytest.fixture(scope="session") @pytest.fixture(scope="module")
def client(require_credentials): def client(require_credentials):
""" """
E2E клиент для всех тестов. E2E клиент для всех тестов в модуле.
Авторизуется один раз и переиспользуется во всех тестах сессии. Авторизуется один раз и переиспользуется во всех тестах модуля.
""" """
import asyncio async def create_client():
async def login():
return await KworkClient.login( return await KworkClient.login(
username=require_credentials["username"], username=require_credentials["username"],
password=require_credentials["password"], password=require_credentials["password"],
) )
client = asyncio.run(login()) client = asyncio.run(create_client())
yield client yield client
asyncio.run(client.close()) asyncio.run(client.close())
@pytest.fixture(scope="session") @pytest.fixture(scope="module")
def catalog_kwork_id(client): def catalog_kwork_id(client):
""" """
Получить ID первого кворка из каталога для тестов. Получить ID первого кворка из каталога для тестов.
Переиспользуется во всех тестах сессии. Переиспользуется во всех тестах модуля.
""" """
import asyncio
async def get_first_kwork(): async def get_first_kwork():
catalog = await client.catalog.get_list(page=1) catalog = await client.catalog.get_list(page=1)
if len(catalog.kworks) > 0: if len(catalog.kworks) > 0: