Где я могу найти бревна саранчи?

Я использую Locust для стресс-тестирования нашего приложения.

Я получаю ошибки, потому что вызов POST кажется неправильным. Где я могу посмотреть журналы саранчи? Я хотел бы посмотреть, как выглядит пост-вызов, чтобы понять, что не так.

Вот мой код на случай, если кто-то скажет мне, что я делаю не так:

from locust import HttpLocust, TaskSet, task

json3 = """{"stack_name": "beenz-php-app-12", "disable_rollback": true, "template": "php", "timeout_mins": 60}"""

class MyTaskSet(TaskSet):
    @task
    def send(self):
             response = self.client.post("/stacks", json3, headers={'X-Auth-Key': 'xxxx', 'Content-Type': 'application/json', 'X-Auth-User': 'xxxx', 'Accept': 'application/json', 'X-Auth-Token':'xxxx'})
            print "Response status code:", response.status_code
            print "Response content:", response.content

class MyLocust(HttpLocust):
    task_set = MyTaskSet
    min_wait = 5000
    max_wait = 15000

Спасибо!


person Beenz    schedule 25.09.2014    source источник
comment
Я вижу эту ошибку в Locust: HTTPError ('500 Server Error: Server Error',)   -  person Beenz    schedule 26.09.2014


Ответы (5)


Добавив параметр --logfile=locustfile.log при запуске locust, ваши print сообщения будут перенаправлены в файл с именем locustfile.log, который, я думаю, является журналом, который вы упомянули в своем вопросе.

Предположим, ваше имя файла саранчи - locustfile.py. И вы запускаете саранчу на своей локальной машине. Вы можете запустить саранчу к locust --host=http://127.0.0.1 --logfile=locustfile.log. Тогда вы сможете запустить тест на саранчу на http://127.0.0.1:8089/.

person Brian    schedule 09.08.2016

Вариант --logfile, упомянутый другими, вероятно, самый простой путь. Обратите внимание, что вы, вероятно, захотите регистрировать свои сообщения, а не печатать их. Я думаю, locust настраивает специальный регистратор stdout, чтобы print сообщения отправлялись в консоль, но не в файл журнала.

Альтернативой --logfile является использование системы журналов Python для добавления собственного файлового приложения. Это хороший вариант, если вам нужен сменный файл-аппендер или формат журнала, который вы предпочитаете формату, который настраивает locust.

Вот пример того, как мы настраиваем и используем ведение журнала в нашем тесте на саранчу. Обратите внимание, как каждый экземпляр набора задач регистрируется в собственном журнале. Это позволяет легко отфильтровать файл журнала по одной саранче. Также обратите внимание, что мы регистрируем все ошибки HTTP как предупреждения.

from locust import HttpLocust, TaskSet, task
import itertools
import logging
import socket
from logging.handlers import RotatingFileHandler

def append_file_logger():
    root_logger = logging.getLogger()
    log_format = "%(asctime)s.%(msecs)03d000 [%(levelname)s] {0}/%(name)s : %(message)s".format(socket.gethostname())
    formatter = logging.Formatter(log_format, '%Y-%m-%d %H:%M:%S')
    file_handler = RotatingFileHandler('./locust.log', maxBytes=5 * 1024 * 1024, backupCount=3)
    file_handler.setFormatter(formatter)
    file_handler.setLevel(logging.INFO)
    root_logger.addHandler(file_handler)    

append_file_logger()

counter = itertools.count()

class FooTaskSet(TaskSet):
    def on_start(self):
        self.logger = logging.getLogger('locust-%03d' % counter.next())
        self.logger.info('Hatching locust')

    @task
    def send(self):
        response = self.client.post(...)
        if not response.ok:
            self.logger.warn('Error sending post') # TODO add status code, url, and reponse to the log 

Последнее предложение: если у вас несколько задач, настройте их так, чтобы все ошибки http регистрировались в одном формате. Упрощает извлечение данных из журнала.

person bigh_29    schedule 17.11.2017

У вас есть синтаксическая ошибка в строке, начинающейся с response = self.client.post(.... Последняя строка никогда не закрывается: 'X-Auth-Token':'xxxx}.

Измените его на 'X-Auth-Token':'xxxx'}, и сценарий должен работать нормально.

При запуске Locust с опубликованным вами скриптом (с синтаксической ошибкой) вы сразу получите исключение и трассировку стека.

person heyman    schedule 26.09.2014
comment
Когда я заменил фактический токен на x, я думаю, что случайно вынул заключительную цитату. В моем сценарии это есть. я вижу ошибки 500. Мне было интересно, где находятся журналы Locust, чтобы я мог взглянуть и увидеть, как выглядит сообщение. Когда я использую Postman с тем же URL-адресом, телом и заголовками - он работает нормально. - person Beenz; 26.09.2014
comment
Понятно. Я не уверен, о каком журнале вы имеете в виду. Одним из способов отладки проблемы может быть выполнение запроса с помощью почтальона и Locust на requestb.in, а затем посмотреть, что отличается. - person heyman; 26.09.2014

Если это было неочевидно, по умолчанию нет. https://github.com/locustio/locust/blob/master/locust/main.py

строка 167

# log file
parser.add_option(
    '--logfile',
    action='store',
    type='str',
    dest='logfile',
    default=None,
    help="Path to log file. If not set, log will go to stdout/stderr",
)

Просто передайте предпочтительное место в случае, если он запущен как фоновый процесс, как упоминалось в lyen.

person Priyeshj    schedule 17.10.2016

Добавьте следующий фрагмент кода в свой файл саранчи:

import logging
log = logging.getLogger()
log.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
fh = logging.FileHandler('locust.log')
fh.setLevel(logging.DEBUG)

Теперь вы можете сохранить регистраторы или оператор печати, которые они будут заполнять в вашем файле "locust.log".
Это должно творить чудеса за вас.

person Ashutosh Sharma    schedule 18.07.2019