作者:Gakki
前言
- 在使用 Locust 进行分布式的时候,每一个 worker 都会产生一个队列Queue,这也会导致每个脚本读取的参数文件都是一样。例如,压测的时候 Token 会被多次使用。但我们希望的是,每个参数在压测的时候只被使用一次。如何解决这问题?
- 我想到的是:
- 在逻辑不复杂、节点不多的情况下,修改每一个 worker 脚本读取不同位置的参数即可。也就是将压测脚本复制 N 份,然后每份压测脚本读取不同位置的参数。
例如:worker1 读取第 1 行到第 1000 行的数据,worker2 读取第 1001 行到 2000 行数据。
- 如果业务逻辑复杂,并且并发量比较大。那么改脚本就比较麻烦。这时候可以结合 Redis 来读取数据。节点脚本从 Redis 队列里来获取数据即可。
1. 通过脚本读取不同位置的参数
from locust import task, TaskSet, HttpUser, between
import queue
class TestCase(TaskSet):
def on_start(self):
pass
@task
def case_test(self):
get_data = self.user.data_list.get() # 从队列里取
class WebUser(HttpUser):
tasks = [TestCase]
wait_time = between(0.8, 1)
data_list = queue.Queue()
# 每个 worker 获取不同的数据
with open("token.txt", "r") as file:
# 读取第 1 行到 1000 行的数据
file_list = file.readlines()[0:1000]
for msg in file_list:
temp_list = msg.split(",")
datas = {
"token": temp_list[0].replace('\n', '')
}
data_list.put_nowait(datas)
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。