Заменить одной универсальной фикстурой пачку однотипных фикстур
В моем conftest.py
есть много однотипных фикстур, которые импортируют API-клиент из src/api/service
ради имплементации небольшой логики (например, прокинуть seed
, но может быть что угодно).
from src.api.service1 import service1_api
from src.api.service2 import service2_api
...
@pytest.fixture()
def service1_api(seed):
service1_api.seed = seed
return service1_api
@pytest.fixture()
def service2_api(seed):
service2_api.seed = seed
return service2_api
Это сильно раздувает весь файл и выглядит явно избыточным (pytest
при инициализации подтягивает все-все модули из репозитория, даже если запустятся только тесты, которые эти модули не используют).
Можно ли написать/заменить одним универсальной фикстурой всю пачку однотипных фикстур?
Ответы (1 шт):
Как вариант - из фикстуры возвращать функцию, которая принимает сервис и что-то в нем патчит:
from src.api.service1 import service1_api
@pytest.fixture()
def set_seed(seed):
def func(service):
service.seed = seed
return func
def test_something(set_seed):
set_seed(service1_api)
...
В целом, тут вообще как будто именно фикстура не нужна, можно обойтись просто функцией (но это зависит от того, откуда берется seed).