Рубрики
Uncategorized

Моделируйте реальное поведение пользователей в тестах на загрузку Apache Jmeter.

Реалистичный тест на нагрузку помогает вам адекватно подготовить ваше приложение и инфраструктуру для всплеска … Tagged с DevOps, Jmeter, Tulciory, AWS.

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

В Предыдущий пост , мы создали базовый план испытаний JMeter для API 3-endpoint, написанный в Flask and Python Анкет Это хорошее начало. Но чтобы создать план тестирования, который очень напоминает реальное поведение пользователей, мы должны добавить больше элементов в наш план тестирования.

Если вы хотите продолжить, не пройдя предыдущий пост, вы можете забрать прямо там, где мы остановились от предыдущего сообщения в блоге, загрузив это План испытания jmeter . Кроме того, вам придется настроить Применение колбы , поэтому у вас будет то же приложение, с которым мы испытали нагрузку. Инструкции по настройке встречаются в файле readme.me этого репозитория.

[1] Добавьте время мышления с «единообразным случайным таймером»

Когда пользователи просматривают ваш сайт, они сначала осматривают страницу на несколько секунд, прежде чем перейти на следующую страницу. Они нажимают на страницу «Просмотр продукта», требуют как минимум несколько секунд, чтобы посмотреть на продукт, а затем добавлять его в корзину. Чтобы имитировать это время мышления, мы добавляем равномерный случайный таймер к нашим нагрузочным тестам:

После создания давайте настроим минимальную задержку 2 секунды и максимальную задержку 7 секунд. Jmeter выбирает случайное значение между 2 с 7 с задержкой. Вы можете настроить это значение, чтобы лучше отражать то, как пользователи фактически используют ваш сайт.

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

[2] варьируйте ввод пользователя с «вводом данных CSV»

Пользователи вводят разные учетные данные, когда они просматривают ваш сайт. Они также покупают разные продукты. Это создает нагрузку на вашу систему, потому что ответ труднее кэшировать.

Если у нас есть план тестирования с 20 виртуальными пользователями (VUS), которые входят в систему, используя ту же электронную почту и пароль и покупая один и тот же продукт, наши результаты теста на производительность становятся слишком оптимистичными. Наша база данных или кэш, возможно, уже оптимизировали, чтобы продолжать возвращать те же результаты.

Чтобы исправить это, мы вводим элемент «ввод данных CSV» в наш план тестирования. Во -первых, давайте определим файл CSV, из которого мы получим значения. Сохраните этот файл CSV с именем файла «sample_data.csv». Поместите его в тот же каталог, что и мы сохранили тест на загрузку JMeter, с которым мы работаем.

first_name,last_name,email,password
raphael,jambalos,raphael.jambalos@gmail.com,jambyiscool
test,jambalos,test.driver@gmail.com,driveiscool
ultra,jambalos,ultra.player@gmail.com,ultraplayeriscool
super,jambalos,super.user@gmail.com,superuseriscool
code,jambalos,code.maestro@gmail.com,codemaestroiscool

Затем давайте используем этот файл CSV в тесте нагрузки, создав элемент «Конфигурация набора данных CSV».

В части имени файла найдите только что созданный файл CSV. Вы можете напечатать Sample_data.csv Если вы следовали моей предыдущей инструкции о простом размещении файла CSV в тот же каталог, что и план испытаний JMeter. Если файл хранится в другом месте, нажмите «Обзор», чтобы найти файл.

Для каждого виртуального пользователя конфигурация набора данных CSV получает одну строку из CSV и загружает ее как значения на имена переменных, которые вы указали в элементе. Например, Vu#1 будет иметь строку «Ultra, Jambalos, ultra.player@gmail.com, ultraplayeriscool», и имена переменных, доступные для этого пользователя, будут:

  • Имя: ультра
  • фамилия: Джамбалос
  • Электронная почта: ultra.player@gmail.com
  • Пароль: UltrapLayeriscool

Vu#2 будет иметь другую строку и, следовательно, будет иметь другой набор значений для четырех переменных, указанных выше. Чтобы иметь разные значения для каждого VU, нам необходимо просмотреть 2 конечных точка, которые мы создали в предыдущем посте, и заменить некоторые поля значения на имена переменных вместо твердых кодированных данных.

Для маршрута входа замените значение ключей электронной почты и пароля на эти значения: «$ {email}» и «$ {пароль}».

Для создания карт лояльности маршрута сделайте то же самое для имени и фамилии:

Теперь, запустив тест загрузки, мы видим разные значения, используемые для электронной почты, пароля, First_name и фамилия

[3] Добавить условия для действий шлюза

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

Решение этой проблемы состоит в том, чтобы убедиться, что каждый VU пробует только 10 конечных точек Если логин преуспел Анкет Для этого мы создаем контроллер IF:

Теперь перетащите контроллер IF прямо под конечной точкой входа и убедитесь, что «перетаскивать» окончательную точку «/лояльность». Это гарантирует, что конечная точка выполнится только в том случае, если логин был успешным. Обязательно установите условие IF Config Element на: $ {Jmeterthread.last_sample_ok}

[4] создайте тестовую среду, аналогичную производству

До этого момента наш тест нагрузки настроен, чтобы позволить нам быстро проверить, чтобы мы могли получить отзыв о том, что улучшить. Вот почему наш тест нагрузки работает только в течение 30 секунд и имеет только 10 VUS. В этом томе мы уверены, что даже если вы размещаете свое приложение локально, нагрузка будет адекватно обработана.

