<!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
          -
          Apache JMeter HTTP(S) Test Script Recorder</title>
        <meta name="author" value="JMeter developers">
        <meta name="email" value="dev@jmeter.apache.org">
        <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="jmeter_distributed_testing_step_by_step.html">&lt; Prev</a>
                </li>
                <li>
                    <a href="../index.html">Index</a>
                </li>
                <li>
                    <a href="junitsampler_tutorial.html">Next &gt;</a>
                </li>
            </ul>
            <div class="section">
                <h1 id="script-recorder">
                    26. Apache JMeter HTTP(S) Test Script Recorder<a class="sectionlink" href="#script-recorder" title="Link to here">&para;</a>
                </h1>
                
                <p>
This tutorial attempts to explain the exact steps for recording HTTP/HTTPS. For those new to JMeter, one easy way to create a test plan is to use the Recorder.
</p>
                
                <div class="subsection">
                    <h2 id="configuration">
                        26.1 JMeter configuration<a class="sectionlink" href="#configuration" title="Link to here">&para;</a>
                    </h2>
                    
                    <p>
                        Since JMeter 2.10, recording has been improved to better handle embedded resources and creation of certificates on the fly.
To enable these features, JMeter uses <span class="code">keytool</span> utility (available in JRE/JDK) so you need to ensure your
configuration is correct, read <a href="https://cwiki.apache.org/confluence/display/JMETER/TestRecording210">this wiki page before starting.</a>

                    </p>
                    
                </div>
                
                <div class="subsection">
                    <h2 id="basic-instructions">
                        26.2 Basic Instructions<a class="sectionlink" href="#basic-instructions" title="Link to here">&para;</a>
                    </h2>
                    
                    <ol>
                          
                        <li>
                            Go to <span class="code">JMETER_HOME/bin</span> and start JMeter with <span class="code">jmeterw.bat</span> on Windows
      and <span class="code">jmeter.sh
      </span> on Linux/Unix
                        </li>
                          
                        <li>
                            Select <span class="code">Templates&hellip;</span> on the menu bar
                        </li>
                          
                        <figure>
                            <a href="../images/screenshots/Select-Templates-Icon.png"><img src="../images/screenshots/Select-Templates-Icon.png" width="" height="" alt=""></a>
                            <figcaption></figcaption>
                        </figure>
                          
                        <li>
                            Select <span class="code">Recording template</span> on the list
                        </li>
                          
                        <figure>
                            <a href="../images/screenshots/Select-Recording-Template.png"><img src="../images/screenshots/Select-Recording-Template.png" width="" height="" alt=""></a>
                            <figcaption></figcaption>
                        </figure>
                          
                        <li>
                            A complete <span class="code">Test Plan</span> is generated
                        </li>
                          
                        <figure>
                            <a href="../images/screenshots/Test_Generated.png"><img src="../images/screenshots/Test_Generated.png" width="" height="" alt=""></a>
                            <figcaption></figcaption>
                        </figure>
                          
                        <li>
                            In the <span class="code">HTTP Request Defaults</span> element:
    
                            <dl>
                                      
                                <dt>
                                    <span class="code">Server name or IP</span>
                                </dt>
                                <dd>
                                    enter <span class="code">example.com</span>
                                </dd>
                                      
                                <dt>
                                    <span class="code">Path</span>
                                </dt>
                                <dd>leave blank</dd>
                                    
                            </dl>
                                
                            <figure>
                                <a href="../images/screenshots/http-config/http-request-defaults.png"><img src="../images/screenshots/http-config/http-request-defaults.png" width="" height="" alt=""></a>
                                <figcaption></figcaption>
                            </figure>
                              
                        </li>
                          
                        <li>
                            Return to <span class="code">HTTP(S) Test Script Recorder</span>, and click the <span class="code">Start</span> button at the top.
                        </li>
                          
                        <figure>
                            <a href="../images/screenshots/Proxy_Run.png"><img src="../images/screenshots/Proxy_Run.png" width="" height="" alt=""></a>
                            <figcaption></figcaption>
                        </figure>
                        
                    </ol>
                    
                    <p>
                        This will start the JMeter proxy server which is used to intercept the browser requests.
A file called <span class="code">ApacheJMeterTemporaryRootCA.crt</span> will be generated in <span class="code">JMETER_HOME/bin</span>
folder. Install this certificate in your browser, if you don't know how to do it,
read <a href="component_reference.html#HTTP%28S%29_Test_Script_Recorder">Installing the JMeter CA certificate for HTTPS recording</a>

                    </p>
                    
                </div>
                
                <div class="subsection">
                    <h2 id="configure-browser">
                        26.3 Configure your browser to use the JMeter Proxy<a class="sectionlink" href="#configure-browser" title="Link to here">&para;</a>
                    </h2>
                    
                    <p>
