Тест нагрузки на ваш сайт с Apache Jmeter (3-х частей серии)
В этом посте мы будем грязными руками с Apache Jmeter. Если вы не знакомы с концепциями тестирования нагрузки, я предлагаю вам проверить мой предыдущий пост блогов, объясняя концепции тестов нагрузки.
[0] Установка и настройка
Шаг 0.1.
Чтобы установить JMeter, вам нужно установить Последние среды Runtime Java (JRE) . Тогда вы можете установить JMeter из здесь Отказ
Откройте jmeter, набрав jmeter на вашем CLI или нажав логотип JMeter.
Шаг 0.2
Для загрузки теста нам нужно приложение для загрузки теста. Для этого я подготовил Простое приложение лояльности, написанное в Python/Flask С 3 конечными точками: войти в систему, создайте карточку лояльности и получите подробную информацию о карте. Теперь давайте клонировать репо и устанавливать зависимости:
# clone the app git clone git@github.com:jamby1100/simple-loyalty-flask-app.git # install dependencies cd simple-loyalty-flask-app python3 -m venv venv source venv/bin/activate pip install -r requirements.txt
Приложение сохраняет карту к базе данных dynamodb. Вам нужно будет Создайте базу данных Dynamodb В вашей учетной записи AWS с разбиением ключа «Card_Number». Вы также можете использовать автономную версию Dynamodb здесь . Если вы немного неудобны, используя DynamOdb, вы можете изменить репозиторий кода, чтобы просто вернуть жесткодируемый ответ.
В приведенном ниже фрагменте давайте запустим веб-приложение Flask Web Application, поэтому он может быть готов принять запросы:
# run the server export FLASK_CONFIG=development export FLASK_APP=main.py export FLASK_DEBUG=1 export SPECIALMESSAGE="This is a special message from the ship" export DYNAMODB_TABLE_NAME="loyalty_cards" export DYNAMODB_REGION_NAME="ap-southeast-1" flask run
Давайте получим нагрузочное тестирование!
Переведите на экран Jmeter и давайте добавим компоненты нашего плана теста JMeter.
[1] План тестирования и нити группы
Как только у вас jmeter открывается, вы увидите пустую консоль Jmeter. В левой части вы увидите компоненты вашего плана теста JMeter. Следуйте инструкциям на скриншоте, чтобы создать свою первую группу поток:
Группы ниток определяют, как работает план теста. Каждая группа потоков состоит из последовательности поведения пользователей, которые вы пытаетесь имитировать. Например, покупка продукта может быть состоит из (1), переходя на главную страницу, (2) нажав на страницу продукта и (3) заголовок к оформлению заказа. Вы можете запустить несколько групп потоков в одном плане теста (I.E., имитируя покупку продукта и создания обзора одновременно), но мы не советуем этого людям, которые только начинаются в JMeter.
На уровне группового потока мы также должны определить конфигурации о том, как должен работать тест нагрузки.
- Количество потоков (пользователей): указывает, сколько «виртуальных пользователей» или VUS мы моделируем (то есть 500 пользователей, просматривая сайт одновременно)
- Шаг 1.1.1 : Установите на 10.
- Период наращивания (секунды): указывает, сколько секунд нам нужно будет получить от нулевого VUS для виртуальных пользователей, установленных в варианте выше.
- Шаг 1.1.2 : Установить на 1 секунду
Один пользователь на каждой итерации: если вы используете файлы cookie, чтобы сохранить токен авторизации, полученный от входа в систему, то тикает, это позволяет вашему следующим итерациям продолжать использовать это cookie. Больше информации здесь
- Шаг 1.1.3 : Отметьте этот флажок
Типы тестов нагрузки
Следующие элементы конфигурации в группе потоков определяют, какой тип теста нагрузки мы создаем.
- На основе времени: внутри каждой группы ниток мы определяем серию HTTP-запросов, которые моделируют активность пользователя. Представьте, что эти шаги, совершенные снова и снова на 20 минут на 20 минут.
- Как: галочка «Бесконечная» и флажки «Укажите текущий срок службы». Затем установите поле (секунды), чтобы определить, как долго вы хотите, чтобы тестирование произошло
- LOOP на основе: на пользователя, мы определяем, сколько раз они сделают серию шагов, указанных в группе потоков. Если у нас есть счетчик петли 10 и 20 VUS, наши 20 пользователей повторяют последовательность шагов в 10 раз каждый, что приводит к 200 итерациям.
- Как: Расстояние «Бесконечный» и укажите количество петли
Шаг 1.1.4 Отметьте «бесконечный», «одинаковый пользователь на каждой итерации», а «Укажите текущие пожизненные» флажки. Давайте установим поле длительности до 30 для тестирования нагрузки на 30 секунд.
Настройки, которые мы выбрали для этого теста нагрузки, имитирует 10 пользователей, которые повторно выполняют каждый шаг, позже уточним. Они будут продолжать делать так без контейнера, пока не истекает 30-секундное срок службы потока.
Это не настройка, которую мы выберем при реальном тестировании нагрузки. Мы выбрали эти настройки сейчас, потому что они быстро возвращают обратную связь — таким образом, позволяя нам построить наш тест нагрузки. Следующий пост блогов в серии будет охватывать нашу нагрузку на тест на нагрузку «Готов к производству».
[2] HTTP-запрос по умолчанию и руководитель заголовка HTTP
На этом этапе давайте создадим HTTP-запрос по умолчанию, и элемент конфигурации HTTP-запроса и HTTP-диспетчера HTTP, щелкнув правой кнопкой мыши группу потоков, мы создали на шаге 1.1. Затем Под добавлением щелкните Элемент Config и добавьте 2 элемента, упомянутые выше, как показано на скрингапе ниже:
Шаг 2.1 Нажмите на элемент HTTP Header Manager. На экране, который появляется, нажмите «Добавить», чтобы добавить заголовки, которые вы хотели бы иметь по каждому запросу. Для нашего тестирования нагрузки давайте будем Content-Type Заголовок имеют значение «Приложение/JSON». Мы также добавили Auth Заголовок, значение которого будет равна всего, что мы будем назначать переменной «auth» (вы увидите это в действии позже).
Шаг 2.2 Теперь давайте перейдем к HTTP-запросу по умолчанию. Этот элемент позволяет нам установить значения по умолчанию для:
- Протокол: http или https
- Имя сервера или IP: для базового URL нашего приложения
- Номер порта
Для нашего тестирования установите значение имени сервера на IP-адрес веб-приложения Flask, мы начали на шаге 0. Установите номер порта до 5000 (порта по умолчанию колба).
[3] HTTP-запрос
HTTP-запрос позволяет указывать отдельные HTTP-запросы, которые составляют наш план теста. Добавьте HTTP-запрос на основе инструкций ниже:
На экране запроса HTTP давайте добавим подробную информацию о нашем первом запросе HTTP. Наша первая конечная точка — Post/пользователи/вход , И мы отражаем это на экране HTTP-запроса ниже. Мы больше не пишем базовый URL URL, потому что мы уже сделали это в нашем элементе конфигурации конфигурации Config.
Также давайте добавим учетные данные для входа к нашему телу запроса:
{
"email": "raphael.jambalos@gmail.com",
"password": "jambyiscool"
}
[4] Просмотр результатов Дерево и сводный отчет Прослушиватель
Как это так, мы уже можем запустить тест нагрузки. Но это не будет никакого использования в этот момент, потому что мы не можем видеть результаты. С слушателями мы можем исследовать результаты, чтобы увидеть, если нам нужно внести изменения в наш тест нагрузки.
Добавьте вид на дерево результатов и сводный прослушиватель отчета на основе инструкций ниже:
Шаг 4.1 Запустите тест нагрузки
С 2 слушателей уже на месте, теперь мы можем запустить тест нагрузки. Мы делаем это, нажав кнопку PLAY (зеленый треугольник) на панели инструментов. Я аннотировал панель инструментов для более легкой ссылки. Вы можете делать другие действия, такие как остановка теста (знак остановки) и очистки предыдущих результатов теста на нагрузку (логотип передач и метлов).
Шаг 4.2 Посмотреть дерево результатов
С помощью этого слушателя вы можете изучить каждый запрос, сделанный во время вашего теста нагрузки и посмотрите на тело запроса и ответа каждого. Важно сделать это как некоторые apis Repeate http 200, но их тело ответа содержит сообщение об ошибке, указывающее, что запрос не удался (мы называем этими «мягкими ошибками»).
Мягкие ошибки деформируют нашу скорость ошибки, потому что JMeter считает, что запрос удался, поскольку он вернул HTTP 200 (даже если в ответ имеется сообщение об ошибке). В следующем посте мы обсудим, как настроить JMeter, чтобы проверить ответ, чтобы увидеть, действительно ли ошибка.
Шаг 4.3 Сводный отчет
В сводном изложении мы можем увидеть статистику высокого уровня о каждой конечной точке, такую как время отклика и скорость ошибок.
[5] Давайте добавим еще 2 http запросов
Шаг 5.1.
Теперь пришло время создать нашу вторую конечную точку. Если вы вспомните, наша вторая конечная точка создает карту лояльности с пути /Лояльность-карты и метод поста.
Создайте HTTP-запрос, как вы сделали на шаге 3. Щелкните левой кнопкой мыши на HTTP-запросе, которое вы только что создали и перетащите его ниже HTTP-запроса, созданного ранее.
Затем выберите «Пост», добавьте путь и добавьте кузов.
{
"first_name": "Raphael",
"last_name": "Jambalos"
}
Шаг 5.2
На данный момент наш план теста нагрузки становится грязным, потому что есть 2 HTTP-запросов и нет правильной метки. Давайте исправляем, добавив имена в наши HTTP-запросы, как показано ниже. После того, как вы измените имя, он автоматически отражен на левой стороне.
Кроме того, лучше всего перетащить 2-й HTTP-запрос прямо под 1-й HTTP-запросом. Это облегчает чтение и гарантирует, что конечная точка входа будет выполнена перед конечной точкой Create Card.
Шаг 5.3
Теперь давайте попробуем запустить тест нагрузки. Несмотря на то, что каждый «виртуальный пользователь» подписан в качестве первого шага, все запросы для создания карты лояльности не удаются. Это потому, что мы не извлекаем и используем токен, возвращаемый /Пользователи/Signin запрос.
[6] Джосон Экстрактор
Давайте исправить это, добавив экстрактор JSON на основе инструкций ниже:
После создания перетащите почтовый процессор JSON Extaver, чтобы находиться в запросе/пользователей/SENTERIN. Затем добавьте выражения переменной JMeter и JSON PATH PATH, чтобы извлечь токен из ответа и поместите его на переменную авторизацию.
Напомним на шаге 2.1, мы создали руководитель заголовка HTTP с заголовком Auther, получая его значение из переменной Auth, используя специальный синтаксис $ {Auth} Отказ С экстрактором JSON мы извлекли токен от ответа /Пользователи/Signin Запрос и разместить его в переменной авторизации. Теперь после операции входа в систему каждый HTTP-запрос уже должен иметь токен входа в систему.
Переполните тест, мы должны иметь все запросы уже работать.
[7] домашнее задание
После создания карты лояльности у нас есть возможность увидеть более подробную информацию о карте, которую мы только что создали. Мы делаем это с помощью карты CARD_NUMBER, возвращенном в API создания карты ( Post/Lonyty-Cards ) и используя его в качестве параметра на 3-й конечную точку.
Путь:
/Лояльность-карты/{номер карты}- Пример:/Лояльность -кры/4444375498978382.
- Метод: ПОЛУЧИТЬ
Что дальше?
С 7 ступенями выше, у нас сейчас есть план испытаний на нагрузку для проверки производительности нашего приложения. Но мы еще не готовы.
На следующей неделе я опубликую сообщение, чтобы помочь вам уточнить этот план теста в дальнейшем и применять лучшие принципы практики в этом сообщении в блоге для создания реалистичных тестов нагрузки.
Особая благодарность, чтобы уделить мои посты более последовательным.
Авторитетный JMeter Book of Rodrigues, Mouawad и Milamber под названием Мастер Apache Jmeter. От тестирования нагрузки на DevOps Действительно помог мне понять JMeter в более четкости. Я настоятельно рекомендую вам купить эту книгу, если вы хотите узнать больше о JMeter.
Фото Theme Inn на Бессмысленно
Тест нагрузки на ваш сайт с Apache Jmeter (3-х частей серии)
Оригинал: «https://dev.to/raphael_jambalos/load-test-your-website-in-10-minutes-with-this-visual-guide-1h71»