<!DOCTYPE html SYSTEM "about:legacy-compat">
<html lang="en">
<head>
<META http-equiv="Content-Type" content="text/html; charset=iso-8859-15">
<title>Apache JMeter
          -
          User's Manual: Building an FTP Test Plan</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link href="https://fonts.googleapis.com/css?family=Merriweather:400normal" rel="stylesheet" type="text/css">
<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.6.1/css/font-awesome.min.css" rel="stylesheet" type="text/css">
<link rel="stylesheet" type="text/css" href="../css/new-style.css">
<link rel="apple-touch-icon-precomposed" href="../images/apple-touch-icon.png">
<link rel="icon" href="../images/favicon.png">
<meta name="msapplication-TileColor" content="#ffffff">
<meta name="msapplication-TileImage" content="../images/mstile-144x144.png">
<meta name="theme-color" content="#ffffff">
</head>
<body role="document">
<a href="#content" class="hidden">Main content</a>
<div class="header">
<!--
            APACHE LOGO
          -->
<div>
<a href="https://www.apache.org"><img title="Apache Software Foundation" class="asf-logo logo" src="../images/asf-logo.svg" alt="Logo ASF"></a>
</div>
<!--
              PROJECT LOGO
            -->
<div>
<a href="https://jmeter.apache.org/"><img class="logo" src="../images/logo.svg" alt="Apache JMeter"></a>
</div>
<div class="banner">
<a href="https://www.apache.org/events/current-event.html"><img src="https://www.apache.org/events/current-event-234x60.png" alt="Current Apache event teaser"></a>
<div class="clear"></div>
</div>
</div>
<div class="nav">
<ul class="menu">
<li onClick="return true">
<div class="menu-title">About</div>
<ul>
<li>
<a href="../index.html">Overview</a>
</li>
<li>
<a href="https://www.apache.org/licenses/">License</a>
</li>
</ul>
</li>
</ul>
<ul class="menu">
<li onClick="return true">
<div class="menu-title">Download</div>
<ul>
<li>
<a href="../download_jmeter.cgi">Download Releases</a>
</li>
<li>
<a href="../changes.html">Release Notes</a>
</li>
</ul>
</li>
</ul>
<ul class="menu">
<li onClick="return true">
<div class="menu-title">Documentation</div>
<ul>
<li>
<a href="../usermanual/get-started.html">Get Started</a>
</li>
<li>
<a href="../usermanual/index.html">User Manual</a>
</li>
<li>
<a href="../usermanual/best-practices.html">Best Practices</a>
</li>
<li>
<a href="../usermanual/component_reference.html">Component Reference</a>
</li>
<li>
<a href="../usermanual/functions.html">Functions Reference</a>
</li>
<li>
<a href="../usermanual/properties_reference.html">Properties Reference</a>
</li>
<li>
<a href="../changes_history.html">Change History</a>
</li>
<li>
<a href="../api/index.html">Javadocs</a>
</li>
<li>
<a href="https://cwiki.apache.org/confluence/display/JMETER/Home">JMeter Wiki</a>
</li>
<li>
<a href="https://cwiki.apache.org/confluence/display/JMETER/JMeterFAQ">FAQ (Wiki)</a>
</li>
</ul>
</li>
</ul>
<ul class="menu">
<li onClick="return true">
<div class="menu-title">Tutorials</div>
<ul>
<li>
<a href="../usermanual/jmeter_distributed_testing_step_by_step.html">Distributed Testing</a>
</li>
<li>
<a href="../usermanual/jmeter_proxy_step_by_step.html">Recording Tests</a>
</li>
<li>
<a href="../usermanual/junitsampler_tutorial.html">JUnit Sampler</a>
</li>
<li>
<a href="../usermanual/jmeter_accesslog_sampler_step_by_step.html">Access Log Sampler</a>
</li>
<li>
<a href="../usermanual/jmeter_tutorial.html">Extending JMeter</a>
</li>
</ul>
</li>
</ul>
<ul class="menu">
<li onClick="return true">
<div class="menu-title">Community</div>
<ul>
<li>
<a href="../issues.html">Issue Tracking</a>
</li>
<li>
<a href="https://www.apache.org/security/">Security</a>
</li>
<li>
<a href="../mail.html">Mailing Lists</a>
</li>
<li>
<a href="../svnindex.html">Source Repositories</a>
</li>
<li>
<a href="../building.html">Building and Contributing</a>
</li>
<li>
<a href="https://projects.apache.org/project.html?jmeter">Project info at Apache</a>
</li>
<li>
<a href="https://cwiki.apache.org/confluence/display/JMETER/JMeterCommitters">Contributors</a>
</li>
</ul>
</li>
</ul>
<ul class="menu">
<li onClick="return true">
<div class="menu-title">Foundation</div>
<ul>
<li>
<a href="https://www.apache.org/">The Apache Software Foundation (ASF)</a>
</li>
<li>
<a href="https://www.apache.org/foundation/getinvolved.html">Get Involved in the ASF</a>
</li>
<li>
<a href="https://www.apache.org/foundation/sponsorship.html">Sponsorship</a>
</li>
<li>
<a href="https://www.apache.org/foundation/thanks.html">Thanks</a>
</li>
</ul>
</li>
</ul>
</div>
<div class="main" id="content">
<div class="social-media">
<ul class="social-media-links">
<li class="twitter">
<a href="https://twitter.com/ApacheJMeter" title="Follow us on Twitter"><i class="fa fa-twitter" aria-hidden="true"></i>Twitter</a>
</li>
<li class="github">
<a href="https://github.com/apache/jmeter" title="Fork us on github"><i class="fa fa-github" aria-hidden="true"></i>github</a>
</li>
</ul>
</div>
<ul class="pagelinks">
<li>
<a href="build-db-test-plan.html">&lt; Prev</a>
</li>
<li>
<a href="../index.html">Index</a>
</li>
<li>
<a href="build-ldap-test-plan.html">Next &gt;</a>
</li>
</ul>
<div class="section">
<h1 id="building">7. Building an FTP Test Plan<a class="sectionlink" href="#building" title="Link to here">&para;</a>
</h1>