At this point, JMeter's proxy is running. For this exercise, we will use Iceweasel/Firefox
to view some pages on the JMeter website.
</p>
                    
                    <ol>
                          
                        <li>Start Iceweasel/Firefox, but do not close JMeter.</li>
                          
                        <li>
                            From the tool bar, click
      <span class="menuchoice"><span class="guimenuitem">Edit</span>&nbsp;&rarr;&nbsp;<span class="guimenuitem">Preferences</span></span> (or
      <span class="menuchoice"><span class="guimenuitem">Tools</span>&nbsp;&rarr;&nbsp;<span class="guimenuitem">Preferences</span></span> or type <span class="code">about:preferences#advanced</span>
      as URL). This should bring up the options.
    
                            <figure>
                                <a href="../images/screenshots/firefox-network-settings.png"><img src="../images/screenshots/firefox-network-settings.png" width="914" height="566" alt=""></a>
                                <figcaption></figcaption>
                            </figure>
                              
                        </li>
                          
                        <li>
                            Select the <span class="code">Advanced</span> tab, and <span class="code">Network</span> tab
                        </li>
                          
                        <li>
                            Click <span class="code">Settings</span> button near the top.
                        </li>
                          
                        <li>
                            On the new pop-up, check <span class="code">Manual proxy configuration</span>. The address and
      port fields should be enabled now.
    
                            <dl>
                                      
                                <dt>
                                    <span class="code">Address</span>
                                </dt>
                                <dd>
                                    enter <span class="code">localhost</span> or the IP address of your system
                                </dd>
                                      
                                <dt>
                                    <span class="code">Port</span>
                                </dt>
                                <dd>
                                    enter <span class="code">8888</span>.
                                </dd>
                                    
                            </dl>
                                
                            <figure>
                                <a href="../images/screenshots/firefox-configure-proxy.png"><img src="../images/screenshots/firefox-configure-proxy.png" width="532" height="240" alt=""></a>
                                <figcaption></figcaption>
                            </figure>
                              
                        </li>
                          
                        <li>
                            Check <span class="code">Use this proxy server for all protocols</span>
                        </li>
                          
                        <li>
                            Click <span class="code">OK</span> button. This should return you to the browser
                        </li>
                        
                    </ol>
                    
                </div>
                
                <div class="subsection">
                    <h2 id="navigation-recording">
                        26.4 Record your navigation<a class="sectionlink" href="#navigation-recording" title="Link to here">&para;</a>
                    </h2>
                    
                    <ol>
                          
                        <li>
                            With your browser, in the <span class="code">Address</span> bar at the top, enter <span class="code">http://example.com/index.html</span> (replace <span class="code">example.com</span> with your websites address).
  and hit the <span class="code">enter</span> key.
                        </li>
                          
                        <li>Click on a few links on your sites pages.</li>
                          
                        <li>Close your browser and bring up the JMeter window.</li>
                        
                    </ol>
                    
                    <p>
                        Expand the <span class="code">Thread Group</span> and there should be several samplers. At this point, the test plan can
be saved as is.

                        <div class="clear"></div>
                        <div class="note">If you forget to add default HTTP Request settings, you will have to manually
delete the server name, and port.</div>
                        <div class="clear"></div>
                        
                    </p>
                    
                    <figure>
                        <a href="../images/screenshots/example-recording.png"><img src="../images/screenshots/example-recording.png" width="258" height="194" alt=""></a>
                        <figcaption></figcaption>
                    </figure>
                    
                    <p>
In this sample, there aren't any default request parameters. If a particular request parameter
is required by all pages, the request defaults is where one would add the entries.
</p>
                    
                    <ol>
                          
                        <li>
                            Select <span class="code">Thread Group</span> and change a few defaults:
    
                            <dl>
                                      
                                <dt>
                                    <span class="code">Number of Threads (users)</span>
                                </dt>
                                <dd>
                                    enter <span class="code">5</span>
                                </dd>
                                      
                                <dt>
                                    <span class="code">Ramp-Up Period (in seconds)</span>
                                </dt>
                                <dd>do not change</dd>
                                      
                                <dt>
                                    <span class="code">Loop Count</span>
                                </dt>
                                <dd>
                                    enter <span class="code">100</span>
                                </dd>
                                    
                            </dl>
                                
                            <figure>
                                <a href="../images/screenshots/example-thread-group.png"><img src="../images/screenshots/example-thread-group.png" width="357" height="288" alt=""></a>
                                <figcaption></figcaption>
                            </figure>
                              
                        </li>
                        
                    </ol>
                    
                </div>
                
                <div class="subsection">
                    <h2 id="validate-script">
                        26.5 Validate the script<a class="sectionlink" href="#validate-script" title="Link to here">&para;</a>
                    </h2>
                    
                    <p>
