Нужен способ передать переменные из класса User в TaskSet в Locust

Я новичок в саранче и пытаюсь написать нагрузочные тесты. Целью моих пользователей Locust будет создание элемента путем вызова API createItem. В этом сценарии item_id в каждом запросе должен быть уникальным, поскольку он имеет уникальные критерии.

Вот что я сделал.

import json
from random import randint

from locust import HttpUser, constant, SequentialTaskSet, task

from flow.helper import read_json


class WebsiteUser(HttpUser):
    """
    User class that does requests to the locust web server running on localhost
    """
    host = "http://localhost:8080/api/"
    wait_time = constant(3)

    @task
    class SequenceOfTasks(SequentialTaskSet):
        item_id = randint(100, 9999)

        @task
        def create_item(self):
            request = read_json('resources/create_item.json')
            request['item-id'] = self.item_id
            response = self.client.post('createItem', json.dumps(request),
                                        headers={'Content-Type': 'application/json'})
            assert response.status_code == 200

Первый запрос является успешным, и он успешно создает запись. Но все последующие запросы терпят неудачу, и в журналах сервера приложений я вижу, что он пытается создать элементы с тем же item_id. Есть ли способ динамически генерировать значение в классе WebsiteUser и передавать его в SequenceOfTasks?


person Karan Matalia    schedule 26.05.2020    source источник


Ответы (1)


Не точный ответ на вопрос, но я заставил этот код работать без конфликтующих идентификаторов элементов, изменив случайную логику внутри метода. Что-то вроде:-

@task
    class SequenceOfTasks(SequentialTaskSet):
        self.item_id = None
        @task
        def create_item(self):
            request = read_json('resources/create_item.json')
            self.item_id = randint(100, 9999)
            request['item-id'] = self.item_id
            ...
person Karan Matalia    schedule 26.05.2020