<p>In this section, you will learn how to create a basic
<a href="build-test-plan.html">Test Plan</a> to test an FTP site.  You will
create four users that send requests for two files on a FTP site.
Also, you will tell the users to run their tests twice. So, the total number of
requests is (4 users) x (2 requests) x (repeat 2 times) = 16 FTP requests.</p>

<p>To construct the Test Plan, you will use the following elements:
<a href="test_plan.html#thread_group">Thread Group</a>,
<a href="../usermanual/component_reference.html#FTP_Request">FTP Request</a>,
<a href="../usermanual/component_reference.html#FTP_Request_Defaults">FTP Request Defaults</a>, and
<a href="../usermanual/component_reference.html#View_Results_in_Table">View Results in Table</a>.</p>


</div>
<div class="section">
<h1 id="adding_users">7.1 Adding Users<a class="sectionlink" href="#adding_users" title="Link to here">&para;</a>
</h1>

<p>The first step you want to do with every JMeter Test Plan is to add a
<a href="test_plan.html#thread_group">Thread Group</a> element.  The Thread Group tells
JMeter the number of users you want to simulate, how often the users should send
requests, and the how many requests they should send.</p>


<p>Go ahead and add the Thread Group element by first selecting the Test Plan,
clicking your right mouse button to get the Add menu, and then select
<b>Add</b> &rarr; <b>ThreadGroup.</b>
</p>


<p>You should now see the <b>Thread Group</b> element under <b>Test Plan.</b>  If you do not
see the element, then "expand" the Test Plan tree by clicking on the
<b>Test Plan</b> element.</p>


<p>Next, you need to modify the default properties.  Select the <b>Thread Group</b> element
in the tree, if you have not already selected it. You should now see the Thread
Group Control Panel in the right section of the JMeter window (see Figure 7.1
below)</p>


<figure>
<a href="../images/screenshots/webtest/threadgroup.png"><img src="../images/screenshots/webtest/threadgroup.png" width="" height="" alt="
Figure 7.1. Thread Group with Default Values"></a>
<figcaption>
Figure 7.1. Thread Group with Default Values</figcaption>
</figure>


<p>Start by providing a more descriptive name for our <b>Thread Group.</b> In the name
field, enter 'FTP Users'.</p>


<p>Next, increase the number of users to 4.</p>