Но нагрузочные тесты не имеют большого значения, если мы тестируем при низких объемах. В конце концов, нагрузочные тесты отвечают на вопрос: «Сколько пользователей, выполняющих запросы одновременно, может справиться с моим веб -сайтом?». Чтобы получить нагрузочный тест, который действительно повышает ценность нашей команде, нам нужно проверить в более высоких объемах (подумайте о 100-500 VU или более). И чтобы проверить в более высоких объемах, нам нужно настроить тестовую среду, которая может приспособить эту нагрузку.

При настройке тестовой среды мы должны сделать ее похожим на нашу производственную установку:

  • База данных и серверы приложений имеют одинаковый размер и подсчет.
  • Приложение и веб -серверы имеют такую же конфигурацию, что и настройка производства
  • Данные в базе данных примерно такого же размера, как и в производстве.

Для некоторых команд репликация базы данных и серверного флота (то есть 10 экземпляров R5. Large EC2 и 1 24.xlarge Batabase) не будет возможно. Для этого мы обычно делаем масштабированную версию приложения (т. Е. Подумайте 2 R5.Large EC2 экземпляр и базу данных 4xlarge). Затем мы умножаем мощность на коэффициент масштабирования, чтобы получить предполагаемую мощность производства.

Для нашего примера коэффициент масштабирования составляет 5. Наша тестовая среда составляет 1/5 больше нашей настройки производства. Если наша тестовая среда может вместить 500 пользователей, мы предполагаем, что настройка производства может вместить 2500 пользователей.

[5] Отключить слушателей во время тестов на загрузку с большим объемом

До сих пор у нас были слушатели «Tree Tree Tree Tree» и «Sutry Report», чтобы помочь нам построить и улучшить наш тест нагрузку. Но при тестировании на высоких объемах эти 2 слушателя высасывают много ресурсов (особенно памяти), которые мы могли бы использовать для операции нагрузки.

Когда вы будете готовы к испытанию большого объема, отключите двух слушателей. Как только вы это сделаете, он должен быть с серым в графическом интерфейсе:

[6] Запустите JMeter в режиме CLI

При тестировании нагрузки мы обычно изменяем параметры теста нагрузки. Я обычно начинаю с 100 вю. Если приложение может справиться с этим, я подталкиваю его до 200 VU, то 300 VU и т. Д.

В текущем состоянии нашего теста нагрузки, если мы используем CLI, нам пришлось бы изменить план тестирования локально с помощью графического интерфейса, а затем повторно загрузите его, чтобы добраться от 100 в 200 дюйма. Там должен быть лучший способ!

Для этого мы вводим параметры CLI. Нажмите на группу потоков и замените значения полей на следующие значения вида ниже. Обратите внимание, что 1 -й параметр устанавливает имя переменной, а второй параметр устанавливает значение этой переменной, если в команде CLI его нет.

  • Количество потоков: $ {__ P (пользователи, 10)}
  • Период наращивания: $ {__ P (Rumpupperiod, 10)}
  • Продолжительность: $ {__ P (продолжительность, 30)}

Ваша группа ветков должна выглядеть так:

Мы также изменяем наш набор данных CSV, чтобы параметризовать имя файла CSV с помощью $ {__ P (csvfilename, 'sample_test_data.csv)} Анкет

Теперь пришло время запустить наш тест на загрузку через CLI. Обратите внимание, что мы намеренно не включили CSVFILENAME параметр и вместо этого полагался на его значение по умолчанию.

jmeter -n -t jmeter_test_plan.jmx \
       -l "$(date +'%Y%m%d%H%M%S').csv" \
       -Jusers=50 \
       -JrampupPeriod=60 \
       -Jduration=360 \
       -e -o "$(date +'%Y%m%d%H%M%S')_folder"

Мы указали тест на нагрузку с использованием 50 виртуальных пользователей (VUS), продолжительность 6 минут (360S) и период наращивания на 1 минуту. Это определенно более высокий объем, чем наше нагрузочное тестирование на 10 В/30S, которое мы сделали ранее. Мы также указали файл плана испытаний JMeter, над которым мы работали. Мы также указали пути, где сохранить выходной файл CSV и отчет HTML (вы увидите оба этого позже).

После того, как вы запустите тест, ваш CLI должен выглядеть так.

После теста обратите внимание, что Jmeter создал папку и файл CSV в каталоге, который мы указали в команде. CSV содержит отчет о каждом HTTP -запросе, сделанном в нашей тестовой среде.

Папка содержит отчет HTML с графиками и таблицами, показывающим, как прошел тест. Откройте файл index.html Чтобы увидеть этот отчет:

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

Что дальше?

Теперь у нас есть реалистичный план тестирования нагрузки, который можно настроить для запуска сотен виртуальных пользователей. До сих пор мы запустили план испытаний на нашей локальной машине. Но у нашей местной машины есть предел. Он начинает сбой, как только мы проведем тест на нагрузку с 1000 VUS или более.

В следующем посте мы подробно описываем варианты, как запускать нагрузочные тесты, чтобы приспособить большое количество виртуальных пользователей.

Особая спасибо Аллену за то, что мои посты были более последовательными.

Авторитетная книга Родригеса, Муавад и Миламбер под названием « Master Apache Jmeter От нагрузочного тестирования до DevOps Действительно помог мне понять Jmeter в большей ясности. Я настоятельно рекомендую вам купить эту книгу, если вы хотите узнать больше о JMeter.

Фотография Sigmund на Неспособный

Оригинал: «https://dev.to/raphael_jambalos/simulate-real-user-behavior-in-apache-jmeter-load-tests-58bl»