Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Pytest:如何设置Pytest配置(conftest)以在测试环境中运行?_Python_Pytest_Python Importlib - Fatal编程技术网

Python Pytest:如何设置Pytest配置(conftest)以在测试环境中运行?

Python Pytest:如何设置Pytest配置(conftest)以在测试环境中运行?,python,pytest,python-importlib,Python,Pytest,Python Importlib,我认为最简单的方法是用我的软件环境作为“测试”重新加载配置模块 我的代码有一个config.py,它作为配置处理代码工作,在这里我定义了我要运行的每个环境的所有配置设置 config.py 类配置(对象): 调试=错误 测试=错误 数据库_URI='sqlite://:memory:' 类ProductionConfig(配置): 数据库mysql://user@localhost/foo' 类开发配置(配置): 调试=真 类TestingConfig(配置): 测试=真 config_look

我认为最简单的方法是用我的软件环境作为“测试”重新加载配置模块

我的代码有一个
config.py
,它作为配置处理代码工作,在这里我定义了我要运行的每个环境的所有配置设置

config.py

类配置(对象):
调试=错误
测试=错误
数据库_URI='sqlite://:memory:'
类ProductionConfig(配置):
数据库mysql://user@localhost/foo'
类开发配置(配置):
调试=真
类TestingConfig(配置):
测试=真
config_lookup=dict(
testing=TestingConfig(),
development=DevelopmentConfig(),
production=ProductionConfig(),
)
config=config\u查找[os.getenv('ENVIRONMENT','development')]
一种方法是使用重载: 在我的
conftest.py
上,我想确保所有测试都按照TestingConfig运行。 因此,我会这样做:

conftest.py

@pytest.fixture(autouse=True)
def cfg():
#重新加载全局“config”实例。
操作系统环境[“环境”]=“测试”
importlib.reload(系统模块[“配置”])
不幸的是,由于
importlib.reload()

importlib.reload()
重新加载以前导入的模块。参数必须是模块对象,因此它必须在导入之前已成功导入。 阅读更多:

此解决方案可能在第一个实例中有效,但在使用不同类型的导入时会变得棘手。(对象vs子模块)

导入一个对象

从app.config导入配置
打印('环境为:',键入(配置)。\u名称\u

#环境是:Development另一种似乎非常有效的方法是确保在运行
conftest.py
之前设置好环境。正在使用


看起来很好用。从上到下,这是一个没有维护的旧存储库,但也是一小段代码。

不清楚这是如何失败的,也不清楚您在寻找什么行为。你能澄清一下真正的问题是什么吗?@tripleee,谢谢。我添加了更多的上下文。。事实上,给定的方法可以工作,但并不可靠,因为它可能会失败,这取决于您决定如何导入配置以及不同的开发特性。开发人员可能决定从x导入y导入
,但这将失败。因此,您的问题是
重新加载
不会递归地重新加载模块导入的所有内容?这是一个常见的FAQ,也是一个重复。我已经描述了一个我尝试过的方法的问题,但我的问题只是为了确保我可以将conftest正确设置为在测试环境下运行。
[pytest]
env =
    ENVIRONMENT=testing