в JMeter, как отправить 4-байтовое сообщение издателю JMS

Не думайте, что об этом спрашивали конкретно.

Мне нужно запустить тест производительности в приложении, которое использует тему ActiveMQ. Сэмплер должен опубликовать 4 байта данных в теме, которые обычно имеют формат (если вы посмотрите на шестнадцатеричное значение) 0x006403D6.

Если вы переведете их в десятичные числа, они будут

0x03D6 = 00000011 11010110 ==> 982 ==> 03,D6 ==> 03, 214 ==> 3,214 0x0064 = 00000000 01100100 ==> 100 ==> 00,64 ==> 00, 100 ==> 0,100

Итак, в приведенном выше примере 4 байта будут [0,100,3,214].

Для этого я использовал JMSPublisher.

Ниже представлена ​​конфигурация:

введите описание изображения здесь

Поскольку мне нужно отправить поток байтов, я решил использовать ByteMessage из файла. введите описание изображения здесь

Я пробовал выше с разным содержимым файла в конфигурации. Но non дал бы мне [0,100,3,214].

Похоже, JMeter преобразует текст, символы в байтовые значения. Итак, если у меня есть пустой файл, тема будет иметь значение 0, и приложение будет рассматривать его как [0,0,0,0] (приложение рассматривает только первые 4 байта)

Если бы у меня был ???? в текстовом файле я получаю [63,63,63,63] (как? ==> 00111111 ==> 63 в десятичном формате). Но если мне нужно получить первый байт 0, я не смогу это пройти? Поскольку я не нашел символа, представляющего 0.

Может быть, есть лучший способ сделать это. Пожалуйста, порекомендуйте ?


person Asanke    schedule 09.07.2018    source источник


Ответы (1)


Изучение JMS Sampler JavaDoc, функция setContent() принимает только строку, поэтому нет возможности передать ей байты, поскольку JMeter будет рассматривать их как простую строку.

Однако согласно документации издателя JMS вы можете отправлять все, что захотите < strong>, если объект сериализован XStream

Сообщение Object реализовано и работает следующим образом:

  • Поместите JAR, содержащий ваш объект и его зависимости, в папку jmeter_home / lib /

  • Сериализуйте свой объект как XML с помощью XStream

  • Либо поместите результат в файл с суффиксом .txt или .obj, либо поместите содержимое XML непосредственно в текстовую область

Обратите внимание, что если сообщение находится в файле, замена свойств не произойдет, пока это произойдет, если вы используете текстовую область.

Также имейте в виду, что вы всегда можете переключиться на JSR223 Sampler и использовать ByteMessage класс из Groovy код.

person Dmitri T    schedule 09.07.2018
comment
Спасибо .... Я видел этот ответ в stackoverflow.com/questions/50359111/. Но не уверен, что мне нужно сделать в вышеуказанных шагах. В моем случае выше, если мне нужно отправить 4 байта в тему на Java, я бы сделал javax.jms.MessageProducer..send (javax.jms.BytesMessage). Означает ли это, что я должен поместить javax.jms. * Jar-файлы в папку jmeter_home / lib /? Если это так, мне нужно сериализовать javax.jms.BytesMessage с помощью XStream, сгенерировать xml и поместить в текстовую область? - person Asanke; 09.07.2018
comment
Я попытался сериализовать javax.jms.BytesMessage с помощью XStream и сгенерировать xml. Результат оказался не таким, как я ожидал. Это сгенерировало <org.apache.activemq.command.ActiveMQBytesMessage> - person Asanke; 09.07.2018
comment
Вам необходимо сериализовать свои 4 байта как XML и вставить этот XML в текстовую область. - person Dmitri T; 09.07.2018
comment
Спасибо @ dmitri-t. Это тоже не сработало. Когда я конвертирую свои 4 байта, это выглядит так. <byte-array>AGQD1g==</byte-array>, когда я вставляю это в текстовую область и публикую JMS, моему приложению это не понравилось. Там написано org.apache.activemq.command.ActiveMQObjectMessage cannot be cast to javax.jms.BytesMessage. Итак, как я уже сказал ранее, мне нужно отправить сообщение javax.jms.BytesMessage. Это как-то связано с фабрикой начального контекста? . Я использую там org.apache.activemq.jndi.ActiveMQInitialContextFactory .... - person Asanke; 13.07.2018
comment
у вас есть образец кода для сериализации ваших 4 байтов как XML, который я могу использовать? - person Asanke; 02.08.2018
comment
Я понял это на сайте x-stream.github.io/converters.html что, когда вы сериализуете byte [] из xstream, вы получаете сглаживание как <byte-array>AHiEFiEABQ==</byte-array>. В моем случае я получил <byte-array>AGQD1g==</byte-array>. Но мое приложение не может преобразовать сообщение, поступающее из ActiveMQ, как javax,jms.ByteMessage .... Я вижу org.apache.activemq.command.ActiveMQObjectMessage cannot be cast to javax.jms.BytesMessage в журнале. Как убедиться, что мы отправили javax.jms.ByteMessage? - person Asanke; 02.08.2018