如何在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
相关产品推荐
相关产品推荐

