商城首页欢迎来到中国正版软件门户

您的位置:首页 >如何在 Locust 中正确加载并使用 .env 文件中的环境变量

如何在 Locust 中正确加载并使用 .env 文件中的环境变量

  发布于2026-05-03 阅读(0)

扫一扫,手机访问

如何在 Locust 中正确加载并使用 .env 文件中的环境变量

本文详解 Locust 测试中无法读取 .env 文件变量的根本原因,并提供基于 Makefile 和 shell 的可靠解决方案,确保 os.environ.get() 能正确获取环境变量值。

如何在 Locust 中正确加载并使用 .env 文件中的环境变量

在性能测试中,你是否也遇到过这样的场景:明明在项目根目录下准备好了 .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)

  1. 安装依赖

    pip install python-dotenv

  2. 修改 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}")

  3. 直接运行即可

    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 的作用是让后续所有变量自动 exportset +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 发出的请求也将携带有效的凭证,从而彻底解决因环境变量缺失导致的连接异常问题。

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

热门关注