<!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: Hints and Tips</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="regular_expressions.html">&lt; Prev</a>
</li>
<li>
<a href="../index.html">Index</a>
</li>
<li>
<a href="glossary.html">Next &gt;</a>
</li>
</ul>
<div class="section">
<h1 id="hints">22. Hints and Tips<a class="sectionlink" href="#hints" title="Link to here">&para;</a>
</h1>

<p>
This section is a collection of various hints and tips that have been suggested by various questions on the JMeter User list.
If you don't find what you are looking for here, please check the <a href="https://cwiki.apache.org/confluence/display/JMETER/Home">JMeter Wiki</a>.
Also, try search the JMeter User list; someone may well have already provided a solution.
</p>

<div class="subsection">
<h2 id="variable_and_threads">22.1 Passing variables between threads<a class="sectionlink" href="#variable_and_threads" title="Link to here">&para;</a>
</h2>

<p>
JMeter variables have thread scope. This is deliberate, so that threads can act independently.
However sometimes there is a need to pass variables between different threads, in the same or different Thread Groups.
</p>

<p>
One way to do this is to use a property instead.
Properties are shared between all JMeter threads, so if one thread <a href="functions.html#__setProperty">sets a property</a>,
another thread can <a href="functions.html#__P">read</a> the updated value.
</p>

<p>
If there is a lot of information that needs to be passed between threads, then consider using a file.
For example you could use the <a href="component_reference.html#Save_Responses_to_a_file">Save Responses to a file</a>
listener or perhaps a BeanShell PostProcessor in one thread, and read the file using the HTTP Sampler "<span class="code">file:</span>" protocol,
and extract the information using a PostProcessor or BeanShell element.
</p>

<p>
If you can derive the data before starting the test, then it may well be better to store it in a file,
read it using CSV Dataset.
</p>

</div>


<div class="subsection">
<h2 id="debug_logging">22.2 Enabling Debug logging<a class="sectionlink" href="#debug_logging" title="Link to here">&para;</a>
</h2>

<p>
Most test elements include debug logging. If running a test plan from the GUI,
select the test element and use the Help Menu to enable or disable logging.
The Help Menu also has an option to display the GUI and test element class names.
You can use these to determine the correct property setting to change the logging level.
</p>


<p>
It is sometimes very useful to see Log messages to debug dynamic scripting languages like BeanShell or
Apache Groovy used in JMeter.
You can view log messages directly in JMeter GUI, to do so:</p>

<ul>

<li>use menu <span class="menuchoice"><span class="guimenuitem">Options</span>&nbsp;&rarr;&nbsp;<span class="guimenuitem">Log Viewer</span></span>,
a log console will appear at the bottom of the interface</li>

<li>Or click on the Warning icon in the upper right corner of GUI</li>

</ul>
By default this log console is disabled, you can enable it by changing in <span class="code">jmeter.properties</span>:
<pre class="source">jmeter.loggerpanel.display=true</pre>

To avoid using too much memory, this components limits the number of characters used by this panel:

<pre class="source">jmeter.loggerpanel.maxlength=80000</pre>

</div>


<div class="subsection">
<h2 id="searching">22.3 Searching<a class="sectionlink" href="#searching" title="Link to here">&para;</a>
</h2>

<p>
It is sometimes hard to find in a Test Plan tree and elements using a variable or containing a certain URL or parameter.
A new feature is now available since 2.6, you can access it in Menu Search.
It provides search with following options:
</p>

<dl>

<dt>
<span class="code">Case sensitive</span>
</dt>
<dd>Makes search case sensitive</dd>

<dt>
<span class="code">Regular exp.</span>
</dt>
<dd>Is text to search a regexp, if so Regexp will be searched in Tree of components, example "<span class="code">\btest\b</span>"
will match any component that contains test in searchable elements of the component</dd>

</dl>


<figure>
<a href="../images/screenshots/searching/raw-search.png"><img src="../images/screenshots/searching/raw-search.png" width="768" height="339" alt="Figure 1 - Search raw text in TreeView"></a>
<figcaption>Figure 1 - Search raw text in TreeView</figcaption>
</figure>

<figure>
<a href="../images/screenshots/searching/raw-search-result.png"><img src="../images/screenshots/searching/raw-search-result.png" width="767" height="316" alt="Figure 2 - Result in TreeView"></a>
<figcaption>Figure 2 - Result in TreeView</figcaption>
</figure>

<figure>
<a href="../images/screenshots/searching/regexp-search.png"><img src="../images/screenshots/searching/regexp-search.png" width="772" height="319" alt="Figure 3 - Search Regexp in TreeView (in this example we search whole word)"></a>
<figcaption>Figure 3 - Search Regexp in TreeView (in this example we search whole word)</figcaption>
</figure>

<figure>
<a href="../images/screenshots/searching/regexp-search-result.png"><img src="../images/screenshots/searching/regexp-search-result.png" width="771" height="302" alt="Figure 4 - Result in TreeView"></a>
<figcaption>Figure 4 - Result in TreeView</figcaption>
</figure>


</div>


