TypeError: Individual_success_handle () отсутствует 4 обязательных позиционных аргумента: 'request_type', 'name', 'response_time' и 'response_length'

Я пытался интегрировать саранчу в базу данных притока, и при этом я реализовал EventHook, столкнувшись с ошибкой TypeError: Individual_success_handle (), отсутствующими 4 обязательных позиционных аргумента: 'request_type', 'name', 'response_time' и 'response_length' после запуска my locustfile.py Код прилагается ниже:

from locust import HttpUser, task, TaskSet, events
import json
import datetime
import pytz
from influxdb import InfluxDBClient
import socket

hostname = socket.gethostname()
client = InfluxDBClient(host="localhost", port="8086")
client.switch_database('DemoDB')


def individual_success_handle(request_type, name, response_time, response_length, **kwargs):
    SUCCESS_TEMPLATE = '[{"measurement": "%s","tags": {"hostname":"%s","requestName": "%s","requestType": "%s",' \
                       '"status":"%s"' \
                       '},"time":"%s","fields": {"responseTime": "%s","responseLength":"%s"}' \
                       '}]'
    json_string = SUCCESS_TEMPLATE % (
        "ResponseTable", hostname, name, request_type, "success", datetime.datetime.now(tz=pytz.UTC), response_time,
        response_length)
    client.write_points(json.loads(json_string), time_precision='ms')


def individual_fail_handle(request_type, name, response_time, response_length, exception, **kwargs):
    FAIL_TEMPLATE = '[{"measurement": "%s","tags": {"hostname":"%s","requestName": "%s","requestType": "%s",' \
                    '"exception":"%s","status":"%s"' \
                    '},"time":"%s","fields": {"responseTime": "%s","responseLength":"%s"}' \
                    '}]'
    json_string = FAIL_TEMPLATE % (
        "ResponseTable", hostname, name, request_type, exception, "fail", datetime.datetime.now(tz=pytz.UTC),
        response_time, response_length)
    client.write_points(json.loads(json_string), time_precision='ms')


# my_event.add_listener(individual_success_handle);
# my_event.add_listener(individual_fail_handle);
events.request_success += individual_success_handle()
events.request_failure += individual_fail_handle()


class UserBehavior(TaskSet):
    # def on_start(self):
    """ on_start is called when a Locust start before
            any task is scheduled
        """

    @task(1)
    def profile(self):
        self.client.get("/help")

    @task(2)
    def profile(self):
        self.client.get("/pilot")


class WebsiteUser(HttpUser):
    tasks = [UserBehavior]
    min_wait = 5000
    max_wait = 9000

Поскольку я пытаюсь динамически подталкивать значения, я не совсем уверен, что мне следует указывать в параметрах.


person Sayen    schedule 26.06.2020    source источник


Ответы (1)


Удалите здесь круглые скобки:

events.request_success += individual_success_handle()
events.request_failure += individual_fail_handle()

В конечном итоге вы вызываете метод сразу (что дает сбой, потому что вы не предоставляете никаких параметров, и даже если бы он работал, вы бы добавили его возвращаемое значение в ловушку успеха / сбоя вместо сам метод)

Вы должны иметь возможность просто скопировать пасту из

https://github.com/SvenskaSpel/locust-plugins/blob/master/locust_plugins/listeners.py

Просто измените так, чтобы писать в Influx вместо Postgres.

Вы захотите буферизовать свои события и отправлять их партиями, поскольку Influx (и даже ваш генератор нагрузки) может быть недоволен тысячами запросов / с. Это также реализовано в плагинах locust.

person Cyberwiz    schedule 26.06.2020
comment
Спасибо за ответ. Я внес некоторые изменения в приведенный выше код, и теперь у меня возникла ошибка /ERROR/locust.main: Класс пользователя не найден! изменили круглые скобки на events.request_success.add_listener (индивидуальный_процессор_доступа) events.request_failure.add_listener (индивидуальный_fail_handle) - person Sayen; 26.06.2020
comment
Хм. странный. ты на последней саранче (1.0.3)? Попробуйте переместить @task: s в WebsiteUser (эта возможность была добавлена ​​в 1.0) - person Cyberwiz; 26.06.2020
comment
да, я использую locust 1.0.3, пытался переместить задачи под WebsiteUser, но все еще сталкиваюсь с той же проблемой. - person Sayen; 26.06.2020
comment
Я бы посоветовал все закомментировать, пока не заработает, а потом начинать раскомментировать :) - person Cyberwiz; 26.06.2020
comment
Я решил проблему, я пытался импортировать саранчу из другого пакета, пока она находилась только в той же папке. Глупая ошибка !! В любом случае спасибо за помощь. @Cyberwiz - person Sayen; 26.06.2020