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