gpt4 book ai didi

python - Pytest 在顶部导入与在函数内导入

转载 作者:行者123 更新时间:2023-12-01 07:43:15 24 4
gpt4 key购买 nike

当我将实现模块的导入移动到测试模块的方法中时,测试工作正常。但是,当我将导入放在顶部时,我收到一条错误,指出未找到环境变量。

当我将导入放在文件顶部时,为什么未设置环境变量以及如何在不将导入移动到函数内的情况下修复它

错误消息

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

最佳答案

您似乎正在设置 'env' 的唯一地方环境变量位于 env_setup固定装置。与所有固定装置一样,固定装置中的代码仅在测试运行时适用。当您尝试导入engine时在测试模块的顶层,当前没有有效的测试,因此(除非您在其他地方设置了'env')os.environ['env']届时将被取消设置。导入engine从测试函数内部工作是有效的,因为在运行测试函数之前, fixture 会为环境变量赋予一个值。

我不知道你想通过分配os.environ['env']来实现什么目的到顶级模块变量,但您可能会以错误的方式进行操作。特别是,如果您设置 'env'预先设置 envvar 以便模块级导入工作,然后 env_val不会受到猴子补丁的影响。

关于python - Pytest 在顶部导入与在函数内导入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56585859/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com