You need to enable JavaScript to run this app. 如何在Locust中配置Web认证?未找到自定义认证处理函数是否有遗漏
优惠活动
大模型
产品
解决方案
定价
更多

如何在Locust中配置Web认证?未找到自定义认证处理函数是否有遗漏

Locust Web 认证的实际实现逻辑

你对内置认证功能的认知偏差在哪

  • 官方提供的--web-auth参数,本质就是个极简的静态Basic Auth锁,从设计之初就根本没打算做自定义校验函数、角色权限这类扩展能力
  • 它的运行逻辑非常简单:启动时把你传入的username:password字符串当成唯一合法凭证,所有访问Web控制台的请求,只要携带的Basic Auth认证头内容和这个字符串完全匹配就放行,对不上就直接返回401要求输入凭证
  • 你翻遍源码都没找到能接收用户名密码、返回校验结果或角色信息的处理函数,不是你漏看了内容,是这个功能压根就没设计这类逻辑——它的定位只是给部署在公网的Locust控制台加个最基础的防误触密码锁,不是用来搭建企业级身份认证系统的。

为什么测试用例全是硬编码的账号密码

  • 这个功能当初上线的时候,需求就只是“给Web界面加个单账号密码的防护”,从一开始就没规划多用户、动态校验的场景
  • 源码里的auth_credentials参数最终是直接传给内置Flask服务的认证装饰器,校验逻辑是写死的字符串相等判断,根本没留可以替换自定义校验规则的扩展入口。

需要自定义认证规则时的实现方案

如果你需要对接公司SSO、动态校验用户身份、做不同角色的访问控制,别死磕内置的--web-auth参数,直接基于Locust开放的Flask实例自行扩展即可,流程非常简单:

  • 初始化压测环境时,不要用CLI的--web-auth参数自动拉起带内置认证的Web UI,手动调用create_web_ui方法初始化Web服务,调用过程中不要传入auth_credentials参数,彻底关闭内置认证逻辑
  • 拿到Web服务对应的Flask应用实例,通过请求前置钩子写入你自己的认证逻辑即可
  • 参考示例代码:
from locust import Environment, User, task, between

class DemoTestUser(User):
    wait_time = between(1, 3)
    @task
    def test_index(self):
        self.client.get("/")

# 初始化压测环境
env = Environment(user_classes=[DemoTestUser])
# 手动创建Web UI,不启用内置认证
web_ui = env.create_web_ui(
    host="0.0.0.0",
    port=8089
)

# 获取底层Flask应用对象
flask_app = web_ui.server.app

# 编写自定义认证逻辑
@flask_app.before_request
def check_user_auth():
    # 在这里写入你自己的校验逻辑:对接LDAP、查数据库、校验JWT、判断用户权限
    from flask import request, Response
    auth_info = request.authorization
    # 替换成你自己实现的用户校验函数
    if not auth_info or not verify_user_credential(auth_info.username, auth_info.password):
        return Response(
            "需要合法凭证才能访问控制台",
            401,
            {"WWW-Authenticate": "Basic realm='Locust 压测控制台'"}
        )

内容的提问来源于stack exchange,提问作者daydreamer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.26 04:54:03