locust 分布式提取参数不重复

作者:Gakki

前言

  • 在使用 Locust 进行分布式的时候,每一个 worker 都会产生一个队列Queue,这也会导致每个脚本读取的参数文件都是一样。例如,压测的时候 Token 会被多次使用。但我们希望的是,每个参数在压测的时候只被使用一次。如何解决这问题?
  • 我想到的是:
    1. 在逻辑不复杂、节点不多的情况下,修改每一个 worker 脚本读取不同位置的参数即可。也就是将压测脚本复制 N 份,然后每份压测脚本读取不同位置的参数。
      例如:worker1 读取第 1 行到第 1000 行的数据,worker2 读取第 1001 行到 2000 行数据。
    2. 如果业务逻辑复杂,并且并发量比较大。那么改脚本就比较麻烦。这时候可以结合 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)

你可能感兴趣的:(locust 分布式提取参数不重复)