Как переименовать python действия саранчи? - PullRequest
0 голосов
/ 14 апреля 2020

У меня есть следующий код из документации locustio:

from locust import HttpLocust, TaskSet, between

def login(l):
    l.client.post("/login", {"username":"ellen_key", "password":"education"})

def logout(l):
    l.client.post("/logout", {"username":"ellen_key", "password":"education"})

def index(l):
    l.client.get("/")

def profile(l):
    l.client.get("/profile")

class UserBehavior(TaskSet):
    tasks = {index: 2, profile: 1}

    def on_start(self):
        login(self)

    def on_stop(self):
        logout(self)

class WebsiteUser(HttpLocust):
    task_set = UserBehavior
    wait_time = between(5.0, 9.0)

В журналах саранчи и сети саранчи (localhost: 8089) я вижу следующие задачи

- /login
- /logout
- /
- /profile

Но что, если мне нужно иметь несколько запросов в одной задаче и получить меру от полной задачи (не 1 запрос).
Я хочу видеть следующее:

- login
- logout
- index
- profile

Я хочу увидеть имена задач вместо URL запроса. В Jmeter я могу вставить несколько запросов в одно действие и получить время действия (не запрос).

Ответы [ 2 ]

1 голос
/ 14 апреля 2020

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

Что-то вроде этого должно работать:

import time

class TaskReportingTaskSet(TaskSet):
    def execute_task(self, task, *args, **kwargs):
        start = time.time()
        try:
            super().execute_task(task, *args, **kwargs)
        except:
            events.request_failure.fire(
                request_type="task",  
                name=task.__name__, 
                response_time=(time.time()-start)*1000, 
                response_length=0,
            )
            raise
        else:
            events.request_success.fire(
                request_type="task",  
                name=task.__name__, 
                response_time=(time.time()-start)*1000, 
                response_length=0,
            )

class UserBehavior(TaskReportingTaskSet):
    tasks = ...

С приведенным выше кодом время выполнения о всех задачах будет сообщено, если TaskSet наследуется от TaskReportingTaskSet. request_success события должны запускаться отдельно, если вы хотите включить on_start и on_stop.

Если вы не хотите, чтобы HTTP-запросы сообщались, вы можете просто использовать клиент HTTP, который не не один из встроенных HTTP-клиентов Locust. Например, вы можете использовать python запросы напрямую:

import requests

def index(l):
    requests.get("/")
0 голосов
/ 20 апреля 2020

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

def index(l):
  l.client.get("/", name="index")

def profile(l):
  l.client.get("/profile", name="my-profile")
...