gpt4 book ai didi

python - Locust:我如何仅针对当前 Locust 用户与其余任务共享 auth cookie?

转载 作者:太空宇宙 更新时间:2023-11-04 02:32:53 25 4
gpt4 key购买 nike

我正在考虑将我的多线程 python 脚本移动到 locust。

我的脚本所做的简单解释是:

  1. 为每个用户创建一个话题
  2. 在每个线程中验证用户并获取auth cookie
  3. 使用该 auth cookie 以设定的时间间隔执行各种 api 调用

当我开始研究 Locust 时,我注意到在其特定时间间隔内执行每项任务的唯一方法是,我需要为每个任务创建一个任务集。

这引发了一个问题,即如何在任务集之间为给定的派生用户共享身份验证 cookie?因为从长远来看,我还需要在给定派生用户的任务集之间共享响应数据,因为它在派生用户之间有所不同。

在下面的示例代码中,locust 生成的所有用户共享同一个“storage.cookie”。有没有办法让每个用户保持 storage.cookie 唯一,并与 locust 给定衍生用户的所有任务集共享它? Locust 是否报告当前正在执行任务的用户?

from __future__ import print_function
from locust import Locust, TaskSet, task, HttpLocust
import json


def auth(l):
payload = {"username":"some_username","password":"some_password"}
resp = l.client.post('/auth', data = json.dumps(payload))
storage.cookie = # get auth cookie from resp

def do_i_auth(l):
if len(storage.cookie) == 0:
auth(l)

class storage(object):
cookie == ''

class first_call(TaskSet):
def on_start(self):
do_i_auth(self)

@task
def get_api_a(self):
headers = {"Cookie":storage.cookie}
self.client.get('/api_a', headers)

class second_call(TaskSet):
def on_start(self):
do_i_auth(self)

@task
def get_api_b(self):
headers = {"Cookie":storage.cookie}
self.client.get('/api_b', headers)

class api_A(HttpLocust):
task_set = first_call
min_wait = 5000
max_wait = 5000

class api_B(HttpLocust):
task_set = second_call
min_wait = 10000
max_wait = 10000

最佳答案

您可以尝试让您的授权函数返回 cookie 并将其分别存储在每个类中。像这样:

from __future__ import print_function
from locust import Locust, TaskSet, task, HttpLocust
import json


def auth(l):
payload = {"username":"some_username","password":"some_password"}
resp = l.client.post('/auth', data = json.dumps(payload))
cookie = # get auth cookie from resp
return cookie

class first_call(TaskSet):
cookie = ""

def on_start(self):
self.cookie = auth(self)

@task
def get_api_a(self):
headers = {"Cookie":self.cookie}
self.client.get('/api_a', headers)

关于python - Locust:我如何仅针对当前 Locust 用户与其余任务共享 auth cookie?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48739300/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com