动态创建蝗虫任务?

时间:2020-10-08 19:53:02

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

基本上,我需要产生30个用户并为他们提供50个不同的任务,我需要它们并行运行。因此,我试图生成50个类似以下的任务:

class UserSimulation(HttpUser):
    host = os.environ['BASE_URL']

    # time in seconds the simulated user will wait before proceeding to the next task
    wait_time = between(1, 2)

    for item_id in range(1, 51):

        @task(1)
        def view_items_with_different_item_ids(self, item_id=item_id):
            self.client.get(
                url=f"/my-url/item24_00{item_id}",
                verify=False,
                auth=(os.environ['USERNAME'], os.environ['PASSWORD'])

出于明显的原因,这种方法不能让我动态创建50个任务,因为只有最后一个被保存。有什么解决方法的想法吗?

1 个答案:

答案 0 :(得分:0)

要按照您尝试的方式进行操作,请尝试creating different functions programmatically。我不知道如何将装饰器与这些装饰器一起使用,但是如果没有其他方法,则可以在创建装饰器时将其添加到蝗虫任务列表中。只需创建任务列表tasks = [],然后在创建函数时tasks.append(view_items_with_different_item_ids_1)

但是,根据您对所需内容的描述,如果需要这样做,我并不满意。如果您只需要30个用户拨打该电话50次,则只需执行一项任务,就可以在那里遍历该呼叫。

class UserSimulation(HttpUser):
    host = os.environ['BASE_URL']

    # time in seconds the simulated user will wait before proceeding to the next task
    wait_time = between(1, 2)

    @task(1)
    def view_items_with_different_item_ids(self):
        for item_id in range(1, 51):
            self.client.get(
                url=f"/my-url/item24_00{item_id}",
                verify=False,
                auth=(os.environ['USERNAME'], os.environ['PASSWORD'])

如果您需要一个随机数而不是一个连续数,但是需要确保每个数字被调用一次:

    import random

    item_ids = list(range(1,51))
    random.shuffle(item_ids)
    @task(1)
    def view_items_with_different_item_ids(self):
        for item_id in item_ids:
            self.client.get(
                url=f"/my-url/item24_00{item_id}",
                verify=False,
                auth=(os.environ['USERNAME'], os.environ['PASSWORD'])

如果您只想一直拉随机数,而不在乎重复:

    import random

    item_ids = list(range(1,51))
    @task(1)
    def view_items_with_different_item_ids(self):
        random_id = random.choice(item_ids)
        self.client.get(
            url=f"/my-url/item24_00{random_id}",
            verify=False,
            auth=(os.environ['USERNAME'], os.environ['PASSWORD'])