登录
首页 >  文章 >  python教程

Locust加载.env文件方法

时间:2026-04-27 10:22:22 256浏览 收藏

本文深入剖析了Locust测试中无法读取`.env`文件环境变量的常见误区与根本原因——Locust本身不自动解析`.env`,导致`os.environ.get()`始终返回空值、引发API认证失败或连接异常;文章不仅一针见血地指出问题本质,更提供了两种生产级可靠方案:推荐使用`python-dotenv`库在Python层显式加载(跨平台、安全、支持注释与多环境),以及适用于CI/Makefile场景的Shell层加载技巧(通过`source`+`export`或Makefile变量注入),同时强调关键校验、引号规避和敏感信息保护等实战注意事项,助你快速打通环境变量配置链路,让Locust测试真正“带证上岗”。

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

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

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

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 场景)

若因约束无法引入新依赖,可通过 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 请求将携带有效凭证,彻底解决连接异常问题。

到这里,我们也就讲完了《Locust加载.env文件方法》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于的知识点!

资料下载
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>