先给个结论:Locust 它自己不会主动去读 `.env` 文件,这事儿得靠我们手动来。要么用 `python-dotenv` 在 Python 层面加载,要么在 Shell 启动命令里显式注入。否则,你写的 `os.environ.get()` 大概率会返回空值。下面把两种靠谱方案掰开揉碎讲清楚。

很多人在 Locust 测试脚本里直接用 `os.environ.get("VALUE")`,结果死活拿不到值,返回空字符串。根本原因其实很简单:Locust 进程启动时,压根儿就没自动加载 .env 文件。这和 Django、Flask 那些框架不同,Locust 本身不集成 dotenv 功能。`.env` 文件说白了就是个约定俗成的配置存储格式,必须由我们显式解析并注入到进程环境里,它才会生效。

那么,怎么解决?

✅ 推荐方案一:Python 侧加载(简洁、跨平台、推荐)

最省心的办法,是在 Python 层面直接上手。在 `locust.py` 文件开头加上对 `python-dotenv` 的支持(记得先装:`pip install python-dotenv`):

from dotenv import load_dotenv
import os
from locust import HttpUser, task, between

# 自动加载同目录下的 .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}")

有几个细节需要注意:

✅ 方案二:Shell 侧注入(无需额外依赖,适合 CI/CD)

如果你不想多装一个包,或者你正在走 CI/CD 管道,那 Shell 侧注入也是个好选择。在启动命令里由 Shell 直接加载并导出变量:

# Linux/macOS:使用 set -a + source(推荐)
set -a; source .env; set +a; locust -f locust.py

或者用 Makefile 来管理(虽然原答案里也有示例,但下面这个更简洁可靠):

# 确保 .env 格式为 KEY=VALUE(无空格/引号),然后:
export $(grep -v '^#' .env | xargs) && locust -f locust.py

这行命令先过滤掉注释行,再把键值对导出为环境变量,接着启动 Locust。一步到位,干净利落。

? 总结:

说到底,方法就上面两种,选一个顺手的一劳永逸。现在,去试试吧。

本文转载于:https://www.php.cn/faq/2324112.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。