Перфоманс Лаб

jmeter
нагрузочное тестирование
21 марта, 2025

JSR223. Примеры использования в JMeter

Время чтения: 4 мин.
21 марта, 2025
Автор:
Жуган Владислав
JSR223 расширяет возможности Java-платформы для создания и управления скриптами на различных языках программирования. Это особенно актуально для Apache JMeter, поскольку позволяет разрабатывать гибкие сценарии тестирования производительности. В статье мы рассмотрим примеры использования JSR223 на Groovy, а также дадим рекомендации по оптимизации тестирования.
Материал ориентирован на продвинутых пользователей JMeter, желающих углубить знания в области нагрузочного тестирования.

Что такое JSR223?

JSR223 (Java Specification Request 223) —

спецификация, обеспечивающая интеграцию и выполнение скриптов на различных языках программирования в Java-приложениях. В JMeter она позволяет применять скрипты для множества задач, таких как настройка параметров запросов, обработка ответов и управление логикой теста.

Основные преимущества использования JSR223 в JMeter

Производительность

скрипты, написанные на Groovy, выполняются быстрее по сравнению с BeanShell

Гибкость

возможность использовать различные языки программирования для реализации сложной логики

Расширяемость

возможность интеграции с внешними библиотеками и API

Производительность

лёгкость написания и тестирования скриптов прямо в JMeter

Использование скриптов JSR223 в JMeter позволяет адаптировать тесты под конкретные задачи и повысить их производительность за счёт оптимизации операций. JSR223 даёт возможность создавать сложные сценарии, выводя процесс тестирования на новый уровень.
Далее мы рассмотрим примеры применения этого инструмента для повышения гибкости и эффективности тестирования.

Основные возможности JSR223 в JMeter

JSR223

strelka
strelka
strelka

Кастомизация тестов

Возможность добавления и выполнения сложной логики, которая выходит за рамки стандартных возможностей JMeter. Например, создание динамических параметров запросов на основе результатов предыдущих операций или разрабока сложных алгоритмов обработки данных.

Повторное использование кода

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

Управление данными

Работа с данными, такими как чтение и запись файлов, обработка данных перед отправкой HTTP-запросов, или манипуляция с JSON/XML ответами. Например, можно использовать JRS223 для генерации сложных данных на лету или для фильтрации и агрегирования результатов тестов.

Groovy

Groovy — наиболее популярный язык для использования в JMeter благодаря своей производительности и совместимости с Java. Далее мы рассмотрим несколько примеров его применения.
Пример 1. Динамическое управление частотой запросов в зависимости от времени суток
groovy example 1
Этот пример полезен при тестировании систем, работающих с повышенной нагрузкой в определённые часы. Например, веб-сайтов интернет-магазинов, где пик посещаемости приходится на утро и вечер, или сервисов бронирования, наиболее загруженных в обеденное время. Такой подход помогает оценить устойчивость системы в реальных условиях и выявить возможные проблемы с производительностью.
Пример 2. Генерация случайных данных для профиля пользователя
groovy example 2
Предположим, на сайте есть форма регистрации, где пользователю необходимо ввести ФИО, возраст, e-mail и номер телефона. Вместо ручного ввода данных для каждого теста можно автоматически генерировать уникальные профили для каждого запроса. Это позволяет проверить корректность обработки различных наборов данных, выявить возможные ошибки и проблемы, связанные с валидацией и хранением пользовательской информации.
Пример 3. Чтение, обработка и запись данных в CSV-файл
Допустим, есть CSV-файл с информацией о продуктах, включая название, цену и количество на складе. В рамках тестирования необходимо рассчитать общую стоимость каждого товара (цена × количество) и сохранить результат в новый CSV-файл.
Входной файл products.csv имеет следующую структуру:
groovy example 3
*Для запуска данного скрипта необходимо предварительно скачать JAR-файл «commons-csv-1.11.0» (https://commons.apache.org/proper/commons-csv/download_csv.cgi)  и поместить в папку lib/ext JMeter.

Работа с CSV-файлами в JMeter с использованием JSR223 Sampler и Groovy позволяет не только читать данные, но и выполнять над ними необходимые операции и сохранять результаты. Этот метод открывает новые возможности для сложного тестирования, обеспечивая гибкость и работу с большими объёмами данных.
Пример 4. Обработка HTTP-ответа
В этом примере мы отправим HTTP-запрос к API и обработаем полученный ответ. На основе полученных данных будет принято решение о продолжении тестирования или его завершении.
groovy example
Этот код выполняет HTTP-запрос к указанному URL-адресу, получает ответ в формате JSON, обрабатывает его и проверяет определённое значение.
01
Устанавливает соединение и отправляет GET-запрос к API, чтобы получить JSON-данные
02
Парсит JSON-ответ в объект с помощью JsonSlurper
03
Проверяет тип данных: если ответ – это непустой список, то:
04
Извлекает userId первого элемента и сравнивает его со значением 100
05
Записывает результат в журнал: если userId равно 100, то выводит сообщение User ID равен 100, иначе – User ID не равен 100
Обработка ошибок: если ответ пуст или не является списком, записывает ошибку в журнал. Код иллюстрирует обработку HTTP-ответов и показывает, как выполнять динамический анализ данных, что является важной частью процесса нагрузочного тестирования.

Оптимизация использования JSR223 скриптов

Хоть JSR223 и предоставляет широкие возможности, неправильное использование скриптов может негативно сказаться на производительности тестов. Ниже мы описали несколько рекомендаций для оптимизации:

Выбор языка

1/4
Используйте Groovy, если требуется высокая производительность, ведь он тесно интегрирован с JVM и обладает мощным синтаксисом, который позволяет выполнять сложные задачи с минимальными затратами ресурсов.

Кэширование скриптов

2/4
Включите кэширование компилированных скриптов, чтобы избежать их повторной компиляции при каждом выполнении. Это значительно ускорит выполнение тестов, особенно если скрипты содержат сложные вычисления или большой объём кода.

Минимизация использования внешних библиотек

3/4
Ограничьте использование внешних библиотек, так как они увеличивают время выполнения скриптов. Применяйте их только при необходимости, отдавая предпочтение стандартным средствам языка, если они позволяют решить задачу.

Профилирование и мониторинг

4/4
Используйте встроенные инструменты для профилирования и мониторинга выполнения скриптов. Это поможет выявить узкие места и оптимизировать производительность на этапе разработки тестов, а не во время их выполнения.

Вывод

JSR223 —

это мощный инструмент, значительно расширяющий возможности Apache JMeter при создании и выполнении тестов. Его грамотное использование позволяет не только повысить гибкость и адаптируемость тестов, но и улучшить их производительность. Но важно помнить об оптимизации и правильно выбирать инструменты в зависимости от конкретной задачи.

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

Закажите нагрузочное тестирование у тех, кто умеет достигать поставленных целей

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

Приложения

01
Тест план – Test Plan.jmx
02
JAR – commons-csv-1.11.0
03
JAR – commons-csv-1.11.0-sources