You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 01:45:35