【问题标题】:Passing same value to multiple tasks in locust将相同的值传递给蝗虫中的多个任务
【发布时间】:2021-01-14 12:07:11
【问题描述】:

我们有一个要求,我们需要发送一个发布请求,然后为同一端点发送一个删除请求(REST API)。

需要为每个发布请求、每次迭代中的每个用户生成一个唯一的 id。 生成的唯一字符串放在任务类(SequentialTask​​Set)的 on_start() 方法中。

问题是,它运行一次迭代,但为每个用户的连续迭代生成相同的 id。 要在每次迭代中为每个用户获取唯一 ID,在任务本身中生成唯一字符串是可行的,但这里的问题是,我无法将相同的 ID 传递给需要发送删除请求的下一个任务。

这就是现在的代码:

class StudentClass(SequentialTaskSet):

    rndString = None

    def on_start(self):
        self.rndString = str(uuid.uuid4())

    @task
    def postRequest(self):

        endpoint = "/students"

        headers = {
            'Authorization': 'Bearer token',
            'content-type': 'application/json', 'accept': 'application/json'
        }

        data = {
            "Id": f'std-{self.rndString}',
        }

        with self.client.post(endpoint, name="Post request", headers=headers, data=json.dumps(data),
                              catch_response=True) as response:
        ........

感谢任何帮助实现这一目标。

【问题讨论】:

    标签: locust


    【解决方案1】:

    我认为,如果您不需要以不同的权重调用 post 和 delete 请求,您可以在同一个任务中进行这两个调用。有什么我遗漏的东西需要你分开发布和删除电话的任务吗?如果您确实需要将它们分开,您可以在 post 任务中更新 self.rndString,它会在 delete 中使用更新后的那个。

    【讨论】:

    • 感谢 Muhammed Tanır 的回复。是的,在那种情况下,我们可以在同一个任务中使用,但是我们需要分别测量两个不同的 POST 和 DELETE 请求,因此需要两个不同的任务。
    • 据我所知,locust 会分别记录每个调用,而不管它们在哪个任务中,每个调用都会触发 request_success 和 request_failure 事件。希望对您有所帮助。
    • 哦,好吧..我不知道..会检查,如果这给出了单独的交易,那么问题就解决了。但同样,我们应该在任务方法中为数据、标题等设置不同的变量名。不过不是问题。谢谢。
    【解决方案2】:
    @task(1)
    def hello_world(self):
        response = self.client.get("/listing")
        print(response.text)
    
    @task
    def fill_crud(self):
        response = self.client.post('/api/fill_post/', {"number_1": 76, "number_2": 897, "number_3": 564, "text_4": "Sneha"})
        print(response.status_code)
        res = json.loads(response.text)
        response_id = (res['id'])
        response_put = self.client.put(f'/api/fill_post/{response_id}/', {"number_1": 76576, "number_2": 89657, "number_3": 5654, "text_4": "Sneha"})
        response_patch = self.client.patch(f'/api/fill_post/{response_id}/', {"text_4": "Suveksha"})
        response_delete = self.client.delete(f'/api/fill_post/{response_id}/')
    

    你可以这样试试,希望对大家有帮助。

    【讨论】:

      猜你喜欢
      • 2016-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-31
      相关资源
      最近更新 更多