Я пишу функциональные тесты, используя pytest для программного обеспечения, которое может работать локально и в облаке. Я хочу создать 2 модулей, каждый из которых с теми же именами модулей/арматуре и иметь pytest нагрузку одну или другую сторону в зависимости, если я бегу тестов локально или в облаке:Модули Pytest и Dynamic fixture
/fixtures
/fixtures/__init__.py
/fixtures/local_hybrids
/fixtures/local_hybrids/__init__.py
/fixtures/local_hybrids/foo.py
/fixtures/cloud_hybrids
/fixtures/cloud_hybrids/__init__.py
/fixtures/cloud_hybrids/foo.py
/test_hybrids/test_hybrids.py
foo.py
(оба из них) :
import pytest
@pytest.fixture()
def my_fixture():
return True
/fixtures/__init__.py
:
if True:
import local_hybrids as hybrids
else:
import cloud_hybrids as hybrids
/test_hybrids/test_hybrids.py
:
from fixtures.hybrids.foo import my_fixture
def test_hybrid(my_fixture):
assert my_fixture
Последний блок кода не работает, конечно, потому что import fixtures.hybrids
смотрит на файловой системе, а не „фальшивый“ пространства имен __init__.py
«s, который не любит from fixtures import hybrids
, который работает (но тогда вы не можете использовать светильники поскольку имена будут включать точечную нотацию).
Я понимаю, что я могу играть с pytest_generate_test, чтобы динамически изменять прибор (может быть?), Но я бы очень не хотел управлять каждым прибором вручную изнутри этой функции ... Я надеялся на динамический импорт (если x, импортируйте это , иначе импорт, который) был стандартный Python, к сожалению, он сталкивается с механизмом светильников:
import fixtures
def test(fixtures.hybrids.my_fixture): # of course it doesn't work :)
...
Я мог бы также импортировать каждую функцию арматуре один за другим в INIT; но все же жизнеспособный вариант, чтобы обмануть pytest и получить имена приборов без точек.
Показать мне черную магию. :) Можно ли это сделать?
Да, я знаю об этой возможности (так я и делал это изначально), но я действительно хочу избежать импорта модулей облака, если я запускаю локальные тесты и наоборот. Из-за этого импортирование каждого символа один за другим (более интересное предложение в моем оригинальном посте) более оптимально для меня. Спасибо, что нашли время ответить хотя;) – Joe