Pull to refresh

Автоматизированное тестирование сервисов, использующих протокол MQ с помощью JMeter

Reading time3 min
Views16K
Крупные распределенные информационные системы зачастую состоят из более мелких модулей (подсистем) и разрабатываются группами программистов с использованием разных платформ и подходов. Часто, обмен данными в таких системах происходит в асинхронном режиме и предпочтительно использование промежуточного программного обеспечения, ориентированного на обработку сообщений (англ. Message-Oriented Middleware, MOM).

Для модульного и интеграционного тестирования таких систем удобно использовать старый добрый Apache JMeter.

Для примера выделим небольшой стандартный модуль такой системы. Допустим, есть некий адаптер, который читает XML сообщение из очереди входящих сообщений, выполняет преобразование структуры XML сообщения и публикует преобразованное сообщение в очередь исходящих сообщений. В качестве MOM, в данном случае, используется Websphere MQ 7.5.

Настройка JMerter


Для ручного тестирования такой системы можно использовать утилиту rfhutil, которая поставляется с Websphere MQ. Однако, если вариантов преобразования структуры XML документа много, то проверка таких изменений “руками” не оправдана. Есть большой риск не найти ошибку.

Для тест плана нам потребуются следующие элементы: User Defined Variables, Thread Group, JMS Publisher, JMS Subscriber. Для того, чтобы в JMeter появилась возможность использовать элементы JMS Publisher, JMS Subscriber необходимо добавить jar библиотеки в папку %jmeter_home%/lib/ext в зависимости от того, какое MOM вы используете.

В случае Websphere MQ 7.5 необходимые jar библиотеки находятся в директории %wmq_home%/java/lib.

Список необходимых библиотек:
  • com.ibm.mq.commonservices.jar
  • com.ibm.mq.headers.jar
  • com.ibm.mq.jar
  • com.ibm.mq.jmqi.jar
  • com.ibm.mq.pcf.jar
  • com.ibm.mqjms.jar
  • connector.jar
  • dhbcore.jar
  • fscontext.jar
  • jms.jar
  • jta.jar
  • mqcontext.jar
  • providerutil.jar


Необходимо создать папку %jmeter_home%/bindings и поместить туда файл .bindings, сгенерированный с помощью утилиты JMSAdmin, которая поставляется с Websphere MQ.

Создание файла .bindings


Файл .bindings содержит всю необходимую информацию для подключения к менеджеру очередей. Для того, чтобы создать файл .bindings для JMeter, нужно использовать утилиту JMSAdmin, которая поставляется с Websphere MQ. %WebSphere_MQ_home%\java\bin>JMSAdmin.bat

Запуск классов WebSphere MQ для администрирования JMS
InitCtx> DEF CF(LOCAL.QCF) QMGR(TEST.QM) TRANSPORT(CLIENT) HOSTNAME(localhost) PORT(1415)
InitCtx> DEF Q(QUEUE.IN) QMGR(TEST.QM) QUEUE(QUEUE.IN)
InitCtx> DEF Q(QUEUE.OUT) QMGR(TEST.QM) QUEUE(QUEUE.OUT)
InitCtx> end
Остановка классов WebSphere MQ для администрирования JMS

image

Создание тест-плана


Наш тест план содержит несколько базовых элементов: User Defined Variables, Thread Group, JMS Publisher, JMS Subscriber, View Results Tree.



Элемент User Defined Variables содержит параметры подключения к MQ инфраструктуре.



Элемент JMS Publisher содержит настройки для работы с MQ очередью (режим запись). Есть несколько способов указать, какое сообщение должно быть записано в очередь. В данном примере для простоты сообщение публикуется непосредственно в шаге сценария.



Элемент JMS Subscriber содержит настройки для работы с MQ очередью (режим чтение).



Запуск теста и просмотр результатов


Чтобы проверить, что наш тест работает так как нужно очистим очереди сообщений, с которыми будем работать. В ту очередь, из которой тест будет читать сообщения, поместим тестовое сообщение с содержимым “Hello, Habrahabr!”



Теперь запустим наш сценарий.
Видим, что тестовой сообщение успешно помещено в очередь QUEUE.IN.



Также, успешно вычитано сообщение из очереди QUEUE.OUT.



Заключение


Основной замысел статьи, показать, как JMeter может работать с протоколом MQ. В остальном, сценарии тестирования могут модифицироваться (работа с Assert’ами, переменными, чтение из файла и т.д.) так же, как при функциональном тестировании сервисов работающих по другим протоколам (например HTTP).
Tags:
Hubs:
+3
Comments1

Articles