常见问题解答 (FAQ)

如何解决……

在负载测试中出现的错误(如 5xx 错误、连接中止、连接被对端重置等)

检查您的服务器日志。如果在低负载下能正常工作,那么问题几乎肯定不在 Locust,而是在您测试的系统上。

清除 Cookies,使得下一次任务迭代看起来像是新用户

在任务结束时调用 self.client.cookies.clear()

如何控制 HTTP 请求中的头部或其他参数

Locust 中的 HttpUser 客户端继承自 requests,因此大多数 requests 的参数和方法都可以与 Locust 一起使用。首先查阅 requests 文档和 Stack Overflow 中的相关答案,若仍有问题,可以在 Stack Overflow 上询问 Locust 特定的问题。

基本认证(Authorization header)在重定向后不起作用

requests 有一个安全机制,在域名更改时会删除认证头。这通常发生在测试单点登录(SSO)时,SSO 通常位于不同域,并且涉及多个重定向(30x)。

由于 allow_redirects=True 是默认 request 行为,您需要将其关闭,手动处理重定向并重新注入认证头,例如:

response = self.client.post(
    allow_redirects=False,
    url=...)

while "location" in response.headers:
    response = self.client.get(
        allow_redirects=False,
        url=response.headers['location'],
        headers={
            'Authorization': 'XXX'
        }
    )

如何基于录制的浏览器会话创建 Locust 文件

尝试使用 har2locust

如何在 Windows 子系统(WSL)上运行 Locust 的 Docker 容器(Windows 10 用户)

如果您在 Windows 计算机上使用 WSL,则需要比普通的 docker run …​ 命令多一个步骤:将 locusttest1.py 文件复制到 Windows 路径下的一个文件夹,并将该文件夹挂载到 WSL 中:

$ mkdir /c/Users/[YOUR_Windows_USER]/Documents/Locust/
$ cp ~/path/to/locusttest1.py /c/Users/[YOUR_Windows_USER]/Documents/Locust/
$ docker run -p 8089:8089 -v /c/Users/[YOUR_Windows_USER]/Documents/Locust/:/mnt/locust locustio/locust:1.3.1 -f /mnt/locust/locusttest1.py

如何在自定义端点上运行 Locust

locust/web.py 文件中的所有 @app.route 定义前添加自定义端点,并修改如下(例如 /locust 为新端点):

app = Flask(__name__, static_url_path='/locust')

修改 locust/templates/index.html 中静态内容的路径,例如:

<link rel="shortcut icon" href="{{ url_for('static', filename='img/favicon.ico') }}" type="image/x-icon"/>

Locust Web UI 不显示我的任务运行,显示 0 RPS

Locust 只有在您告诉它时才知道发生了什么。使用 事件钩子 可以让 Locust 知道代码中发生了什么。如果您使用 Locust 的 HttpUser 并且通过 self.client 发起 HTTP 调用,Locust 通常会自动触发适当的事件,从而减少您的工作量,除非您需要重写默认事件。

如果您使用的是普通的 User 类或 HttpUser 但不通过 self.client 发起 HTTP 调用,Locust 不会触发事件。您需要自己触发事件。请参阅 Locust 文档了解更多示例。

HTML 报告中长时间运行的测试充满了失败的请求

其他问题和疑问

如果您遇到并解决了问题,可以在这里添加!任何拥有 GitHub 账户的人都可以贡献!

如果您的 Locust 问题没有在这里解答,请查阅 StackOverflow,或者将问题发布到那里。本维基不是用来提问的,而是用来回答问题的 :)