Когда балансировщик нагрузки перед тестируемым веб-сайтом https выходит из строя, это генерирует некоторую ошибку HTTPError 500 на несколько секунд, затем Locust зависает:

  • График времени отклика останавливается (пустой график)
  • Общее количество запросов в секунду превращается в неправильную зеленую ровную линию. Если я просто остановлю и начну тест, перезапустите саранчу, правильно отслеживая время отклика.
  • Мы можем увидеть некоторую ошибку HTTPError 500 во вкладке Failures

Это ошибка? Как я могу убедиться, что Locust убивает и перезапускает пользователей вручную или по истечении времени ожидания?

Моя попытка регулярно "RescheduleTaskImmediately" не помогла.

Мой locustfile.py:

#!/usr/bin/env python
import time
import random
from locust import HttpUser, task, between, TaskSet
from locust.exception import InterruptTaskSet, RescheduleTaskImmediately

URL_LIST = [
"/url1",
"/url2",
"/url3",
]

class QuickstartTask(HttpUser):
    wait_time = between(0.1, 0.5)
    connection_timeout = 15.0
    network_timeout = 20.0

    def on_start(self):
        # Required to use the http_proxy & https_proxy
        self.client.trust_env = True
        print("New user started")
        self.client.timeout = 5
        self.client.get("/")
        self.client.get("/favicon.ico")
        self.getcount = 0

    def on_stop(self):
        print("User stopped")

    @task
    def track_and_trace(self):
        url = URL_LIST[random.randrange(0,len(URL_LIST))]
        self.client.get(url, name=url[:50])
        self.getcount += 1
        if self.getcount > 50 and (random.randrange(0,1000) > 990 or self.getcount > 200):
            print(f'Reschedule after {self.getcount} requests.')
            self.client.cookies.clear()
            self.getcount = 0
            raise RescheduleTaskImmediately
0
Pivert 22 Сен 2021 в 17:00

2 ответа

Лучший ответ

Каждая саранча бежит своей нитью. Если поток блокируется, он не предпринимает дальнейших действий.

self.client.get(url, name=url[:50], timeout=.1)

Что-то вроде этого, вероятно, то, что вам нужно, возможно, с попыткой / за исключением того, чтобы сделать что-то другое, когда вы получите исключение тайм-аута http.

0
Paul Becotte 22 Сен 2021 в 14:14

По моему опыту, проблема, которую вы описываете с помощью диаграмм в пользовательском интерфейсе Locust, не имеет ничего общего с ошибками, с которыми сталкиваются ваши пользователи Locust. Я видел такое поведение, если несколько человек одновременно пытались получить доступ к пользовательскому интерфейсу Locust. Locust использует Flask для создания и обслуживания пользовательского интерфейса. Сам по себе Flask (как его использует Locust) плохо справляется с несколькими подключениями.

Если человек A начнет использовать пользовательский интерфейс Locust и запустит тест, он увидит статистику и все будет работать нормально, пока человек B не загрузит пользовательский интерфейс Locust. Затем человек B увидит, что все работает нормально, но человек A столкнется с проблемами, как вы описываете, с кажущимся зависанием теста и неправильным обновлением диаграмм. В этом состоянии иногда запуск нового теста может временно решить эту проблему, в других случаях вам нужно обновить. В любом случае, A и B будут бороться друг с другом за рабочий интерфейс.

Решением в этом случае было бы разместить Locust за обратным прокси-сервером, используя что-то вроде Nginx. Затем Nginx поддерживает одно соединение с Locust, и все пользователи подключаются через Nginx. После этого пользовательский интерфейс Locust должен продолжать работать для всех подключенных пользователей с правильным обновлением статистики и диаграмм.

0
Solowalker 22 Сен 2021 в 15:48