<!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;
            2019
            , 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>
