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