У меня есть сборка ETL с sqlalchemy. Чтобы протестировать это, мы используем postgres в Docker-контейнере через pytest-docker.
Но поскольку на некоторых компьютерах вращение Docker-контейнера занимает некоторое время, у нас также есть бэкэнд sqlite.
Вопрос в том, как условно выбрать любой бэкэнд без вращения Docker-контейнера с фиксаторами docker_ip и docker_services, предоставляемыми pytest-docker?
У меня есть следующее:
@pytest.fixture(name="sqlite_db", scope="session")
def fixture_sqlite_db():
...
yield engine
@pytest.fixture(name="postgres_db", scope="session")
def fixture_postgres_db(docker_ip, docker_services):
...
yield engine
@pytest.fixture(name=mock_get_engine", scope="session")
def fixture_mock_get_engine(engine):
with pytest.MonkeyPatch.context() as mock:
mock.setattr(my_module, "get_engine", lambda: engine)
yield mock
До сих пор оба приспособления движка запускались в отдельных тестовых файлах с копиями всех тестов, при этом postgres имел:
if not os.getenv("TEST_POSTGRES", False):
pytest.skip("skipping postgres database tests", allow_module_level=True)
это сработало, но скопировать половину набора тестов — это далеко не идеально.
---
Есть ли способ условно выбрать прибор?
Я пробовал:
@pytest.fixture(name="engine", scope="module")
def fixture_engine():
if os.getenv("TEST_POSTGRES", False):
engine = fixture_postgres_db()
else:
engine = fixture_sqlite_db()
yield engine
но это не сработало.
Изменить:
Для этого можно использовать встроенный запрос фикстуры. Параметризованная документация использует его в немного другом контексте, но никогда не останавливается на этом. Пришлось потрудиться:(
Используя request.getfixturevalue, можно выбрать прибор.
@pytest.fixture(name="engine", scope="module")
def fixture_engine(request):
if os.getenv("TEST_POSTGRES", False):
engine = request.getfixturevalue("postgres_db")
else:
engine = request.getfixturevalue("sqlite_db")
yield engine
Подробнее: https://stackoverflow.com/questions/798 ... -in-pytest
Условно выбрать приспособление в pytest ⇐ Python
Программы на Python
1774199613
Anonymous
У меня есть сборка ETL с sqlalchemy. Чтобы протестировать это, мы используем postgres в Docker-контейнере через pytest-docker.
Но поскольку на некоторых компьютерах вращение Docker-контейнера занимает некоторое время, у нас также есть бэкэнд sqlite.
Вопрос в том, как условно выбрать любой бэкэнд без вращения Docker-контейнера с фиксаторами docker_ip и docker_services, предоставляемыми pytest-docker?
У меня есть следующее:
@pytest.fixture(name="sqlite_db", scope="session")
def fixture_sqlite_db():
...
yield engine
@pytest.fixture(name="postgres_db", scope="session")
def fixture_postgres_db(docker_ip, docker_services):
...
yield engine
@pytest.fixture(name=mock_get_engine", scope="session")
def fixture_mock_get_engine(engine):
with pytest.MonkeyPatch.context() as mock:
mock.setattr(my_module, "get_engine", lambda: engine)
yield mock
До сих пор оба приспособления движка запускались в отдельных тестовых файлах с копиями всех тестов, при этом postgres имел:
if not os.getenv("TEST_POSTGRES", False):
pytest.skip("skipping postgres database tests", allow_module_level=True)
это сработало, но скопировать половину набора тестов — это далеко не идеально.
---
Есть ли способ условно выбрать прибор?
Я пробовал:
@pytest.fixture(name="engine", scope="module")
def fixture_engine():
if os.getenv("TEST_POSTGRES", False):
engine = fixture_postgres_db()
else:
engine = fixture_sqlite_db()
yield engine
но это не сработало.
[b]Изменить:[/b]
Для этого можно использовать встроенный запрос фикстуры. Параметризованная документация использует его в немного другом контексте, но никогда не останавливается на этом. Пришлось потрудиться:(
Используя request.getfixturevalue, можно выбрать прибор.
@pytest.fixture(name="engine", scope="module")
def fixture_engine(request):
if os.getenv("TEST_POSTGRES", False):
engine = request.getfixturevalue("postgres_db")
else:
engine = request.getfixturevalue("sqlite_db")
yield engine
Подробнее: [url]https://stackoverflow.com/questions/79819346/conditionally-select-fixture-in-pytest[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия