<!DOCTYPE html SYSTEM "about:legacy-compat">
<html lang="en">
    <head>
        <META http-equiv="Content-Type" content="text/html; charset=iso-8859-15">
        <title>Apache JMeter
          -
          User's Manual: Building a JMS (Java Messaging Service) Test Plan</title>
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <link href="https://fonts.googleapis.com/css?family=Merriweather:400normal" rel="stylesheet" type="text/css">
        <link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.6.1/css/font-awesome.min.css" rel="stylesheet" type="text/css">
        <link rel="stylesheet" type="text/css" href="../css/new-style.css">
        <link rel="apple-touch-icon-precomposed" href="../images/apple-touch-icon.png">
        <link rel="icon" href="../images/favicon.png">
        <meta name="msapplication-TileColor" content="#ffffff">
        <meta name="msapplication-TileImage" content="../images/mstile-144x144.png">
        <meta name="theme-color" content="#ffffff">
    </head>
    <body role="document">
        <a href="#content" class="hidden">Main content</a>
        <div class="header">
            <!--
            APACHE LOGO
          -->
            <div>
                <a href="https://www.apache.org"><img title="Apache Software Foundation" class="asf-logo logo" src="../images/asf-logo.svg" alt="Logo ASF"></a>
            </div>
            <!--
              PROJECT LOGO
            -->
            <div>
                <a href="https://jmeter.apache.org/"><img class="logo" src="../images/logo.svg" alt="Apache JMeter"></a>
            </div>
            <div class="banner">
                <a href="https://www.apache.org/events/current-event.html"><img src="https://www.apache.org/events/current-event-234x60.png" alt="Current Apache event teaser"></a>
                <div class="clear"></div>
            </div>
        </div>
        <div class="nav">
            <ul class="menu">
                <li onClick="return true">
                    <div class="menu-title">About</div>
                    <ul>
                        <li>
                            <a href="../index.html">Overview</a>
                        </li>
                        <li>
                            <a href="https://www.apache.org/licenses/">License</a>
                        </li>
                    </ul>
                </li>
            </ul>
            <ul class="menu">
                <li onClick="return true">
                    <div class="menu-title">Download</div>
                    <ul>
                        <li>
                            <a href="../download_jmeter.cgi">Download Releases</a>
                        </li>
                        <li>
                            <a href="../changes.html">Release Notes</a>
                        </li>
                    </ul>
                </li>
            </ul>
            <ul class="menu">
                <li onClick="return true">
                    <div class="menu-title">Documentation</div>
                    <ul>
                        <li>
                            <a href="../usermanual/get-started.html">Get Started</a>
                        </li>
                        <li>
                            <a href="../usermanual/index.html">User Manual</a>
                        </li>
                        <li>
                            <a href="../usermanual/best-practices.html">Best Practices</a>
                        </li>
                        <li>
                            <a href="../usermanual/component_reference.html">Component Reference</a>
                        </li>
                        <li>
                            <a href="../usermanual/functions.html">Functions Reference</a>
                        </li>
                        <li>
                            <a href="../usermanual/properties_reference.html">Properties Reference</a>
                        </li>
                        <li>
                            <a href="../changes_history.html">Change History</a>
                        </li>
                        <li>
                            <a href="../api/index.html">Javadocs</a>
                        </li>
                        <li>
                            <a href="https://cwiki.apache.org/confluence/display/JMETER/Home">JMeter Wiki</a>
                        </li>
                        <li>
                            <a href="https://cwiki.apache.org/confluence/display/JMETER/JMeterFAQ">FAQ (Wiki)</a>
                        </li>
                    </ul>
                </li>
            </ul>
            <ul class="menu">
                <li onClick="return true">
                    <div class="menu-title">Tutorials</div>
                    <ul>
                        <li>
                            <a href="../usermanual/jmeter_distributed_testing_step_by_step.html">Distributed Testing</a>
                        </li>
                        <li>
                            <a href="../usermanual/jmeter_proxy_step_by_step.html">Recording Tests</a>
                        </li>
                        <li>
                            <a href="../usermanual/junitsampler_tutorial.html">JUnit Sampler</a>
                        </li>
                        <li>
                            <a href="../usermanual/jmeter_accesslog_sampler_step_by_step.html">Access Log Sampler</a>
                        </li>
                        <li>
                            <a href="../usermanual/jmeter_tutorial.html">Extending JMeter</a>
                        </li>
                    </ul>
                </li>
            </ul>
            <ul class="menu">
                <li onClick="return true">
                    <div class="menu-title">Community</div>
                    <ul>
                        <li>
                            <a href="../issues.html">Issue Tracking</a>
                        </li>
                        <li>
                            <a href="https://www.apache.org/security/">Security</a>
                        </li>
                        <li>
                            <a href="../mail.html">Mailing Lists</a>
                        </li>
                        <li>
                            <a href="../svnindex.html">Source Repositories</a>
                        </li>
                        <li>
                            <a href="../building.html">Building and Contributing</a>
                        </li>
                        <li>
                            <a href="https://projects.apache.org/project.html?jmeter">Project info at Apache</a>
                        </li>
                        <li>
                            <a href="https://cwiki.apache.org/confluence/display/JMETER/JMeterCommitters">Contributors</a>
                        </li>
                    </ul>
                </li>
            </ul>
            <ul class="menu">
                <li onClick="return true">
                    <div class="menu-title">Foundation</div>
                    <ul>
                        <li>
                            <a href="https://www.apache.org/">The Apache Software Foundation (ASF)</a>
                        </li>
                        <li>
                            <a href="https://www.apache.org/foundation/getinvolved.html">Get Involved in the ASF</a>
                        </li>
                        <li>
                            <a href="https://www.apache.org/foundation/sponsorship.html">Sponsorship</a>
                        </li>
                        <li>
                            <a href="https://www.apache.org/foundation/thanks.html">Thanks</a>
                        </li>
                    </ul>
                </li>
            </ul>
        </div>
        <div class="main" id="content">
            <div class="social-media">
                <ul class="social-media-links">
                    <li class="twitter">
                        <a href="https://twitter.com/ApacheJMeter" title="Follow us on Twitter"><i class="fa fa-twitter" aria-hidden="true"></i>Twitter</a>
                    </li>
                    <li class="github">
                        <a href="https://github.com/apache/jmeter" title="Fork us on github"><i class="fa fa-github" aria-hidden="true"></i>github</a>
                    </li>
                </ul>
            </div>
            <ul class="pagelinks">
                <li>
                    <a href="build-jms-point-to-point-test-plan.html">&lt; Prev</a>
                </li>
                <li>
                    <a href="../index.html">Index</a>
                </li>
                <li>
                    <a href="listeners.html">Next &gt;</a>
                </li>
            </ul>
            <div class="section">
                <h1 id="building">
                    11. Building a JMS Topic Test Plan<a class="sectionlink" href="#building" title="Link to here">&para;</a>
                </h1>
                
                <div class="clear"></div>
                <div class="note">
                    JMS requires some optional jars to be downloaded. Please refer to <a href="get-started.html">Getting Started</a> for full details.

                </div>
                <div class="clear"></div>
                
                <p>
                    In this section, you will learn how to create a
