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)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容