Now we need to validate the script before to run our test plan. Save the test plan.
</p>
                    
                    <p>
                        Right click on the <span class="code">Thread Group</span>
  <span class="menuchoice"><span class="guimenuitem">Validate</span></span>
  
                        <figure>
                            <a href="../images/screenshots/Validate-Test-Plan.png"><img src="../images/screenshots/Validate-Test-Plan.png" width="" height="" alt=""></a>
                            <figcaption></figcaption>
                        </figure>
                        
                    </p>
                    
                    <p>
                        Check with <span class="code">View Results Tree</span> element if all is ok.

                    </p>
                    
                </div>
                
                <div class="subsection">
                    <h2 id="correlate-start">
                        26.6 Variabilize and Correlate the script<a class="sectionlink" href="#correlate-start" title="Link to here">&para;</a>
                    </h2>
                    
                    <p>
                        In some scripts, we will need to:

                        <ul>
                              
                            <li>Variabilize some input (login, password, search words, &hellip;)</li>
                              
                            <li>Correlate some data (session variable, &hellip;) between two requests</li>
                            
                        </ul>
                        
                    </p>
                    
                    <p>
                        To variabilize, we can use:

                        <ul>
                              
                            <li>
                                <span class="code">CSV Data Set Config</span> to get input data from csv file
                            </li>
                              
                            <li>
                                JMeter functions like <span class="code">__counter</span>, <span class="code">__time</span>, &hellip;
                            </li>
                              
                            <li>etc.</li>
                            
                        </ul>
                        
                    </p>
                    
                    <p>
                        To correlate, we can get data from a request with <span class="code">Post Processors</span> like <span class="code">JSON Extractor</span>, <span class="code">Regular Expression Extractor</span>, &hellip; and inject it in another request.

                    </p>
                    
                    <p>
                        To find data to correlate, the easiest way to do it is to use the Search function in <span class="code">View Results Tree</span>.

                        <figure>
                            <a href="../images/screenshots/Search-Correlation.png"><img src="../images/screenshots/Search-Correlation.png" width="" height="" alt=""></a>
                            <figcaption></figcaption>
                        </figure>
                        
                    </p>
                    
                </div>
                
                <div class="subsection">
                    <h2 id="test-start">
                        26.7 Start the test<a class="sectionlink" href="#test-start" title="Link to here">&para;</a>
                    </h2>
                    
                    <p>
                        At this point, we are ready to run our test plan and see what happens. When you're
ready to run the test, there are two ways:

                        <ol>
                              
                            <li>With the gui, but it's not recommended to big load test.</li>
                              
                            <li>With the command line.</li>
                            
                        </ol>
                        
                    </p>
                    
                    <p>
Solution 1, with the gui, but just during debug phase, use CLI mode (Non GUI) for your load test.
</p>
                    
                    <p>
                          <span class="menuchoice"><span class="guimenuitem">Run</span>&nbsp;&rarr;&nbsp;<span class="guimenuitem">Start</span></span>
or use the keyboard and press <span class="keycombo"><span class="keysym">Ctrl</span>&nbsp;+&nbsp;<span class="keysym">R</span></span>

                    </p>
                    
                    <p>
                          Before you start the test,  add a <span class="code">Summary Report</span> element and select it. As the test runs, the statistics will change
  until the test is done. At the end of the test, the summary report should look like this.
  
                        <figure>
                            <a href="../images/screenshots/example-summary-report.png"><img src="../images/screenshots/example-summary-report.png" width="984" height="220" alt=""></a>
                            <figcaption></figcaption>
                        </figure>
                        
                    </p>
                    
                    <p>
                          While the test is running, in the upper right-hand corner, there should be a green circle. When the test is done, the circle should be grey.
  
                        <figure>
                            <a href="../images/screenshots/example-running.png"><img src="../images/screenshots/example-running.png" width="132" height="39" alt=""></a>
                            <figcaption></figcaption>
                        </figure>
                        
                    </p>
                    
                    <p>
                        Solution 2, in command line, use <span class="code">jmeter -n -t [jmx file] -l [results file] -e -o [Path to output folder]</span>

                    </p>
                    
                    <p>
At the end of the test, an HTML report will be generated and available in [Path to output folder] used in command line.
</p>
                    
                </div>
                
            </div>
            <ul class="pagelinks">
                <li>
                    <a href="jmeter_distributed_testing_step_by_step.html">&lt; Prev</a>
                </li>
                <li>
                    <a href="../index.html">Index</a>
                </li>
                <li>
                    <a href="junitsampler_tutorial.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>
