<!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="../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="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;
            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>
