您的位置:首页 >如何在 Locust 中正确加载并使用 .env 文件中的环境变量
发布于2026-05-03 阅读(0)
扫一扫,手机访问
本文详解 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 认证失败。
安装依赖:
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"))。
如果因为某些约束无法引入新的 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),避免静默失败,这在调试时能节省大量时间。.env 文件加入 .gitignore。采用上述任一方案,os.environ.get("VALUE") 就能稳定返回预期的值,Locust 发出的请求也将携带有效的凭证,从而彻底解决因环境变量缺失导致的连接异常问题。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
9