<a href="build-test-plan.html">Test Plan</a> to test JMS Providers. You will
create five subscribers and one publisher. You will create 2 thread groups and set
each one to 10 iterations. The total messages is (6 threads) x (1 message) x
(repeat 10 times) = 60 messages. To construct the Test Plan, you will use the
following elements:
<a href="test_plan.html#thread_group">Thread Group</a>,
<a href="../usermanual/component_reference.html#JMS_Publisher">JMS Publisher</a>,
<a href="../usermanual/component_reference.html#JMS_Subscriber">JMS Subscriber</a>, and
<a href="../usermanual/component_reference.html#Graph_Results">Graph Results</a>.
                </p>
                
                <p>
                    General notes on JMS: There are currently two JMS samplers. One uses JMS topics
and the other uses queues. Topic messages are commonly known as pub/sub messaging.
Topic messaging is generally used in cases where a message is published by a producer and
consumed by multiple subscribers.  Queue messaging is generally used for transactions
where the sender expects a response.  Messaging systems are quite different from
normal HTTP requests. In HTTP, a single user sends a request and gets a response.
Messaging system can work in synchronous and asynchronous mode.  A JMS sampler needs
the JMS implementation jar files; for example, from Apache ActiveMQ.
See <a href="get-started.html#libraries_activemq">here</a> for the list of jars provided by ActiveMQ.
                </p>
                
            </div>
            <div class="section">
                <h1 id="adding_users">
                    11.1 Adding Users<a class="sectionlink" href="#adding_users" title="Link to here">&para;</a>
                </h1>
                
                <p>
                    The first step is add a <a href="test_plan.html#thread_group">Thread Group</a>
 element.  The Thread Group tells JMeter the number of users you want to simulate,
 how often the users should send requests, and how many requests they should
