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