Azure Pipelines中Pytest无法读取.env文件环境变量的问题求助
Azure Pipelines中Pytest无法读取.env文件环境变量的问题求助
嗨,我仔细看了你配置的Azure Pipelines任务,你已经成功把.env从安全文件库下载并复制到工作目录了,但Pytest读不到环境变量的核心原因是:Python和Pytest本身并不会自动加载.env文件里的环境变量,得咱们手动做加载操作才行~下面给你两种实用的解决方案:
方法一:用python-dotenv库自动加载(推荐)
这是Python生态里处理.env文件的标准方式,步骤很简单:
添加依赖:把
python-dotenv加到你的requirements.txt里,或者在Pipeline脚本里临时安装:pip3 install python-dotenv让Pytest启动时自动加载:在你的项目根目录创建(或修改)
conftest.py文件,添加以下代码:import pytest from dotenv import load_dotenv def pytest_configure(): # 自动加载当前目录下的.env文件 load_dotenv()这样每次Pytest启动时,就会自动读取
.env里的变量并注入到环境中,测试代码里直接用os.getenv("变量名")就能拿到值了。或者你也可以在Pipeline的脚本里直接在运行Pytest前执行加载命令,修改你的script任务:
cd $(System.DefaultWorkingDirectory) sudo apt-get update sudo apt-get install -y python3-dev default-libmysqlclient-dev build-essential unixodbc-dev pip3 install -r requirements.txt pip3 install python-dotenv pytest pytest-azurepipelines pytest-cov # 先加载.env再运行Pytest python3 -c "from dotenv import load_dotenv; load_dotenv()" && python3 -m pytest --doctest-modules --junitxml=junit/test-results.xml --cov=. --cov-report=xml
方法二:直接在Shell中导出.env变量(无需Python依赖)
如果你不想额外引入Python库,可以通过Shell命令把.env里的变量直接导出到当前会话的环境中:
修改你的script任务,在安装依赖前添加导出命令:
cd $(System.DefaultWorkingDirectory) # 导出.env中的变量(跳过注释行) export $(cat .env | grep -v '#' | xargs) sudo apt-get update sudo apt-get install -y python3-dev default-libmysqlclient-dev build-essential unixodbc-dev pip3 install -r requirements.txt pip3 install pytest pytest-azurepipelines pytest-cov python3 -m pytest --doctest-modules --junitxml=junit/test-results.xml --cov=. --cov-report=xml
这样整个Shell会话的环境变量就包含了.env里的内容,Pytest运行时自然能读取到这些变量。
额外排查小技巧
如果还是有问题,可以在脚本里加一行命令确认.env文件是否在正确的位置:
# 查看工作目录下的文件,确认.env存在 ls $(System.DefaultWorkingDirectory)
备注:内容来源于stack exchange,提问作者Alex T
相关产品推荐
相关产品推荐

