Разделение набора тестов на серию задач Locust.IO

У меня есть серия дымовых тестов, которые моя компания использует для проверки своего веб-приложения. Эти тесты написаны на Ruby. Мы хотим разделить эти тесты на серию задач в locust.io. Я новичок в Locust.IO. Я написал код на Python, который может последовательно запускать эти задачи одну за другой. Однако, когда они ставят задачи locust.io, в окне статистики ничего не отображается. Я вижу, что тесты выполняются в консоли, но статистика никогда не обновляется. Что мне нужно сделать? Вот фрагмент файла Locustfile.py, который я сгенерировал.

def RunTask(name, task):
  code, logs = RunSmokeTestTask(name, task)
  info("Smoke Test Task {0}.{1} returned errorcode {2}".format(name, task, code))
  info("Smoke Test Task Log Follows ...")
  info(logs)

class SmokeTasks(TaskSet):

  @task
  def ssoTests_test_access_sso(self):
    RunTask("ssoTests.rb", "test_access_sso")

  . . .

RunSmokeTestTask - это то, что на самом деле запускает задачу. Это тот же код, который я использую, когда вызываю задачу вне Locust.IO. Я вижу информацию в файле журнала. Некоторые из них выходят из строя, но статистика не обновляется. Я знаю, что, наверное, упустил что-то глупое.


person Cyberclops    schedule 08.03.2021    source источник
comment
Не могли бы вы рассказать, как вы совершаете HTTP-звонки? Похоже, возможно, вы не используете http-клиент Locust, который автоматически сообщал бы о результатах вызовов Locust. Когда вы не используете клиент Locust, вам нужно запускать события успеха / неудачи вручную.   -  person Solowalker    schedule 08.03.2021


Ответы (1)


Вам нужно фактически сообщать о событиях. (править: теперь я понимаю, что, возможно, вы надеялись, что locust / python сможет обнаруживать запросы, сделанные из Ruby, но это невозможно. Если вы в порядке, просто сообщите весь тест как один запрос, продолжайте читать )

Добавьте в свой набор задач что-то вроде этого:

self.user.events.request_success.fire(request_type="runtask", name=name, response_time=total_time, response_length=0)

Вам также нужно будет измерить время, которое потребовалось. Вот более полный пример (но тоже немного сложный):

https://docs.locust.io/en/stable/testing-other-systems.html#sample-xml-rpc-user-client

Примечание: TaskSets - это расширенная (бесполезная, imho) функция, вы, вероятно, захотите поместить @task непосредственно под пользователем, а также метод RunTask.

что-то вроде:

class SmokeUser(User):
  def RunTask(self, name, task):
    start_time = time.time()
    code, logs = RunSmokeTestTask(name, task)
    total_time = time.time() - start_time
    self.events.request_success.fire(request_type="runtask", name=name, response_time=total_time, response_length=0)
    info("Smoke Test Task {0}.{1} returned errorcode {2}".format(name, task, code))
    info("Smoke Test Task Log Follows ...")
    info(logs)

  @task
  def ssoTests_test_access_sso(self):
    self.RunTask("ssoTests.rb", "test_access_sso")
person Cyberwiz    schedule 09.03.2021