send.
                </p>
                
                <p>
                    Go ahead and add the ThreadGroup element by first selecting the Test Plan,
clicking your right mouse button to get the <span class="menuchoice"><span class="guimenuitem">Add</span></span> menu, and then select
<span class="menuchoice"><span class="guimenuitem">Add</span>&nbsp;&rarr;&nbsp;<span class="guimenuitem">ThreadGroup</span></span>.
                </p>
                
                <p>You should now see the Thread Group element under Test Plan.  If you do not
see the element, then "expand" the Test Plan tree by clicking on the
Test Plan element.</p>
                
                <p>Next, you need to modify the default properties.  Select the Thread Group element
in the tree, if you have not already selected it. You should now see the Thread
Group Control Panel in the right section of the JMeter window (see Figure 11.1
below)</p>
                
                <figure>
                    <a href="../images/screenshots/webtest/threadgroup.png"><img src="../images/screenshots/webtest/threadgroup.png" width="" height="" alt="
Figure 11.1. Thread Group with Default Values"></a>
                    <figcaption>
Figure 11.1. Thread Group with Default Values</figcaption>
                </figure>
                
                <p>
                    Start by providing a more descriptive name for our Thread Group. In the name
field, enter <span class="code">Subscribers</span>.
                </p>
                
                <p>
                    Next, increase the number of users (called threads) to <span class="code">5</span>.
                </p>
                
                <p>
                    In the next field, the Ramp-Up Period, set the value to <span class="code">0</span>
seconds.  This property tells JMeter how long to delay between starting each
user. For example, if you enter a Ramp-Up Period of 5 seconds, JMeter will
finish starting all of your users by the end of the 5 seconds.  So, if we have
5 users and a 5 second Ramp-Up Period, then the delay between starting users
would be 1 second (5 users / 5 seconds = 1 user per second).  If you set the
value to 0, JMeter will immediately start all users.
                </p>
                
                <p>
                    Clear the checkbox labeled "<span class="code">Forever</span>", and enter a value of <span class="code">10</span> in the Loop
Count field.  This property tells JMeter how many times to repeat your test.
If you enter a loop count value of <span class="code">0</span>, then JMeter will run your test only
once. To have JMeter repeatedly run your Test Plan, select the <span class="code">Forever</span>
checkbox.
                </p>
                
                <p>
                    Repeat the process and add another thread group. For the second thread
group, enter "<span class="code">Publisher</span>" in the name field, set the number of threads to <span class="code">1</span>,
and set the iteration to <span class="code">10</span>.

                </p>
                
                <div class="clear"></div>
                <div class="note">In most applications, you have to manually accept
changes you make in a Control Panel.  However, in JMeter, the Control Panel
automatically accepts your changes as you make them.  If you change the
name of an element, the tree will be updated with the new text after you
leave the Control Panel (for example, when selecting another tree element).</div>
                <div class="clear"></div>
                
            </div>
            <div class="section">
                <h1 id="adding_subscriber_publisher">
                    11.2 Adding JMS Subscriber and Publisher<a class="sectionlink" href="#adding_subscriber_publisher" title="Link to here">&para;</a>
                </h1>
                
                <p>
                    Make sure the required jar files are in JMeter's <span class="code">lib</span> directory. If they are
not, shutdown JMeter, copy the jar files over and restart JMeter.
                </p>
                
                <p>
                    Start by adding the sampler <a href="../usermanual/component_reference.html#JMS_Subscriber">JMS Subscriber</a>
to the Subscribers element
(<span class="menuchoice"><span class="guimenuitem">Add</span>&nbsp;&rarr;&nbsp;<span class="guimenuitem">Sampler</span>&nbsp;&rarr;&nbsp;<span class="guimenuitem">JMS Subscriber</span></span>).
Then, select the JMS Subscriber element in the tree and edit the following properties:


                    <ol>
                        
                        <li>
                            Change the Name field to "<span class="code">Sample Subscriber</span>"
                        </li>
                        
                        <li>
                            If the JMS provider uses the <span class="code">jndi.properties</span> file, check the box
                        </li>
                        
                        <li>
                            Enter the name of the InitialContextFactory class. For example, with ActiveMQ 5.4, the value is "<span class="code">org.apache.activemq.jndi.ActiveMQInitialContextFactory</span>"
                        </li>
                        
                        <li>
                            Enter the provider URL. This is the URL for the JNDI server, if there is one. For example, with ActiveMQ 5.4 on local machine with default port, the value is "<span class="code">tcp://localhost:61616</span>"
                        </li>
                        
                        <li>
                            Enter the name of the connection factory. Please refer to the documentation
