如何在 Locust 中正确加载并使用 .env 文件中的环境变量
如何在 Locust 中正确加载并使用 .env 文件中的环境变量 本文详解 Locust 测试中无法读取 .env 文件变量的根本原因,并提供基于 Makefile 和 shell 的可靠解决方案,确保 os.environ.get() 能正确获取环境变量值。 在性能测试中,你是否也遇到过这样的场
如何在 Locust 中正确加载并使用 .env 文件中的环境变量
本文详解 Locust 测试中无法读取 .env 文件变量的根本原因,并提供基于 Makefile 和 shell 的可靠解决方案,确保 os.environ.get() 能正确获取环境变量值。

在性能测试中,你是否也遇到过这样的场景:明明在项目根目录下准备好了 .env 文件,里面也写好了关键的 API Key,但一运行 Locust 脚本,请求就报错,返回的 URL 里那个关键的参数值竟然是空的?
问题根源其实很明确:Locust 本身并不会自动加载 .env 文件。这是一个非常普遍的认知误区。需要澄清的是,.env 文件只是一种约定俗成的配置存储格式,Python 进程(包括 Locust)在启动时,并不会主动去解析它。你的代码 os.environ.get("VALUE", "") 实际上读取的是操作系统级别的环境变量,而不是 .env 文件里的内容。所以,即便 .env 文件存在且包含了 VALUE=diuqriqjqj,只要没有显式加载,apiKey 变量拿到的就是一个空字符串。这直接导致构造出的请求 URL 变成了 /api/test/apiKey=,最终引发连接错误或 API 认证失败。
✅ 正确做法:显式加载 .env 并注入进程环境
方案一:使用 python-dotenv(推荐,最 Pythonic)
安装依赖:
pip install python-dotenv
修改 locust.py,在顶部添加加载逻辑:
import os from dotenv import load_dotenv from locust import HttpUser, task, between # 显式加载 .env 文件(默认加载当前目录下的 .env) load_dotenv() apiKey = os.environ.get("VALUE", "") if not apiKey: raise ValueError("Missing required environment variable: VALUE") class Api(HttpUser): wait_time = between(1, 5) @task def test_api(self): self.client.get(f"/api/test/apiKey={apiKey}")直接运行即可:
locust -f locust.py
✅ 优势:跨平台、无需 Shell 依赖、支持变量覆盖与注释、可指定路径(如
load_dotenv(".env.staging"))。
方案二:Shell 层面加载(适用于 CI/Makefile 场景)
如果因为某些约束无法引入新的 Python 依赖,那么可以考虑在 Shell 层面加载 .env 并将变量导出到环境。
使用 source + export(Bash/Zsh):
set -a; source .env; set +a; locust -f locust.py
set -a的作用是让后续所有变量自动export,set +a则关闭该行为。Makefile 集成(如答案中所示):
# Makefile ifneq (,$(wildcard ./.env)) include .env export endif locust: env VALUE=$(VALUE) locust -f locust.py然后执行
make locust即可。需要注意的是,这种方式要求变量名完全匹配(即.env中必须为VALUE=...),并且 Makefile 的include指令不会解析等号后面的引号。因此,建议.env文件直接写作VALUE=diuqriqjqj(无空格、无引号)。
⚠️ 注意事项
- ❌ 不要依赖
if test -f .env; then locust ...; fi—— 这条命令仅仅判断文件是否存在,并不会加载其中的变量。 - ❌ 避免在
.env中使用引号包裹值(如VALUE="abc")。虽然python-dotenv支持这种写法,但使用 Shell 的source命令时可能会报错。统一采用VALUE=abc的格式更稳妥。 - ✅ 始终校验关键变量是否加载成功(如示例中的
raise ValueError),避免静默失败,这在调试时能节省大量时间。 - ? 敏感值(如 API Key)切勿提交至版本控制系统,务必记得将
.env文件加入.gitignore。
采用上述任一方案,os.environ.get("VALUE") 就能稳定返回预期的值,Locust 发出的请求也将携带有效的凭证,从而彻底解决因环境变量缺失导致的连接异常问题。
Windows 10 是一款微软推出的经典操作系统,拥有硬件兼容性与多任务处理能力。它更偏向把系统状态查看和常用调节动作放在一起,适合需要持续观察和微调设备状态的场景。
极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。
















