Ошибки со скриптами нагрузочного тестирования Locust - Соединение прервано. ', RemoteDisconnected - PullRequest
0 голосов
/ 20 февраля 2020

Я новичок в среде тестирования Locust Load и в процессе переноса моих существующих Azure сценариев тестирования производительности на основе облака C# в сценарии Locust Python. Наша команда почти завершила миграцию скриптов. Но во время наших нагрузочных тестов мы получаем ошибки, как показано ниже: не удается создать новые запросы с компьютера из-за высокой загрузки ЦП или из-за большого количества исключений в Locust. Мы работаем в веб-режиме Locust - подробности указаны ниже. Эти скрипты работают нормально при небольших нагрузках от 50 до 100 пользователей

" Ошибка 1 - ('Соединение прервано.', RemoteDisconnected ('Соединение с удаленным концом закрыто без ответа',) )"

" Ошибка 2: Пул подключений переполнен, отмена подключения "

"** ** Ошибка 3: urllib3.exceptions.NewConnectionError:: Не удалось установить sh новое соединение: [Errno 110] Тайм-аут соединения **** "

Да, мы используем UrlLibs для служебных классов. Но первая ошибка 2, похоже, относится к Locust.

Наши конфигурации нагрузочного тестирования: « 3500 пользователей при скорости вывода 5 пользователей в секунду ». Нормальный запуск (без контейнера docker) на 8-ядерном виртуальном компьютере Ubuntu 16 ГБ Linux на Azure. ulimit установлен на 50 000 * на машине Linux.

Пожалуйста, помогите нам с вашими мыслями

Пример теста, как показано ниже

import os 
import sys
sys.path.append(os.environ.get('WORKDIR', os.getcwd()))

from locust import HttpLocust, TaskSet, task
from locust.wait_time import between

class ContactUsBehavior(TaskSet):


    wait_time = AppUtil.get_wait_time_function(2)


    @task(1)
    def post_load_test_contact(self):
        data = { "ContactName" : "Mane"
            , "Email" : "someone@someone.com"
            , "EmailVerifaction" : "someone@someone.com"
            , "TelephoneContact" : ""
            , "PhoneNumber" : ""
            , "ContactReason" : "Other"            
            , "OtherComment" : "TEST Comments 2019-12-30"
            , "Agree" : "true"
             }
        self.client.post("app/contactform", self.client, 'Contact us submission', post_data = data)


class UnauthenticatedUser(HttpLocust):
    task_set = ContactUsBehavior
    # host is override-able
    host = 'https://app.devurl.com/'

1 Ответ

1 голос
/ 20 февраля 2020

HTTP-клиент Locust по умолчанию использует python -запросы, которые внутренне используют urllib3. Если вы работаете с крупномасштабными тестами, вы должны рассмотреть другой HTTP-клиент. Пул соединений urllib 3 (PoolManager) будет повторно использовать соединения и ограничивать количество соединений, разрешенных для каждого хоста в любой момент времени, чтобы избежать накопления слишком большого количества неиспользуемых сокетов. Таким образом, у вас есть возможность настроить пул: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#customizing -pool-поведения

Или вы можете попробовать любой другой высокопроизводительный HTTP-клиент. Например: gevenhttp Locust также предоставляет встроенный int-клиент, который работает быстрее, чем python -запросы по умолчанию: https://docs.locust.io/en/stable/increase-performance.html

Вам следует подумать о запуске Locust в режиме кластера в разных узлах, если клиент по-прежнему не может справиться с большой нагрузкой.

...