将python-dotenv与pytest一起使用的最佳方法,或者具有单独配置的pytest测试/开发环境的最佳方法



我想在我的python项目中使用python dotenv-lib。我的开发环境应该使用 .env 文件,测试套件 (pytest) 应该自动使用 .env.test。

直到现在,我还没有找到令人满意的解决方案。

我对python不是很熟悉。也许有人可以指出我正确的方向。

我应该在pytest钩子中加载.env.test文件吗?

对于 2019 年或之后的任何人:

你可以使用 pytest-dotenv 😉 。

经过一番调查,我得出的结论是不使用python-dotenv。我最终使用了很酷的库简单设置和pytest钩子。它很好地解决了我的需求!简单设置可以从多种文件类型加载设置。加载哪个设置文件可以通过环境变量决定。

如果有人想了解一些关于pytest及其conftest文件的知识,下面的帖子可能会非常有帮助:在py.test中,conftest.py 文件有什么用?

这是我实现两个钩子的 conftest.py 文件:

import os
def pytest_configure(config):
os.environ['SIMPLE_SETTINGS'] = 'config.test'
return config
def pytest_unconfigure(config):
os.environ['SIMPLE_SETTINGS'] = 'config.development'
return config

如果我使用 pytest 运行一些测试,则会设置相应的环境变量。所以我的测试套件会自动使用正确的设置。

我会使用 setUpClass() 方法来做到这一点,该方法在运行单个测试之前加载。

class TestCases(Testcase):

@classmethod
def setUpClass(cls):
from dotenv import load_dotenv
load_dotenv(".dev-env")

def test_myrandomtest():
self.assert(something,something, "Oh crap")

在 2023 年,虽然pytest-dotenv非常有用,因为它只是有效,但我觉得这有点矫枉过正,因为大多数项目可能已经安装了python-dotenv。因此,使用conftest.py文件设置加载.env文件的pytest夹具可以通过 3 个相当简单的步骤完成!

步骤

  1. conftest.py文件添加到tests文件夹
  2. 导入pytestfrom dotenv import load_dotenv, find_dotenv
  3. 定义pytest夹具
@pytest.fixture(scope='session', autouse=True)
def load_env():
env_file = find_dotenv('.env.tests')
load_dotenv(env_file)

这个pytest装置的工作原理要归功于两个关键部件。

首先,将范围设置为session以及autouse=True可确保此灯具先于其他任何装置运行。

其次,使用find_dotenv(file_name)可确保在load_dotenv(file_path)中使用正确的文件路径,无论您如何称呼.env文件。如果您碰巧将测试环境文件调用.env,那么您可以放弃find_dotenv()调用并运行load_dotenv()而不带任何参数。python-dotenv通过load_dotenv()查找任何典型的.env文件应该没有问题

就是这样!希望这有所帮助,尤其是那些不想在他们的项目中安装另一个软件包的人!

相关内容

最新更新