如何让Locust Master动态地将用户分配给从属服务器

时间:2018-05-08 20:32:36

标签: python-3.x performance-testing load-testing locust

我正在尝试使用Locust.io加载测试HTTP URL(动态)。我已经有了python脚本,它将对URL进行GET调用。我面临的挑战是,网址和用户数是动态的,可以从CSV文件中读取。

例如,以下是负载测试的输入结果:

Input.csv:

============

URLs          No of users to simulate
=============================================
URL 1               1000
URL 2               5000
URL 3               2000
URL 4               1000

CSV中的每个网址都是唯一的,并且模拟每个网址的更改的用户数量。我想在分布式模式下使用蝗虫负载测试。

例如,Locust master将读取URL 1并将其发送到Slave 1以模拟1000个用户。然后选择URL2并将其发送到Slave 2以模拟5000个用户。

我如何使用蝗虫实现这一目标?有人会抛光吗?

2 个答案:

答案 0 :(得分:0)

蝗虫并不像你想象的那样支持这种方式。蝗虫权重任务而不是用户,因此您可以为要执行的任务(上面的网址)提供相对权重。

您可能想要做的是使用TaskSet

以这种方式自行加权
class MyTaskSet(TaskSet):
    @task(1)
    def one(self):
        self.client.get("url 1")

    @task(5)
    def two(self):
        self.client.get("url 2")

    @task(2)
    def three(self):
        self.client.get("url 3")

    @task(1)
    def three(self):
        self.client.get("url 4")

您可以使用代码来解析和读取您的文件(虽然您已将其命名为csv格式,但您已将其命名为?),然后将其传递给{{1}装饰者和网址。

答案 1 :(得分:0)

使用蝗虫LoadTestShape: https://docs.locust.io/en/stable/generating-custom-load-shape.html

MyCustomShape(LoadTestShape)类: time_limit = 600 spawn_rate = 20

def tick(self):
    run_time = self.get_run_time()

    if run_time < self.time_limit:
        # User count rounded to nearest hundred.
        user_count = round(run_time, -2)
        return (user_count, spawn_rate)

    return None