Pytest импортирует сверху и внутри функции - PullRequest
1 голос
/ 13 июня 2019

Когда я перемещаю импорт модуля реализации в метод в тестовом модуле, тест работает нормально. Однако, когда импорт выполняется сверху, я получаю сообщение об ошибке, указывающее, что переменная среды не найдена.

почему переменная окружения не установлена, когда я помещаю импорт поверх файла, и как я могу это исправить, не перемещая импорт внутри функции

Сообщение об ошибке

test/test_engine.py:4: in <module>
    from reptar_validation_engine import get_client_id
source/engine.py:30: in <module>
    ATHENA_DB = os.environ['env']
venv/lib/python3.6/os.py:669: in __getitem__
    raise KeyError(key) from None
E   KeyError: 'env'

conftest.py

import pytest


@pytest.fixture(autouse=True)
def env_setup(monkeypatch):
    monkeypatch.setenv('env', 'dev')

Тестовый модуль - этот сбой

import sys
import os
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '../', 'source')))
from engine import get_client_id

def test_get_client_id():
    get_client_id()

Тестовый модуль - это работает

import sys
import os
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '../', 'source')))


def test_get_client_id():
    from engine import get_client_id
    get_client_id()

engine.py

import os

env_val = os.environ['env']

def get_client_id:
    pass

1 Ответ

1 голос
/ 13 июня 2019

Единственное место, где вы устанавливаете переменную окружения 'env', - это устройство env_setup.Как и все приборы, код внутри прибора применяется только во время выполнения теста.Когда вы пытаетесь импортировать engine на верхнем уровне вашего тестового модуля, тест в настоящее время не действует, и поэтому (если вы не установили 'env' где-то еще) os.environ['env'] будет сброшено в этот момент.Импорт engine из тестовой функции работает, потому что перед запуском тестовой функции прибор присваивает переменной среды значение.

Я не знаю, чего вы пытаетесь достичь, назначив os.environ['env'] к переменной модуля верхнего уровня, но вы, вероятно, поступаете неправильно.В частности, если вы предварительно задали 'env' envvar, чтобы импорт на уровне модуля работал, то на обезьяны не будет влиять env_val.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...