JMeter — быстрый гайд

Это приложение с открытым исходным кодом на Java, предназначенное для нагрузочного и стресс-тестирования. 

В JMeter можно проводить нагрузочное тестирование многих типов серверов — Web — HTTP, HTTPS, SOAP, баз данных via JDBC и т.д.

Установка: 

Загрузите JMeter: https://jmeter.apache.org/download_jmeter.cgi

Запустите из папки /bin в терминале: 

  • Для Mac: jmeter.sh 
  • Для Windows: .jmeter.bat

Базовые понятия JMeter

План тестирования: Описывает последовательность шагов, которые JMeter будет выполнять при запуске. Полный план тестирования (тест-план) состоит из одной или нескольких групп потоков, логических контроллеров, контроллеров генерации семплов, слушателей, таймеров, утверждений и конфигурационных элементов.

Группа потоков: Thread Group  — это набор потоков, выполняющих один и тот же сценарий. Задает количество итераций в конфигурации. 

Количество потоков (пользователей) : Количество виртуальных пользователей, с которыми будет проводиться тестирование. 

Период нарастания (нагрузки): Ramp up period определяет количество времени, в течение которого все пользователи будут инициализированы, например за 10 миллисекунд в систему «войдет» 100 виртуальных пользователей. 

Количество повторений (нагрузочного цикла): Loop Count определяет количество раз, которое будет выполняться Группа потоков. 

Семплеры: Samplers указывают нам, какой тип запроса должен быть отправлен, например HTTP, HTTPS и т.д.

Латентность: Время до получения первого фрагмента информации, т.е. первого байта данных. 

Время соединения: Время, необходимое для установления соединения с сервером. 

Время выборки: Sample Time — время, необходимое для получения всех данных. 

Выборка (Sample) — Последовательность номеров выборок. 

Байты — Размер полученных данных.

Воркбенч: Workbench — это место, где можно хранить элементы, которые не используются в текущем сценарии. 

Инструмент записи скриптов: HTTP(s) Test Script Recorder помогает тестировщикам записывать сценарий и затем настраивать нагрузку для каждой транзакции.

Утверждения: ассерты (assertions) проверяют результаты, полученные в дереве результатов.

Утверждение ответа: в нем мы добавляем строки и затем сравниваем их с полученными ответами. 

Утверждение продолжительности: Duration Assertion проверяет, что сервер ответил в течение заданного времени.

Утверждение размера: Size assertion проверяет размер для сервера, отвечающего за период нарастания.

HTML-утверждение: HTML Assertion проверяет HTML-синтаксис ответа, полученного от сервера.

Конфигурация:

Настройка импорта CSV-сета: CSV Data Set Config используется, когда нужно загрузить в JMeter какие-то данные извне в виде CSV. Например, API требует какой-либо ID, который является переменной и может быть загружен через CSV. 

Пользовательские переменные: помогает jMeter выбирать значения из заранее определенных переменных, например, если нужно провести тестирование на различных серверах, таких как Staging или Test Server.

Дефолтный HTTPS-сервер: Это сервер по умолчанию, на котором мы делаем запрос, например Staging или Test Server, чтобы не менять URL каждый раз.

Менеджер кэша HTTPS: для управления кэшем сервера. 

Менеджер кукис HTTPS: для управления cookies во всех API.

Контроллеры логики: Логические контроллеры и таймеры управляют потоком транзакций, например:

  • While-контроллер, в который мы передаем переменную для API, или загружаем CSV, который заменит переменную в API. 
  • Loop-контроллер запускает сохраненные в нем семплеры и запросы определенное количество раз, или по кругу (если установлен флажок forever). 
  1. Выберите флажок ‘Forever’ для запуска тестов бесконечное количество раз
  2. Введите число циклов для запуска тестов фиксированное количество раз:

JSON Extractor: JSON-экстрактор предназначен для извлечения нужных переменных для API, например: 

API /login предоставит нам ID пользователя, который затем можем извлечь и использовать в API /getWalletOfUser

На скриншотах выше мы создаем while-контроллер, который передает переменные, полученные из CSV, для запуска API. 

Bean shell Sampler: используется для написания скриптов на Java.

Ниже приведен пример, в котором мы используем BSS для записи данных из API в файл.

String name = vars.get(“tags”); // В ответе API будут доступны теги.
f = newFileOutputStream(“/Users/ashokgarg/Desktop/tags.csv”,false);
// Куда сохранять файлы
p = new PrintStream(f);// Печать вывода встроенной Java-функцией
this.interpreter.setOut(p); 
print(name.split(“,”)); // Сплит ответа из строки
f.close(); 