<div class="subsection">
<h2 id="hidpi">22.4 JMeter with a HiDPI screen on Linux or Windows<a class="sectionlink" href="#hidpi" title="Link to here">&para;</a>
</h2>

<div class="description">
    
<p>
    The HiDPI mode isn't currently support by the Swing API in Java on Linux, MacOS or Windows. Therefore
    JMeter can be very hard to read with a HiDPI screen (little icons and chars).
    </p>
    
<p>You can improve the JMeter's display on HiDPI screen by changing some properties:</p>
    
<dl>
      
<dt>
<span class="code">jmeter.hidpi.mode</span>
</dt>
      
<dd>set to <span class="code">true</span> to activate a '<em>pseudo</em>'-hidpi mode allowing to increase size of some UI elements</dd>
      
<dt>
<span class="code">jmeter.hidpi.scale.factor</span>
</dt>
      
<dd>set to <span class="code">2.0</span> to scale the size of some UI elements</dd>
      
<dt>
<span class="code">jmeter.toolbar.icons.size</span>
</dt>
      
<dd>with these values: <span class="code">22x22</span> (default size), <span class="code">32x32</span> or <span class="code">48x48</span> (Suggested value for HiDPI)</dd>
      
<dt>
<span class="code">jmeter.tree.icons.size</span>
</dt>
      
<dd>with these values: <span class="code">19x19</span> (default size), <span class="code">24x24</span>, <span class="code">32x32</span> (Suggested value for HiDPI) or <span class="code">48x48</span>
</dd>
    
</dl>
    
<p>Additionally you can increase the font size of the text areas in some elements like JSR223 sampler by changing theses properties:</p>
    
<dl>
      
<dt>
<span class="code">jsyntaxtextarea.font.family</span>
</dt>
      
<dd>set to <span class="code">Hack</span> to activate and to change the font and their size</dd>
      
<dt>
<span class="code">jsyntaxtextarea.font.size</span>
</dt>
      
<dd>set to a greater value, like <span class="code">28</span> (Suggested value for HiDPI)</dd>
    
</dl>
    
<div class="clear"></div>
<div class="note">This is not a full HiDPI support and only affects
      <ul>
        
<li>JMeter tree nodes</li>
        
<li>Icons in the toolbar</li>
        
<li>Tables content</li>
        
<li>Font size into text areas</li>
      
</ul>
    
</div>
<div class="clear"></div>

</div>

</div>


<div class="subsection">
<h2 id="autosave">22.5 Autosave process configuration<a class="sectionlink" href="#autosave" title="Link to here">&para;</a>
</h2>

<div class="description">
    
<p>Since JMeter 3.0, JMeter automatically saves up to ten backups of every saved jmx files. When enabled, just before the jmx file is saved,
    it will be backed up to the <span class="code">${JMETER_HOME}/backups</span> subfolder. Backup files are named after the saved jmx file and assigned a
    version number that is automatically incremented, ex: <span class="code">test-plan-000001.jmx</span>, <span class="code">test-plan-000002.jmx</span>, <span class="code">test-plan-000003.jmx</span>, etc.
    To control auto-backup, add the following properties to <span class="code">user.properties</span>.</p>
    
<dl>
      
<dt>
<span class="code">backup_on_save</span>
</dt>
      
<dd>
       To enable/disable auto-backup, set the following property to <span class="code">true</span>/<span class="code">false</span> (default is <span class="code">true</span>):
       <pre class="source">jmeter.gui.action.save.backup_on_save=false</pre>
      
</dd>
      
<dt>
<span class="code">backup_directory</span>
</dt>
      
<dd>
    The backup directory can also be set to a different location. Setting the <span class="code">jmeter.gui.action.save.backup_directory</span> property
    to the path of the desired directory
    will cause backup files to be stored inside instead of the <span class="code">${JMETER_HOME}/backups</span> folder. If the specified directory does not exist
    it will be created. Leaving this property unset will cause the <span class="code">${JMETER_HOME}/backups</span> folder to be used.
    <pre class="source">jmeter.gui.action.save.backup_directory=/path/to/backups/dir</pre>
      
</dd>
      
<dt>
<span class="code">keep_backup_max_hours</span>
</dt>
      
<dd>
    You can also configure the maximum time (in hours) that backup files should be preserved since the most recent save time.
    By default a zero expiration time is set which instructs JMeter to preserve backup files for ever.
    Use the following property to control max preservation time:
    <pre class="source">jmeter.gui.action.save.keep_backup_max_hours=0</pre>
      
</dd>
      
<dt>
<span class="code">keep_backup_max_count</span>
</dt>
      
<dd>
    You can set the maximum number of backup files that should be preserved. By default <span class="code">10</span> backups will be kept.
    Setting this to zero will cause the backups to never being deleted (unless <span class="code">keep_backup_max_hours</span> is set to a non null value)
    Maximum backup files selection is processed <em>after</em> time expiration selection, so even if you set one year as the expiry time,
    only the <span class="code">keep_backup_max_count</span> most recent backups files will be kept.
    <pre class="source">jmeter.gui.action.save.keep_backup_max_count=10</pre>
      
