Статьи

JMeter: нагрузочное тестирование реляционных баз данных

Apache JMeter — это инструмент для тестирования производительности, полностью написанный на Java. Любое приложение, работающее по модели запрос / ответ, может быть подвергнуто нагрузочному тестированию с помощью JMeter. Реляционная база данных не является исключением: получает sql-запросы, выполняет их и возвращает результаты выполнения.

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

План тестирования : описывает сценарий тестирования
Группа потоков : представляет пользователей, выполняющих ваш тестовый сценарий.
Образцы : способ отправки запроса и ожидания ответа. Примеры запросов: HTTP-запрос, JDBC-запрос, SOAP / XML-RPC-запрос и java-объектный запрос.
Logic Controller : используется для настройки логики, которую JMeter использует, чтобы решить, когда отправлять запросы
Слушатели : получают результаты теста и отображают отчеты.
Таймеры : заставляют JMeter задерживать определенное время перед каждым запросом потока.
Утверждения : проверьте, что приложение возвращает ожидаемые ответы

Примечание . Этот пост не является альтернативной документацией для JMeter. У JMeter есть отличная документация. Вы можете найти подробности в руководстве пользователя (http://jakarta.apache.org/jmeter/usermanual/index.html. Предположим, у нас есть приложение, которое регистрирует каждую транзакцию в реляционной базе данных. Мы собираемся создать план тестирования — шаг за шагом — чтобы ответить на вопросы ниже.

  • Сколько записей транзакций можно вставить в таблицу транзакций за секунду?
  • Сколько времени занимает вставка одной записи транзакции в таблицу транзакций?
  • Как количество одновременных потоков (пользователей) влияет на количество вставок / сек и среднее время ответа?
  • Как количество записей влияет на вставку / сек и среднее время ответа?

Шаг 1

Скопируйте драйвер mysql jdbc в папку lib вашей установки JMeter. JMeter нужен подходящий драйвер jdbc в пути к классам для подключения к базе данных.

1
Example ~/tools/jakarta-jmeter-2.3.4/lib/mysql-connector-java-5.0.5.jar

Мы собираемся хранить заказы клиентов и результат заказа в таблице транзакций.

1
2
3
4
5
6
7
CREATE TABLE transactions (
    id INT NOT NULL AUTO_INCREMENT,
    customer_id INT NOT NULL,
    order_id INT NOT NULL,
    result INT,
    PRIMARY KEY (id)
);

Шаг 2

Создайте план тестирования и назовите его «Test MYSQL DB». Затем добавьте следующие компоненты jmeter в план тестирования.

  1. Группа потоков с именем «Пользователи базы данных»
  2. Пробоотборник типа JDBC Request
  3. Элемент конфигурации типа Конфигурация соединения JDBC
  4. Три элемента конфигурации типа Random Variable
  5. Слушатель типа Сводный отчет

После добавления этих компонентов план тестирования JMeter выглядит следующим образом.

Шаг 3

Настроить базу данных пользователей. Компонент группы потоков имитирует пользователей базы данных.
1. Количество пользователей (тем)
2. Сколько раз пользователь будет отправлять запрос (количество циклов). Если вы выберете «Навсегда» , потоки будут выполняться в цикле while (true) {…}, пока вы не решите остановить тест.

Шаг 4

Настройте пул соединений JDBC. Компонент конфигурации соединения JDBC используется для создания пулов соединений JDBC. URL базы данных, драйвер jdbc, пользователь базы данных и пароль настраиваются с помощью этого компонента. Пулы соединений идентифицируются как «Имя переменной» . JDBC Samplers (запросы) используют это имя переменной (имя пула соединений) для извлечения и передачи соединений. Я назвал тестовый пул соединений как «мой пул БД»

Шаг 5

Определите случайные величины, которые будут использоваться в операторах INSERT. В этом тесте я использую три случайные переменные: идентификатор пользователя, идентификатор заказа и результат . На следующем рисунке показана конфигурация случайного числа для идентификатора пользователя. Генератор случайных чисел даст нам случайные целые числа от 1 до 1000000. Мы можем сослаться на сгенерированное случайное число с именем user_id .

Шаг 6

Компонент JDBC Request — это место, где мы говорим нашим пользователям (темам), что делать. Имя пула, которое было настроено на шаге 3 «my db pool», будет использоваться как «имя переменной, связанной с пулом» . Все потоки будут выполнять подготовленные операторы. Идентификатор пользователя, идентификатор заказа и результат будут сгенерированы конфигуратором случайных чисел (описано в шаге 5)

Шаг 7

Теперь у нас настроены потоки для вставки записей транзакций в таблицу транзакций . На этом последнем шаге мы добавим прослушиватель типа « Сводный отчет» для просмотра результатов теста.

Результаты говорят нам, что 10 одновременно работающих пользователей (потоков), работающих в бесконечном цикле, могут вставить в нашу таблицу транзакций около 3300 строк. Среднее время, затрачиваемое на вставку строки, составляет 2 мс. Вы также можете выбрать слушателя «Graph Results», чтобы просмотреть визуальное представление результатов.
Я создал и запустил простой план тестирования БД. Я надеюсь, что вы найдете этот пост полезным. Помните об этом девизе

если вы не можете измерить это, вы не можете ни управлять этим, ни улучшать это

Счастливого тестирования…

Справка: нагрузочное тестирование реляционных баз данных. С помощью JMeter от нашего партнера по JCG Илькина Уласа, все ваши базы принадлежат нам .