[Перевод] Как использовать JMeter для нагрузочного тестирования и тестирования производительности
Нагрузочное тестирование с JMeter
Apache JMeter — это инструмент для проведения нагрузочного тестирования, представляющий собой десктопное приложение с открытым исходным кодом на базе Java. JMeter позволяет определить, может ли тестируемое веб-приложение удовлетворять требованиям высокой нагрузки или нет. Он также помогает проанализировать работу всего сервера под высокой нагрузкой.
Тестирование производительности приложения с JMeter
JMeter помогает тестировать как статические, так и динамические ресурсы, помогает обнаружить пользователей, одновременно присутствующих на сайте, и включает визуальные инструменты для предоставления аналитики. Тестирование производительности веб-приложений с JMeter включает в себя нагрузочные тесты и стресс-тесты.
Этот инструмент предлагает следующие преимущества при тестировании производительности:
JMeter можно использовать для тестирования производительности как статических ресурсов, таких как JavaScript и HTML, так и динамических ресурсов, таких как JSP, сервлеты и AJAX.
С помощью JMeter можно определить максимальное количество пользователей в единицу времени, которое может выдержать тестируемый сайт.
JMeter предоставляет разнообразные визуальные отчеты проводимого анализа производительности.
Тестирование производительности с JMeter включает в себя:
Нагрузочное тестирование: моделирование ожидаемого использования веб-приложения путем имитации одновременного доступа множества пользователей.
Стресс-тестирование: каждый веб-сервер имеет предел максимальной нагрузки. Когда нагрузка превышает предел, веб-сервер начинает отвечать медленно и выдавать ошибки. Цель стресс-тестирования — определить максимальную нагрузку, которую может выдержать веб-сервер.
На рисунке ниже показано, как JMeter во время нагрузочного тестирования имитирует высокую нагрузку:
Создание плана тестирования производительности в JMeter
В этом руководстве мы проводим анализ производительности Google.com для 1000 пользователей с использованием различных инструментов тестирования производительности. Наша цель — убедиться, что сайт может справиться с нагрузкой и обеспечить непрерывный и беспроблемный пользовательский опыт.
Перед тестированием производительности веб-приложения мы должны определить:
Нормальную нагрузку: среднее количество пользователей, посещающих сайт.
Большую нагрузку: максимальное количество пользователей, посещающих сайт.
Цель проводимого тестирования.
Вот дорожная карта этого практического примера
Performance Testing using Jmeter
Шаг 1) Добавить Thread Group (группа потоков)
Запустите JMeter
Выберите Test Plan (План теста)
Добавить Thread Group
Щелкните правой кнопкой мыши на «Test Plan» и добавьте новую группу потоков: Add → Threads (Users) (Потоки (Пользователи)) → Thread Group
Performance Testing using Jmeter
На панели управления Thread Group введите Thread Properties (Свойства потока) следующим образом:
Performance Testing using Jmeter
Number of Threads (Количество потоков): 100 (Количество пользователей, подключенных к веб-сайту: 100)
Loop Count (Количество итераций): 10 (Количество раз выполнения тестирования)
Ramp-Up Period: 100
Thread Count (Счетчик потоков) и Loop Counts (Счетчик итераций) отличаются.
Performance Testing using Jmeter
Ramp-Up Period указывает JMeter, какую задержку перед запуском следующего пользователя нужно сделать. Например, если у нас 100 пользователей и период Ramp-Up 100 секунд, то задержка между запуском пользователей составит 1 секунду (100 секунд /100 пользователей).
Шаг 2) Добавление элементов JMeter
Теперь мы определяем, какие элементы JMeter будут в этом тесте. Этими элементами являются
HTTP request Default
Этот элемент можно добавить, щелкнув правой кнопкой мыши по Thread Group и выбрав: Add → Config Element (Конфигурационные элементы) → HTTP Request Defaults.
Performance Testing using Jmeter
В панели управления HTTP Request Defaults введите адрес тестируемого веб-сайта (http://www.google.com).
Performance Testing using Jmeter
Щелкните правой кнопкой мыши на Thread Group и выберите: Add → Sampler (Сэмплер) → HTTP Request.
Performance Testing using Jmeter
В панели управления HTTP-запросами (HTTP Request) поле Path указывает, какой URL-запрос (URL request) вы хотите отправить на сервер Google.
Performance Testing using Jmeter
Например, если вы введете «calendar» в поле Path, JMeter создаст URL-запрос http://www.google.com/calendar к серверу Google.
Performance Testing using Jmeter
Если оставить поле Path пустым, JMeter создаст URL-запрос http://www.google.com на сервер Google.
В этом тесте оставляем поле Path пустым, чтобы JMeter создал URL-запрос http://www.google.com на сервер Google.
Шаг 3) Добавление Graph Result (Графические результаты)
JMeter может показать результат теста в формате графика. Щелкните правой кнопкой мыши на Test Plan (План тестирования), Add (Добавить) → Listener (Слушатель) → Graph Results
Performance Testing using Jmeter
Шаг 4) Запустите тест и получите результат тестирования
Нажмите кнопку Run (Ctrl + R) на панели инструментов, чтобы запустить процесс тестирования. Результат тестирования будет показан на графике в режиме реального времени. На рисунке ниже представлен график плана тестирования, в котором мы смоделировали 100 пользователей, зашедших на сайт www.google.com.
Performance Testing using Jmeter
В нижней части рисунка приведена следующая статистика, представленная в цветах:
Черный: Общее текущее количество отправленных сэмплов.
Синий: Текущее среднее значение всех отправленных сэмплов.
Красный: Текущее стандартное отклонение (Deviation).
Зеленый: Пропускная способность (Throughput), которая представляет собой количество запросов в минуту, обработанных сервером.
Проанализируем производительность сервера Google на рисунке ниже.
Performance Testing using Jmeter
Чтобы проанализировать производительность тестируемого веб-сервера, необходимо сосредоточиться на 2 параметрах:
Пропускная способность является наиболее важным параметром. Она отражает способность сервера справляться с большой нагрузкой. Чем выше пропускная способность, тем выше производительность сервера.
В данном тесте пропускная способность сервера Google составляет 1 491,193 в минуту. Это означает, что сервер Google может обрабатывать 1 491,193 запросов в минуту. Это довольно высокое значение, поэтому можно сделать вывод, что у сервера Google хорошая производительность.
Отклонение показано красным цветом — оно указывает на отклонение от среднего значения. Чем меньше, тем лучше.
Давайте сравним производительность сервера Google с другими веб-серверами. Вот результат тестирования производительности сайта http://www.yahoo.com/ (вы можете выбрать другие сайты)
Performance Testing using Jmeter
Пропускная способность тестируемого сайта http://www.yahoo.com составляет 867,326 в минуту. Это означает, что данный сервер обрабатывает 867,326 запросов в минуту, что ниже, чем у Google.
Отклонение составляет 2689, что намного больше, чем у Google (577). Таким образом, мы можем определить, что производительность этого сайта меньше, чем у сервера Google.
Примечание: Приведенные выше значения зависят от нескольких факторов, таких как текущая загрузка сервера Google, скорость интернета, мощность процессора и т.д. Следовательно, очень маловероятно, что вы получите те же результаты, что и выше. Поэтому не паникуйте! Если вы хотите понять, как нагрузка на сервер влияет на производительность и как ее проверить, вам может быть полезно это руководство по нагрузочному тестированию.
Устранение ошибок:
Если вы столкнулись с проблемой при выполнении вышеописанного сценария, сделайте следующее:
Проверьте, подключены ли вы к интернету через прокси-сервер. Если да, удалите прокси.
Откройте новый экземпляр Jmeter.
Откройте PerformanceTestPlan.jmx в Jmeter
Дважды щелкните на Thread Group → Graph Result
Запустите тест
Материал подготовлен в рамках курса «Нагрузочное тестирование».