作者: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)
网友评论