Саранча: Статистика времени отклика недоступна на терминале в режиме без Интернета - PullRequest
0 голосов
/ 23 апреля 2020

Я запускаю тест на саранчу в режиме без паутины, ведущий-ведомый. Я использую 0mq для синхронизации c входных данных между ведущим и подчиненным, а поток явно создается на главной машине. Когда тест выполняется, я не вижу статистику времени отклика на терминале, и похоже, что поток 0mq блокирует его. Прокомментировав код 0mq, я смог посмотреть статистику. Кроме того, аргумент "-t" не работает, когда создается поток 0mq. Тест продолжается и продолжается вечно. Кроме того, когда я запускаю ту же конфигурацию в режиме пользовательского интерфейса, я не вижу живой статистики в пользовательском интерфейсе саранчи, и я также не могу остановить тест с помощью кнопки остановки. Я должен go к терминалу и нажать Ctr + C, чтобы завершить тест.

В потоке 0mq, он имеет условие while, которое всегда TRUE, так что поток не завершается во время тест, чтобы избежать проблемы передачи данных между ведущим и ведомым.

Может кто-нибудь помочь здесь, чтобы исправить проблему. Версия для саранчи: 0.12.2.

Ниже приведен код, который встречается в вышеупомянутой проблеме. Сбой запроса API, который может быть проигнорирован для вышеуказанной проблемы.

Примечание: я не могу добавить условие завершения для while l oop в методе "init_feeder".

Команды: Основная команда: locust -f scratch.py ​​--no-web - c 1 -r 1 -t 120 с --master --host = http://localhost: 8000 Подчиненная команда: locust -f scratch.py ​​--no-web - c 1 -r 1 --slave --master-host = localhost

# Script Start
from locust import runners
from locust.events import gevent
import zmq
from locust import HttpLocust, TaskSet, task, events
from locust.runners import SlaveLocustRunner


class UserBehavior(TaskSet):
    """ Defines user behaviour in traffic simulation """

    @task()
    def index(self):
        if isinstance(runners.locust_runner, SlaveLocustRunner):
            zmqpoller()
        self.client.get("/")


class WebsiteUser(HttpLocust):
    """ Defines user that will be used in traffic simulation """
    task_set = UserBehavior
    min_wait = 3000
    max_wait = 5000


def zmqpoller():
    context = zmq.Context()
    socket = context.socket(zmq.REQ)
    socket.connect("tcp://127.0.0.1:5555")
    socket.send_string("Hello")

    #  Get the reply.
    message = socket.recv_string()
    print("Hello "+message)

def init_feeder():
    context = zmq.Context()
    socket = context.socket(zmq.REP)
    socket.bind("tcp://*:5555")
    while True:
        # here in actual test we are sending data from our csv. But the behaviour remains the same.
        hello = socket.recv_string()
        print("Received request: %s" % hello)

        #  Send reply back to client
        socket.send_string("World")
        print("In GEvent Thread")

def on_master_start_hatching():
    print("on_master_start_hatching")
    print(str(runners.locust_runner))
    # start sending the messages (in a separate greenlet, so it doesn't block)
    gevent.spawn(init_feeder)

events.master_start_hatching += on_master_start_hatching

# Script End
...