<!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="../security.html">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://privacy.apache.org/policies/privacy-policy-public.html">Privacy Policy</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;
            2024
            , 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>
