基本上,我需要产生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个任务,因为只有最后一个被保存。有什么解决方法的想法吗?
答案 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'])