</dd>
    
</dl>

</div>

</div>

    
<div class="subsection">
<h2 id="component_hotkeys">22.5 Adding Elements with Hotkeys<a class="sectionlink" href="#component_hotkeys" title="Link to here">&para;</a>
</h2>
        
<p>
            When you do intense scripting with JMeter, there is a way to add elements to test plan quickly
            with keyboard shortcuts. Default bindings are:
        </p>
        
<dl>
            
<dt>
                
<span class="keycombo"><span class="keysym">Ctrl</span>&nbsp;+&nbsp;<span class="keysym">0</span></span>
            
</dt>
            
<dd>Thread Group</dd>
            
<dt>
                
<span class="keycombo"><span class="keysym">Ctrl</span>&nbsp;+&nbsp;<span class="keysym">1</span></span>
            
</dt>
            
<dd>HTTP Request</dd>
            
<dt>
                
<span class="keycombo"><span class="keysym">Ctrl</span>&nbsp;+&nbsp;<span class="keysym">2</span></span>
            
</dt>
            
<dd>Regular Expression Extractor</dd>
            
<dt>
                
<span class="keycombo"><span class="keysym">Ctrl</span>&nbsp;+&nbsp;<span class="keysym">3</span></span>
            
</dt>
            
<dd>Response Assertion</dd>
            
<dt>
                
<span class="keycombo"><span class="keysym">Ctrl</span>&nbsp;+&nbsp;<span class="keysym">4</span></span>
            
</dt>
            
<dd>Constant Timer</dd>
            
<dt>
                
<span class="keycombo"><span class="keysym">Ctrl</span>&nbsp;+&nbsp;<span class="keysym">5</span></span>
            
</dt>
            
<dd>Test Action</dd>
            
<dt>
                
<span class="keycombo"><span class="keysym">Ctrl</span>&nbsp;+&nbsp;<span class="keysym">6</span></span>
            
</dt>
            
<dd>JSR223 PostProcessor</dd>
            
<dt>
                
<span class="keycombo"><span class="keysym">Ctrl</span>&nbsp;+&nbsp;<span class="keysym">7</span></span>
            
</dt>
            
<dd>JSR223 PreProcessor</dd>
            
<dt>
                
<span class="keycombo"><span class="keysym">Ctrl</span>&nbsp;+&nbsp;<span class="keysym">8</span></span>
            
</dt>
            
<dd>Debug Sampler</dd>
            
<dt>
                
<span class="keycombo"><span class="keysym">Ctrl</span>&nbsp;+&nbsp;<span class="keysym">9</span></span>
            
</dt>
            
<dd>View Results Tree</dd>
        
</dl>
        
<div class="clear"></div>
<div class="note">The binding above are made for Windows QWERTY keyboards. For other platforms and keyboards ensure you adapt those values.</div>
<div class="clear"></div>
        
<p>
            To change these binding, please find "<span class="code">gui.quick_*</span>" properties within <span class="code">jmeter.properties</span> file as example,
            it is recommended to put overrides for them into <span class="code">user.properties</span> file.
        </p>
    
</div>
    
<div class="subsection">
<h2 id="browser_renderer_view_results_tree">22.6 Browser renderer is not displaying in View Results Tree<a class="sectionlink" href="#browser_renderer_view_results_tree" title="Link to here">&para;</a>
</h2>
        
<p>
            If you're using OpenJDK or Oracle Java version higher than 8, you'll notice that Browser Renderer is not displayed.
            This is because JavaFX is not embedded.
            In order to have this element you need to follow the below procedure.
        </p>
        
<ul>
            
<li>Follow this <a href="https://openjfx.io/openjfx-docs/">documentation</a> to install Java FX for your OS and Java version. <br>
            If you don't want to read it, here are the necessary steps:
                <ul>
                    
<li>Go to <a href="https://gluonhq.com/products/javafx/">Gluon website</a> and download the runtime for your Java version and OS</li>
                    
<li>Unzip it</li>
                    
<li>Then configure a variable pointing to lib folder:<br>
                        Linux/MacOSX:<br>
                        
<pre class="source">export PATH_TO_FX=path/to/javafx-sdk-XX/lib</pre>
                        Windows:<br>
                        
<pre class="source">set PATH_TO_FX=path/to/javafx-sdk-XX/lib</pre>
                    
</li>
                
</ul>
            
</li>
            
<li>Then open bin/jmeter file for Linux/MacOSX, bin/jmeter.bat for Windows, find JAVA9_OPTS variable and add:<br>
               Linux/MacOSX:<br>
               
<pre class="source">--module-path $PATH_TO_FX --add-modules javafx.web,javafx.swing</pre>
               Windows:<br>
               
<pre class="source">--module-path %PATH_TO_FX% --add-modules javafx.web,javafx.swing</pre>
            
</li>
            
<li></li>
        
</ul>
    
</div>

</div>
<ul class="pagelinks">
<li>
<a href="regular_expressions.html">&lt; Prev</a>
</li>
<li>
<a href="../index.html">Index</a>
</li>
<li>
<a href="glossary.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;
            2020
            , 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>