<p>In the next field, the <i>Ramp-Up</i> Period, leave the default value of 0
seconds.  This property tells JMeter how long to delay between starting each
user. For example, if you enter a <i>Ramp-Up</i> Period of 5 seconds, JMeter will
finish starting all of your users by the end of the 5 seconds.  So, if we have
5 users and a 5 second <i>Ramp-Up</i> Period, then the delay between starting users
would be 1 second (5 users / 5 seconds = 1 user per second).  If you set the
value to 0, then JMeter will immediately start all of your users.</p>


<p>Finally, enter a value of 2 in
the <i>Loop Count</i> field.  This property tells JMeter how many times to repeat your
test. To have JMeter repeatedly run your <b>Test Plan,</b> select the <i>Forever</i>
checkbox.</p>


<div class="clear"></div>
<div class="note">In most applications, you have to manually accept
changes you make in a Control Panel.  However, in JMeter, the Control Panel
automatically accepts your changes as you make them.  If you change the
name of an element, the tree will be updated with the new text after you
leave the Control Panel (for example, when selecting another tree element).</div>
<div class="clear"></div>


<p>See Figure 7.2 for the completed FTP Users Thread Group.</p>


<figure>
<a href="../images/screenshots/ftptest/threadgroup2.png"><img src="../images/screenshots/ftptest/threadgroup2.png" width="" height="" alt="
Figure 7.2. FTP Users Thread Group"></a>
<figcaption>
Figure 7.2. FTP Users Thread Group</figcaption>
</figure>


</div>
<div class="section">
<h1 id="adding_defaults">7.2 Adding Default FTP Request Properties<a class="sectionlink" href="#adding_defaults" title="Link to here">&para;</a>
</h1>

<p>Now that we have defined our users, it is time define the tasks that they
will be performing.  In this section, you will specify the default settings
for your FTP requests.  And then, in section 7.3, you will add <b>FTP Request</b>
elements which use some of the default settings you specified here.</p>


<p>Begin by selecting the FTP Users element. Click your right mouse button
to get the Add menu, and then select <b>Add</b> &rarr; <b>Config Element</b> &rarr; <b>FTP Request
Defaults.</b> Then, select this new element to view its Control Panel (see Figure 7.3).
</p>


<figure>
<a href="../images/screenshots/ftptest/ftp-defaults.png"><img src="../images/screenshots/ftptest/ftp-defaults.png" width="" height="" alt="
Figure 7.3. FTP Request Defaults"></a>
<figcaption>
Figure 7.3. FTP Request Defaults</figcaption>
</figure>


<p>
Like most JMeter elements, the <a href="../usermanual/component_reference.html#FTP_Request_Defaults">FTP Request Defaults</a> Control
Panel has a name field that you can modify.  In this example, leave this field with
the default value.</p>


<p>Skip to the next field, which is the FTP Server's Server Name/IP. For the
Test Plan that you are building, all FTP requests will be sent to the same
FTP server, ftp.domain.com in this case.  Enter this domain name into the field.
This is the only field that we will specify a default, so leave the remaining
fields with their default values.</p>


<div class="clear"></div>
<div class="note">The FTP Request Defaults element does not tell JMeter
to send an FTP request.  It simply defines the default values that the
FTP Request elements use.</div>
<div class="clear"></div>


<p>See Figure 7.4 for the completed FTP Request Defaults element</p>


<figure>
<a href="../images/screenshots/ftptest/ftp-defaults2.png"><img src="../images/screenshots/ftptest/ftp-defaults2.png" width="" height="" alt="
Figure 7.4. FTP Defaults for our Test Plan"></a>
<figcaption>
Figure 7.4. FTP Defaults for our Test Plan</figcaption>
</figure>


</div>
<div class="section">
<h1 id="adding_requests">7.3 Adding FTP Requests<a class="sectionlink" href="#adding_requests" title="Link to here">&para;</a>
</h1>


<p>In our <b>Test Plan</b>, we need to make two <b>FTP requests</b>.</p>


<div class="clear"></div>
<div class="note">JMeter sends requests in the order that they appear in the tree.</div>
<div class="clear"></div>


<p>Start by adding the first <a href="../usermanual/component_reference.html#FTP_Request">FTP Request</a>
to the FTP Users element (<b>Add</b> &rarr; <b>Sampler</b> &rarr; <b>FTP Request</b>).
Then, select the <b>FTP Request</b> element in the tree and edit the following properties
(see Figure 7.5):
<ol>

<li>Change the <i>Name</i> to "File1".</li>

<li>Change the <i>Remote File</i> field to "/directory/file1.txt".</li>

