Building a JMS Testing Plan - Apache JMeter
JMeter has three types of JMS samplers, that support two types of JMS testing, and in this article I will cover them.
The first thing that needs to be done is provide JMeter with a jar file containing the classes of which it will use to communicate with the MQ server. For this example I am using an ActiveMQ 5.9 as the MQ server, so in this case what I need to do is download the correct jar, and put it in JMeter’s lib directory, just like any other plugin. ActiveMQ does not have any backward compatibility, so in this case, I will have to download the exact version of the jar file (activemq-all-5.9.0.jar).
After setting the correct jar we can start JMeter, and set the JMS samplers.
JMS Point-to-Point sampler
This sampler provides a simple solution for Point-to-Point testing for Queues.
So just create a new Thread Group, and add a JMS Point-to-Point sampler
Most of the textboxes are well documented in JMeter’s community guide (https://jmeter.apache.org/usermanual/build-jms-point-to-point-test-plan.html). I will just elaborate on few issues.
After setting all of the values for the connection (Provider URL, Queue Connection Factory, Initial context Factory), as described in the documentation, you will have to configure the queues that the sampler will test. This is done using the JNDI properties, so what you need to do is create a JNDI property for each of the queues (response/request). In my ActiveMQ setup I have two queues:
For these queues I configured two JNDI properties like so:
After configuring the JNDI properties for the queues, it needs to be set in the JMS resources panel:
Also, in my MQ setup, an agent who is trying to connect to any JMS queue has to provide a username and password. In order to send the credentials to the MQ server, you need to add two new JNDI properties:
And this is how it needs to be setup in the JNDI properties panel:
JMS Subscriber and JMS Publisher
The second way to test JMS queues is using the combination of JMS publisher and JMS subscriber samplers. These samplers, as their names suggests, are suitable for a Publisher-Subscriber scenario. Although using these samplers is better suited to test Topics, it’s also possible to test Queues using it.
Most of the configuration is well documented in JMeter’s documentation ( http://jmeter.apache.org/usermanual/component_reference.html#JMS_Subscriber for JMS subscriber, and http://jmeter.apache.org/usermanual/component_reference.html#JMS_Publisher for the publisher).
The only thing missing in the documentation is an explanation of how to configure the samplers to work with Queues or Topics. For both samplers the configuration is the same: In the 'Destination' text box, you need to add the correct prefix to the queue/topic name. If you want to subscribe to a Topic, than the prefix is: dynamicTopics/ and if it's a queue use dynamicQueues/.
For a queue:
For a topic:
For the JMS Subscriber sampler there is another step for the Queue/Topic configuration. We will need to set the function which the JMS subscriber uses. This is configured in the Client section:
For a queue: Use MessageConsumer.receive()
For a topic: Use Messagelistener.onMessage()
After setting the correct sampler for the test case, all you have to do is just save the script, and test on your local machine, and afterwards upload it to BlazeMeter to run with thousands of users.