Возможность установить min_wait / max_wait для каждой задачи или что-то подобное? - PullRequest
0 голосов
/ 27 октября 2018

Я пытаюсь смоделировать определенное поведение, когда один вызов API выполняется каждые 8 ​​секунд, а другой - каждые 24 секунды. У Locust есть возможность установить min_wait и max_wait для всего task_set. Был ли способ установить его для каждой задачи или предотвратить выполнение задачи, если только определенное время не прошло безопасным образом, или не запланировать для каждой задачи определенный интервал?

Пример:

from locust import HttpLocust, TaskSet, task

class Paint(TaskSet):

  def on_start(self):
    self.login()

  def login(self):
    data = {'username': "paint", 'password': 'bucket'}
    self.auth = self.client.post('/auth', data)

  @task(1)
  def get_red(self):
    min_wait = 8000
    max_wait = 8000
    self.client.get("/red", headers=self.auth.request.headers['Cookie'])

  @task(1)
  def get_blue(self):
    min_wait = 24000
    max_wait = 24000
    self.client.get("/blue", headers=self.auth.request.headers['Cookie'])

class PaintBucket(HttpLocust):
  task_set = Paint

1 Ответ

0 голосов
/ 26 ноября 2018

Как уже отмечалось, это не то, как разрабатывается Locust, но есть способ обойти это.Вы можете ждать в задаче, а не между задачами.Исходя из вашего примера:

from locust import HttpLocust, TaskSet, task
from random import randint


class Paint(TaskSet):

    def on_start(self):
        self.login()

    def login(self):
        data = {'username': "paint", 'password': 'bucket'}
        self.auth = self.client.post('/auth', data)

    @task(1)
    def get_red(self):
        min_wait = 8000
        max_wait = 8000
        self.client.get("/red", headers=self.auth.request.headers['Cookie'])
        self._sleep(randint(min_wait, max_wait))

    @task(1)
    def get_blue(self):
        min_wait = 24000
        max_wait = 24000
        self.client.get("/blue", headers=self.auth.request.headers['Cookie'])
        self._sleep(randint(min_wait, max_wait))


class PaintBucket(HttpLocust):
    task_set = Paint
    min_wait = 0
    max_wait = 0

Конечно, если вы всегда хотите одно и то же время ожидания, вы можете просто указать это вместо min / max / random:

from locust import HttpLocust, TaskSet, task


class Paint(TaskSet):

    def on_start(self):
        self.login()

    def login(self):
        data = {'username': "paint", 'password': 'bucket'}
        self.auth = self.client.post('/auth', data)

    @task(1)
    def get_red(self):
        wait = 8000
        self.client.get("/red", headers=self.auth.request.headers['Cookie'])
        self._sleep(wait)

    @task(1)
    def get_blue(self):
        wait = 24000
        self.client.get("/blue", headers=self.auth.request.headers['Cookie'])
        self._sleep(wait)


class PaintBucket(HttpLocust):
    task_set = Paint
    min_wait = 0
    max_wait = 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...