Таким образом, мы получим ответ от /login api и запишем результаты в файл `tags.csv:

Постоянный таймер: он добавляется для того, чтобы установить задержку между API-запросами на сервере; например, если он установлен на 10 с, каждый API-запрос будет ждать 10 секунд после первого. 

Препроцессоры: Добавляются на уровне группы потоков, чтобы их можно было выполнить до запроса семплера, например, данные, необходимые API из БД, могут быть прописаны в препроцессоре. 

Постпроцессоры: Добавляются на уровне группы потоков и выполняются после семплера. Используются для обработки данных ответа от сервера и извлечения определенных значений.

Сводный отчет

Пропускная способность (пропуск, Throughput): отражает способность сервера справляться с большой нагрузкой. Чем выше пропускная способность, тем выше производительность сервера. 

Отклонение (девиация): Используется для определения разницы между временем, затраченным на выполнение выборки, и средним временем, отведенным на ее выполнение.

Некоторые важные формулы:

 endTime = lastSampleStartTime + lastSampleLoadTime
 startTime = firstSampleStartTime
 conversion = unit time conversion value
 Throughput = Numrequests / ((endTime - startTime)*conversion)

Быстрый практикум

Делаем следующее:

  1. Создайте План тестирования > Добавьте группу потоков > На уровне группы потоков добавьте количество пользователей > период нарастания > и количество циклов. 
  2. Добавьте HTTP Cookie и Cache Manager на уровне группы потоков. 
  3. Добавьте Sampler > Http Header Manager (значения по умолчанию, необходимые для выполнения запроса Sampler). 
  4. Добавьте HTTP Default Request (укажите сервер, на котором вы должны тестировать).
  5. Добавьте JSON Extractor для получения значений из ответа и Bean Shell sampler для записи данных CSV.
  6. Добавьте PreProcessor и PostProcessor для управления запросами (описаны  выше). 
  7. Добавьте Listeners: a) View Result Tree b) Summary Report c) Graph Results 
  8. Нажмите Command +E , Command +S , Command + R на Mac-машине после ввода всех вышеперечисленных запросов и проверьте Throughput и Standard Deviation.

Уточнения в случае нагрузочного и стресс-тестирования:

  1. Укажите количество пользователей > выполните API > войдите на тестируемый сервер с помощью команды «top command» > проверьте использование CPU и состояние CPU. 
  2. Увеличьте количество пользователей на уровне семплера и установите счетчик циклов на 10, чтобы запросы выполнились 10 раз, и проверьте использование CPU сервера, количество хитов API и логи сервера. 
  3. Все тестируемые API должны отдавать код ответа 200, а использование CPU сервера и состояние CPU должны быть в норме, как и раньше.

Если на вашем сервере нет активных пользователей, вы должны видеть, что % использования процессора пользователями должен быть очень низким или 0%, а % простоя процессора должен составлять 99+%.

Режим без интерфейса

JMeter иногда используется в безинтерфейсном режиме, потому что: 

  1. Мы можем увеличить количество потоков, в отличие от GUI-режима, который иногда приводит к сбоям. 
  2. GUI-режим не подходит для «тяжелых» сценариев, поскольку jMeter потребляет больше памяти и процессора, что может повлиять на результаты тестирования. 
  3. Чтобы увеличить возможности jMeter, то есть получить больше запросов в секунду. 

Шаги:

Сохраните файл jmx в папке >> откройте терминал >> перейдите в папку, в которой сохранен файл jmx (Java Management Extensions), и выполните следующую команду:

 jmeter -n –t login.jmx -l testresults.jtl
  • n: Указывает, что JMeter будет работать без интерфейса.
  • -t: Имя JMX-файла, содержащего план тестирования. 
  • -l: Имя файла JTL (JMeter text logs) для регистрации результатов. 
  • -j: Имя лога выполнения JMeter
  • -R: список удаленных серверов. 
  • H: имя хоста или IP-адрес прокси-сервера. 
  • -P: порт прокси-сервера.

BYJU’S Exam Prep Engineering


Какой была ваша первая зарплата в QA и как вы искали первую работу?

Мега обсуждение в нашем телеграм-канале о поиске первой работы. Обмен опытом и мнения.

Подписаться
Уведомить о
guest

0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии

Мы в Telegram

Наш официальный канал
Полезные материалы и тесты
Готовимся к собеседованию
Project- и Product-менеджмент

? Популярное

? Telegram-обсуждения

Наши подписчики обсуждают, как искали первую работу в QA. Некоторые ищут ее прямо сейчас.
Наши подписчики рассказывают о том, как не бояться задавать тупые вопросы и чувствовать себя уверенно в новой команде.
Обсуждаем, куда лучше податься - в менеджмент или по технической ветке?
Говорим о конфликтных ситуациях в команде и о том, как их избежать
$1100*
медианная зарплата в QA в июне 2023

*по результатам опроса QA-инженеров в нашем телеграм-канале

Собеседование

19%*
IT-специалистов переехало или приняло решение о переезде из России по состоянию на конец марта 2022

*по результатам опроса в нашем телеграм-канале

live

Обсуждают сейчас