我正在考虑将我的多线程 python 脚本移动到蝗虫。
我的脚本所做的简单解释是:
- 为每个用户创建一个线程
- 在每个线程中验证用户并获取 auth cookie
- 使用该 auth cookie 以设定的时间间隔执行各种 api 调用
当我开始研究 locust 时,我注意到以自己的特定时间间隔执行每个任务的唯一方法是,我需要为每个任务创建一个任务集。
这带来了一个问题,即我如何在任务集之间为给定的衍生用户共享身份验证 cookie?因为从长远来看,我还需要在给定的衍生用户的任务集之间共享响应数据,因为它在衍生用户之间是不同的。
在下面的示例代码中,所有由 locust 生成的用户共享同一个“storage.cookie”。有没有办法让 storage.cookie 每个用户保持唯一,并通过 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