如何让pytest-django在运行测试前加载.env环境变量?
解决pytest-django运行前加载.env环境变量的问题
以下是几种实用的解决方案,任选其一即可:
方案一:在settings.py中直接加载.env
既然pytest会直接读取api/settings.py,可以把环境变量加载逻辑移到settings.py的最开头,确保任何依赖环境变量的代码执行前,变量已经被加载:
import os from dotenv import read_dotenv # 加载项目根目录下的.env文件(根据实际路径调整) # 如果.env和settings.py不在同一层级,比如根目录,就用下面的路径拼接 env_path = os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), '.env') read_dotenv(env_path) # 后续原来的settings代码不变
这样不管是通过manage.py运行项目,还是pytest加载settings,都会自动加载.env里的变量。
方案二:利用pytest的conftest.py钩子
在项目根目录创建conftest.py文件,添加pytest会话启动前的钩子函数,提前加载.env:
from dotenv import read_dotenv def pytest_sessionstart(session): # 加载.env文件,路径按需调整 read_dotenv()
pytest_sessionstart会在pytest初始化、加载Django配置之前执行,能保证环境变量先被注入到系统环境中。
方案三:使用pytest-dotenv插件(可选,需额外安装)
如果愿意引入第三方插件,可以安装pytest-dotenv:
pip install pytest-dotenv
安装后无需额外代码,插件会自动在pytest启动时加载项目根目录的.env文件,还支持通过--env-file参数指定自定义.env路径。
内容的提问来源于stack exchange,提问作者Marcos Severt Silva
相关产品推荐
相关产品推荐