<li>Change the <i>Username</i> field to "anonymous".</li>

<li>Change the <i>Password</i> field to "anonymous@test.com".</li>

</ol>

</p>


<div class="clear"></div>
<div class="note">You do not have to set the <i>Server Name</i> field because you already specified
this value in the <b>FTP Request Defaults</b> element.</div>
<div class="clear"></div>


<figure>
<a href="../images/screenshots/ftptest/ftp-request.png"><img src="../images/screenshots/ftptest/ftp-request.png" width="" height="" alt="
Figure 7.5. FTP Request for file1"></a>
<figcaption>
Figure 7.5. FTP Request for file1</figcaption>
</figure>


<p>Next, add the second <b>FTP Request</b> and edit the following properties (see
Figure 7.6:
<ol>

<li>Change the <i>Name</i> to "File2".</li>

<li>Change the <i>Remote File</i> field to "/directory/file2.txt".</li>

<li>Change the <i>Username</i> field to "anonymous".</li>

<li>Change the <i>Password</i> field to "anonymous@test.com".</li>

</ol>

</p>


<figure>
<a href="../images/screenshots/ftptest/ftp-request2.png"><img src="../images/screenshots/ftptest/ftp-request2.png" width="" height="" alt="
Figure 7.6. FTP Request for file2"></a>
<figcaption>
Figure 7.6. FTP Request for file2</figcaption>
</figure>


</div>
<div class="section">
<h1 id="adding_listener">7.4 Adding a Listener to View/Store the Test Results<a class="sectionlink" href="#adding_listener" title="Link to here">&para;</a>
</h1>

<p>The final element you need to add to your <b>Test Plan</b> is a
 <a href="component_reference.html#listeners">Listener</a>. This element is
responsible for storing all of the results of your <b>FTP requests</b> in a file and presenting
a visual model of the data.</p>


<p>Select the FTP Users element and add a <a href="../usermanual/component_reference.html#View_Results_in_Table">View Results in Table</a>
listener (<b>Add</b> &rarr; <b>Listener</b> &rarr; <b>View Results in Table</b>).</p>

<p>Run your test and view the results.</p>


<figure>
<a href="../images/screenshots/ftptest/ftp-results.png"><img src="../images/screenshots/ftptest/ftp-results.png" width="" height="" alt="
Figure 7.7. View Results in Table Listener"></a>
<figcaption>
Figure 7.7. View Results in Table Listener</figcaption>
</figure>


</div>
<ul class="pagelinks">
<li>
<a href="build-db-test-plan.html">&lt; Prev</a>
</li>
<li>
<a href="../index.html">Index</a>
</li>
<li>
<a href="build-ldap-test-plan.html">Next &gt;</a>
</li>
</ul>
<div class="share-links">
      Share this page:
      <ul>
<li class="fb">
<a data-social-url="https://facebook.com/sharer/sharer.php?u=" title="Share on facebook"><i class="fa fa-facebook" aria-hidden="true"></i>share</a>
</li>
<li class="twitter">
<a data-social-url="https://twitter.com/intent/tweet?url=" title="Tweet on twitter"><i class="fa fa-twitter" aria-hidden="true"></i>tweet</a>
</li>
</ul>
</div>
<a href="#top" id="topButton">Go to top</a>
</div>
<div class="footer">
<div class="copyright">
            Copyright &copy;
            1999 &ndash;
            2019
            , Apache Software Foundation
          </div>
<div class="trademarks">Apache, Apache JMeter, JMeter, the Apache
            feather, and the Apache JMeter logo are
            trademarks of the
            Apache Software Foundation.
          </div>
</div>
<script>(function(){
            "use strict";
            // enable 'go to top' button functionality
            document.addEventListener('scroll', function() {
                if (document.body.scrollTop > 500 || document.documentElement.scrollTop > 500) {
                    document.getElementById("topButton").style.display = "block";
                } else {
                    document.getElementById("topButton").style.display = "none";
                }
            });
            // fill in the current location into social links on this page.
            var as = document.getElementsByTagName('a');
            var loc = document.location.href;
            if (!loc.toLowerCase().startsWith('http')) {
                return;
            }
            for (var i=0; i<as.length; i++) {
                var href = as[i].getAttribute('data-social-url');
                if (href !== null) {
                    as[i].href = href + encodeURIComponent(loc);
                }
            }
        })();</script>
</body>
</html>
