【问题标题】:Need a way to pass variables from User class to a TaskSet in Locust需要一种将变量从 User 类传递到 Locust 中的 TaskSet 的方法
【发布时间】:2020-05-26 06:22:58
【问题描述】:

我是 locust 新手,我正在尝试编写负载测试。我的 Locust 用户的目的是通过调用 createItem API 创建一个项目。在这种情况下,每个请求中的 item_id 应该是唯一的,因为它具有唯一的标准。

这就是我所做的。

import json
from random import randint

from locust import HttpUser, constant, SequentialTaskSet, task

from flow.helper import read_json


class WebsiteUser(HttpUser):
    """
    User class that does requests to the locust web server running on localhost
    """
    host = "http://localhost:8080/api/"
    wait_time = constant(3)

    @task
    class SequenceOfTasks(SequentialTaskSet):
        item_id = randint(100, 9999)

        @task
        def create_item(self):
            request = read_json('resources/create_item.json')
            request['item-id'] = self.item_id
            response = self.client.post('createItem', json.dumps(request),
                                        headers={'Content-Type': 'application/json'})
            assert response.status_code == 200

第一个请求成功,它成功创建了一个条目。但是后来的所有请求都失败了,在应用程序服务器的日志中,我可以看到它正在尝试创建具有相同 item_id 的项目。有什么方法可以在 WebsiteUser 类中动态生成一个值并将其传递给 SequenceOfTasks?

【问题讨论】:

    标签: python locust


    【解决方案1】:

    不是对这个问题的确切答案,但我通过在方法内移动随机逻辑使该代码正常工作而没有冲突的 item_ids。类似的东西:-

    @task
        class SequenceOfTasks(SequentialTaskSet):
            self.item_id = None
            @task
            def create_item(self):
                request = read_json('resources/create_item.json')
                self.item_id = randint(100, 9999)
                request['item-id'] = self.item_id
                ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-05-11
      • 1970-01-01
      • 2018-03-31
      • 2017-07-29
      • 1970-01-01
      • 1970-01-01
      • 2019-01-22
      相关资源
      最近更新 更多