<!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) Point-to-Point 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-ws-test-plan.html">&lt; Prev</a>
</li>
<li>
<a href="../index.html">Index</a>
</li>
<li>
<a href="build-jms-topic-test-plan.html">Next &gt;</a>
</li>
</ul>
<div class="section">
<h1 id="building">10. Building a JMS Point-to-Point Test Plan<a class="sectionlink" href="#building" title="Link to here">&para;</a>
</h1>

        
<div class="clear"></div>
<div class="note">
            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.
            See <a href="get-started.html#libraries_activemq">Getting Started</a> for 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 a JMS Point-to-Point messaging solution.
The setup of the test is 1 threadgroup with 5 threads sending 4 messages each through a request queue.
A fixed reply queue will be used for monitoring the reply 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_Point-to-Point">JMS Point-to-Point</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.  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_threadgroup">10.1 Adding a Thread Group<a class="sectionlink" href="#adding_threadgroup" title="Link to here">&para;</a>
</h1>
            
<p>The first step you want to do with every JMeter Test Plan is to 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 the 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 10.1
below)</p>

            
<figure>
<a href="../images/screenshots/webtest/threadgroup.png"><img src="../images/screenshots/webtest/threadgroup.png" width="" height="" alt="
Figure 10.1. Thread Group with Default Values"></a>
<figcaption>
Figure 10.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">Point-to-Point</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, leave set the value to 0
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, then JMeter will immediately start all of your users.</p>

            
<p>Clear the checkbox labeled "<span class="code">Forever</span>", and enter a value of <span class="code">4</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>

            
<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_point_to_point_sampler">10.2 Adding JMS Point-to-Point Sampler<a class="sectionlink" href="#adding_point_to_point_sampler" title="Link to here">&para;</a>
</h1>

            
<p>Start by adding the sampler <a href="../usermanual/component_reference.html#JMS_Point-to-Point">JMS Point-to-Point</a>
to the Point-to-Point element
(<span class="menuchoice"><span class="guimenuitem">Add</span>&nbsp;&rarr;&nbsp;<span class="guimenuitem">Sampler</span>&nbsp;&rarr;&nbsp;<span class="guimenuitem">JMS Point-to-Point</span></span>).
Then, select the JMS Point-to-Point sampler element in the tree.
 In building the example a configuration will be provided that works with ActiveMQ 3.0.
            </p>
            
<p>
                
<table>
                    
<thead></thead>
                    
<tr>
                        
<th>Name</th>
                        <th>Value</th>
                        <th>Description</th>
                    
</tr>
                    
<tbody></tbody>
                    
<tr>
                        
<th colspan="3">JMS Resources</th>
                    
</tr>
                    
<tr>
                        
<td colspan="1">QueueConnectionFactory</td>
                        <td><span class="code">ConnectionFactory</span></td>
                        <td> This is the default JNDI entry for the connection factory within ActiveMQ.</td>
                    
</tr>
                    
<tr>
                        
<td>JNDI Name Request Queue</td>
                        <td><span class="code">Q.REQ</span></td>
                        <td>This is equal to the JNDI name defined in the JNDI properties.</td>
                    
</tr>
                    
<tr>
                        
<td>JNDI Name Reply Queue</td>
                        <td><span class="code">Q.RPL</span></td>
                        <td>This is equal to the JNDI name defined in the JNDI properties.</td>
                    
</tr>
                    
<tr>
                        
<th colspan="3">Message Properties</th>
                    
</tr>
                    
<tr>
                        
<td colspan="1">Communication Style</td>
                        <td><span class="code">Request Response</span></td>
                        <td>This means that you need at least a service running outside of JMeter and that will respond to the requests.
                        This service must listen to the Request Queue and send messages to the queue referenced by the <span class="code">message.getJMSReplyTo()</span></td>
                    
</tr>
                    
<tr>
                        
<td>Content</td>
                        <td><span class="code">test</span></td>
                        <td>This is just the content of the message.</td>
                    
</tr>
                    
<tr>
                        
<td>JMS Properties</td>
                        <td></td>
                        <td>Nothing needed for ActiveMQ.</td>
                    
</tr>
                    
<tr>
                         
<th colspan="3">JNDI Properties</th>
                     
</tr>
                     
<tr>
                        
<td colspan="1">InitialContextFactory</td>
                        <td><span class="code">org.apache.activemq.jndi.ActiveMQInitialContextFactory</span></td>
                        <td>The standard InitialContextFactory for ActiveMQ</td>
                    
</tr>
                    
<tr>
                        
<th colspan="3"> Properties</th>
                    
</tr>
                    
<tr>
                        
<td colspan="1"><span class="code">queue.Q.REQ</span></td>
                        <td><span class="code">example.A</span></td>
                        <td>This defines a JNDI name <span class="code">Q.REQ</span> for the request queue that points to the queue <span class="code">example.A</span></td>
                    
</tr>
                    
<tr>
                        
<td colspan="1"><span class="code">queue.Q.RPL</span></td>
                        <td><span class="code">example.B</span></td>
                        <td>This defines a JNDI name <span class="code">Q.RPL</span> for the reply queue that points to the queue <span class="code">example.B</span></td>
                    
</tr>
                    
<tr>
                        
<th colspan="3">Provider URL</th>
                    
</tr>
                    
<tr>
                        
<td colspan="1">Provider URL</td>
                        <td><span class="code">tcp://localhost:61616</span></td>
                        <td>This defines the URL of the ActiveMQ messaging system.</td>
                    
</tr>
                
</table>
            
</p>

        
</div>
<div class="section">
<h1 id="adding_listener">10.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 JMS requests in a file and presenting
a visual model of the data.
            </p>

            
<p>Select the Thread Group 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 10.2. Graph Results Listener"></a>
<figcaption>
Figure 10.2. Graph Results Listener</figcaption>
</figure>

        
</div>
<ul class="pagelinks">
<li>
<a href="build-ws-test-plan.html">&lt; Prev</a>
</li>
<li>
<a href="../index.html">Index</a>
</li>
<li>
<a href="build-jms-topic-test-plan.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;
            2021
            , 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>