of the JMS provider for the information. For ActiveMQ, the default is "<span class="code">ConnectionFactory</span>"
                        </li>
                        
                        <li>
                            Enter the name of the message topic. For ActiveMQ Dynamic Topics (create topics dynamically), example value is "<span class="code">dynamicTopics/MyStaticTopic1</span>"

                            <div class="clear"></div>
                            <div class="note">Note: Setup at startup mean that JMeter starting to listen on the Destination at beginning of test without name change possibility.
Setup on Each sample mean that JMeter (re)starting to listen before run each JMS Subscriber sample,
this last option permit to have Destination name with some JMeter variables
</div>
                            <div class="clear"></div>
                        </li>
                        
                        <li>
                            If the JMS provider requires authentication, check "<span class="code">required</span>" and enter the
username and password. For example, Orion JMS requires authentication, while ActiveMQ
and MQSeries does not
                        </li>
                        
                        <li>
                            Enter <span class="code">10</span> in "<span class="code">Number of samples to aggregate</span>". For performance reasons, the sampler
will aggregate messages, since small messages will arrive very quickly. If the sampler
didn't aggregate the messages, JMeter wouldn't be able to keep up.
                        </li>
                        
                        <li>If you want to read the response, check the box</li>
                        
                        <li>There are two client implementations for subscribers. If the JMS provider
exhibits zombie threads with one client, try the other.</li>
                        
                    </ol>
                    
                </p>
                
                <figure>
                    <a href="../images/screenshots/jms/jms_sub.png"><img src="../images/screenshots/jms/jms_sub.png" width="718" height="526" alt="
Figure 11.2. JMS Subscriber"></a>
                    <figcaption>
Figure 11.2. JMS Subscriber</figcaption>
                </figure>
                
                <p>
                    Next add the sampler <a href="../usermanual/component_reference.html#JMS_Publisher">JMS Publisher</a>
to the Publisher element
(<span class="menuchoice"><span class="guimenuitem">Add</span>&nbsp;&rarr;&nbsp;<span class="guimenuitem">Sampler</span>&nbsp;&rarr;&nbsp;<span class="guimenuitem">JMS Publisher</span></span>).
Then, select the JMS Publisher element in the tree and edit the following properties:

                </p>
                
                <ol>
                    
                    <li>
                        Change the Name field to "<span class="code">Sample Publisher</span>".
                    </li>
                    
                    <li>
                        If the JMS provider uses the <span class="code">jndi.properties</span> file, check the box
                    </li>
                    
                    <li>
                        Enter the name of the InitialContextFactory class. For example, with ActiveMQ 5.4, the value is "<span class="code">org.apache.activemq.jndi.ActiveMQInitialContextFactory</span>"
                    </li>
                    
                    <li>
                        Enter the provider URL. This is the URL for the JNDI server, if there is one. For example, with ActiveMQ 5.4 on local machine with default port, the value is "<span class="code">tcp://localhost:61616</span>"
                    </li>
                    
                    <li>
                        Enter the name of the connection factory. Please refer to the documentation
of the JMS provider for the information. For ActiveMQ, the default is "<span class="code">ConnectionFactory</span>"
                    </li>
                    
                    <li>
                        Enter the name of the message topic. For ActiveMQ Dynamic Topics (create topics dynamically), example value is "<span class="code">dynamicTopics/MyStaticTopic1</span>".

                        <div class="clear"></div>
                        <div class="note">Note: Setup at startup mean that JMeter starting connection with the Destination at beginning of test without name change possibility.
Setup on Each sample mean that JMeter (re)starting the connection before run each JMS Publisher sample,
this last option permit to have Destination name with some JMeter variables
</div>
                        <div class="clear"></div>
                    </li>
                    
                    <li>
                        If the JMS provider requires authentication, check "<span class="code">required</span>" and enter the
