使用 Locust 工具时的 TCP 会话

问题描述 投票:0回答:2

在我的用例中,我使用 locust 模拟 100 个用户,每个用户都有一组任务(包括向主机的不同页面发送 HTTP GET 请求)。在这种情况下,用户是什么意思,是否意味着为了模拟用户,locust 在 Locust 主机和 Web 服务器之间建立 TCP 会话并在通过该连接发送多个 HTTP 请求时保持连接?那么当 Locust 说有 100 个用户启动时,是否意味着有 100 个 TCP 会话启动并且它将使用这些会话来回发送 HTTP 请求和响应?

不确定我对蝗虫工作的理解是否正确。

python connection load-testing tcpclient locust
2个回答
0
投票

我不认为使用负载测试工具是个好主意,除非你了解它是如何在引擎盖下工作的,以及它是否能正确模拟被测系统的预期使用情况。

一个可能的选择是查看文档,例如Writing a locustfile chapter says:

当测试开始时,locust 将为它模拟的每个用户创建此类的实例,并且每个用户都将开始在自己的绿色 gevent 线程中运行。

用@task 装饰的方法是你的locust 文件的核心。对于每个运行的用户,Locust 创建一个 greenlet(微线程),它将调用这些方法。

当任务完成执行后,用户将在其等待时间内休眠(在本例中为 1 到 5 秒)。等待时间过后,它会选择一个新任务并不断重复。

“理解”的最佳方式是使用像 Wireshark 这样的嗅探器工具,您可以看到 TCP 和 HTTP 级别上到底发生了什么,将网络足迹与真实浏览器(或其他应用程序)进行比较,并相应地修改您的 Locust 配置所以 Locust 会发送与真实浏览器相同数量的相同性质的请求。

更多信息:什么是 Locust 负载测试?


0
投票

你的理解是正确的。每个 Locust HttpUser 都有自己的底层 requests.Session 对象。

每个这样的对象都维护自己的 TCP/HTTP 连接(和 cookie),因此如果您有 10 个并发用户,您将有 10 个并发连接。

用户的后续任务迭代将重用相同的连接。

如果愿意,您可以在单个用户内执行并发请求/连接,请参阅 https://docs.locust.io/en/stable/increase-performance.html#concurrency,但这是一个罕见的用例可能不是你要问的。

© www.soinside.com 2019 - 2024. All rights reserved.