【问题标题】:Different data set for each thread in locust / Thread control in locust蝗虫中每个线程的不同数据集/蝗虫中的线程控制
【发布时间】:2020-10-15 07:53:46
【问题描述】:
我想对分布式应用程序进行负载测试,我决定使用 Locust。我面临的问题是这个应用程序有许多不同的输入,我要避免这些输入的重复。
例如:
让我们考虑有 4 个输入(A、B、C、D)。现在我正在从文件中读取这些输入并发布在应用程序的 API 上。问题是,如果我有将输入 A 发布到 API 的任务,我生成的所有线程都会将“A”发布到 API,从而使其重复。我想要一种机制,我可以将不同的输入提供给产生的不同线程(用户)。
有没有办法让我可以控制线程(用户)或简单地为他们提供不同的输入?
【问题讨论】:
标签:
python
multithreading
performance
concurrency
locust
【解决方案1】:
您也许可以使用正在运行的用户的 greenlet 标识符
import greenlet
...
(inside your task)
id = greenlet.getcurrent().minimal_ident
它们在 locust worker 中并不是唯一的,但也许你不是分布式运行的。
【解决方案2】:
我遇到了同样的问题,在 medium.com 上找到了一个 article(由 Karol Brenja 撰写)探讨了这个主题。文章中的代码不能与最新版本(截至撰写时为 1.4.4)的 locust 一起工作。
简而言之:
- 在greenlet的主/本地节点上启动ZMQ“服务器”,将测试数据(A、B、C、D)排队
- 从 worker 连接到 master 上的服务器
- 服务器响应队列中的输入之一
- Worker 使用 testdata 运行任务
这也适用于本地模式,只要在阻塞模式下不请求测试数据。