username and password. For example, Orion JMS requires authentication, while ActiveMQ
and MQSeries does not
                    </li>
                    
                    <li>
                        Enter <span class="code">10</span> in "<span class="code">Number of samples to aggregate</span>". For performance reasons, the sampler
will aggregate messages, since small messages will arrive very quickly. If the sampler
didn't aggregate the messages, JMeter wouldn't be able to keep up.
                    </li>
                    
                    <li>Select the appropriate configuration for getting the message to publish. If you
want the sampler to randomly select the message, place the messages in a directory
and select the directory using browse.</li>
                    
                    <li>Select the message type. If the message is in object format or map message, make sure the
message is generated correctly.</li>
                    
                </ol>
                
                <p></p>
                
                <figure>
                    <a href="../images/screenshots/jms/jms_pub.png"><img src="../images/screenshots/jms/jms_pub.png" width="720" height="652" alt="
Figure 11.3. JMS Publisher"></a>
                    <figcaption>
Figure 11.3. JMS Publisher</figcaption>
                </figure>
                
            </div>
            <div class="section">
                <h1 id="adding_listener">
                    11.3 Adding a Listener to View Store the Test Results<a class="sectionlink" href="#adding_listener" title="Link to here">&para;</a>
                </h1>
                
                <p>
                    The final element you need to add to your Test Plan is a
 <a href="component_reference.html#listeners">Listener</a>. This element is
responsible for storing all of the results of your HTTP requests in a file and presenting
a visual model of the data.
                </p>
                
                <p>
                    Select the Test Plan element and add a <a href="../usermanual/component_reference.html#Graph_Results">Graph Results</a> listener
(<span class="menuchoice"><span class="guimenuitem">Add</span>&nbsp;&rarr;&nbsp;<span class="guimenuitem">Listener</span>&nbsp;&rarr;&nbsp;<span class="guimenuitem">Graph Results</span></span>).  Next, you need to specify a directory and filename of the
output file.  You can either type it into the filename field, or select the
Browse button and browse to a directory and then enter a filename.
                </p>
                
                <figure>
                    <a href="../images/screenshots/graph_results.png"><img src="../images/screenshots/graph_results.png" width="915" height="686" alt="
Figure 11.4. Graph Results Listener"></a>
                    <figcaption>
Figure 11.4. Graph Results Listener</figcaption>
                </figure>
                
            </div>
            <ul class="pagelinks">
                <li>
                    <a href="build-jms-point-to-point-test-plan.html">&lt; Prev</a>
                </li>
                <li>
                    <a href="../index.html">Index</a>
                </li>
                <li>
                    <a href="listeners.html">Next &gt;</a>
                </li>
            </ul>
            <div class="share-links">
                      Share this page:
      
                <ul>
                    <li class="fb">
                        <a data-social-url="https://facebook.com/sharer/sharer.php?u=" title="Share on facebook"><i class="fa fa-facebook" aria-hidden="true"></i>share</a>
                    </li>
                    <li class="twitter">
                        <a data-social-url="https://twitter.com/intent/tweet?url=" title="Tweet on twitter"><i class="fa fa-twitter" aria-hidden="true"></i>tweet</a>
                    </li>
                </ul>
            </div>
            <a href="#top" id="topButton">Go to top</a>
        </div>
        <div class="footer">
            <div class="copyright">
            Copyright &copy;
            1999 &ndash;
            2022
            , Apache Software Foundation
          </div>
            <div class="trademarks">Apache, Apache JMeter, JMeter, the Apache
            feather, and the Apache JMeter logo are
            trademarks of the
            Apache Software Foundation.
          </div>
        </div>
        <script>(function(){
            "use strict";
            // enable 'go to top' button functionality
            document.addEventListener('scroll', function() {
                if (document.body.scrollTop > 500 || document.documentElement.scrollTop > 500) {
                    document.getElementById("topButton").style.display = "block";
                } else {
                    document.getElementById("topButton").style.display = "none";
                }
            });
            // fill in the current location into social links on this page.
            var as = document.getElementsByTagName('a');
            var loc = document.location.href;
            if (!loc.toLowerCase().startsWith('http')) {
                return;
            }
            for (var i=0; i<as.length; i++) {
                var href = as[i].getAttribute('data-social-url');
                if (href !== null) {
                    as[i].href = href + encodeURIComponent(loc);
                }
            }
        })();</script>
    </body>
</html>
