Я пытался интегрировать саранчу в базу данных притока, и при этом я реализовал 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
Поскольку я пытаюсь динамически подталкивать значения, я не совсем уверен, что мне следует указывать в параметрах.