<!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 a Simple Database 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-adv-web-test-plan.html">&lt; Prev</a>
                </li>
                <li>
                    <a href="../index.html">Index</a>
                </li>
                <li>
                    <a href="build-ftp-test-plan.html">Next &gt;</a>
                </li>
            </ul>
            <div class="section">
                <h1 id="building">
                    6. Building a Database 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 a database server.
You will create fifty users that send 2 SQL requests to the database server.
Also, you will tell the users to run their tests 100 times. So, the total number
of requests is (50 users) x (2 requests) x (repeat 100 times) = 10'000 JDBC requests.
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#JDBC_Request">JDBC Request</a>, <a href="../usermanual/component_reference.html#Summary_Report">Summary Report</a>.
                </p>
                
                <div class="clear"></div>
                <div class="note">
                    This example uses the MySQL database driver.
To use this driver, its containing <span class="code">.jar</span> file (ex. <span class="code">mysql-connector-java-X.X.X-bin.jar</span>) must be copied to the JMeter
<span class="code">./lib</span> directory (see <a href="get-started.html#classpath">JMeter's Classpath</a>
for more details).
                </div>
                <div class="clear"></div>
                
            </div>
            <div class="section">
                <h1 id="adding_users">
                    6.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 how many requests they should send.
                </p>
                
                <p>
                    Go ahead and add the ThreadGroup element by first selecting the Test Plan,
clicking your right mouse button to get the <span class="code">Add</span> menu, and then select
<span class="menuchoice"><span class="guimenuitem">Add</span>&nbsp;&rarr;&nbsp;<span class="guimenuitem">ThreadGroup</span></span>.
                </p>
                
                <p>
                    You should now see the Thread Group element under Test Plan. If you do not
see the element, then <em>expand</em> the Test Plan tree by clicking on the
Test Plan element.
                </p>
                
                <p>Next, you need to modify the default properties. Select the Thread Group 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 6.1
below)</p>
                
                <figure>
                    <a href="../images/screenshots/jdbctest/threadgroup1.png"><img src="../images/screenshots/jdbctest/threadgroup1.png" width="" height="" alt="
Figure 6.1. Thread Group with Default Values"></a>
                    <figcaption>
Figure 6.1. Thread Group with Default Values</figcaption>
                </figure>
                
                <p>
                    Start by providing a more descriptive name for our Thread Group. In the name
field, enter <span class="code">JDBC Users</span>.
                </p>
                
                <div class="clear"></div>
                <div class="note">
                    You will need a valid database, database table, and user-level access to that
table. In the example shown here, the database is '<span class="code">cloud</span>' and the table name is
'<span class="code">vm_instance</span>'.
                </div>
                <div class="clear"></div>
                
                <p>
                    Next, increase the number of users to <span class="code">50</span>.
                </p>
                
                <p>
                    In the next field, the Ramp-Up Period, leave the value of <span class="code">10</span>
seconds.  This property tells JMeter how long to delay between starting each
user. For example, if you enter a Ramp-Up Period of 10 seconds, JMeter will
finish starting all of your users by the end of the 10 seconds.  So, if we have
50 users and a 10 second Ramp-Up Period, then the delay between starting users
would be 200 milliseconds (10 seconds / 50 users = 0.2 second per user).  If you set the
value to 0, then JMeter will immediately start all of your users.
                </p>
                
                <p>
                    Finally, enter a value of <span class="code">100</span> in
the Loop Count field.  This property tells JMeter how many times to repeat your
test. To have JMeter repeatedly run your Test Plan, select the Forever
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 6.2 for the completed JDBC Users Thread Group.</p>
                
                <figure>
                    <a href="../images/screenshots/jdbctest/threadgroup2.png"><img src="../images/screenshots/jdbctest/threadgroup2.png" width="" height="" alt="
Figure 6.2. JDBC Users Thread Group"></a>
                    <figcaption>
Figure 6.2. JDBC Users Thread Group</figcaption>
                </figure>
                
            </div>
            <div class="section">
                <h1 id="adding_requests">
                    6.2 Adding JDBC Requests<a class="sectionlink" href="#adding_requests" title="Link to here">&para;</a>
                </h1>
                
                <p>Now that we have defined our users, it is time to define the tasks that they
will be performing.  In this section, you will specify the JDBC requests to
perform.</p>
                
                <p>
                    Begin by selecting the <span class="code">JDBC Users</span> element. Click your right mouse button
to get the <b>Add</b> menu, and then select <span class="menuchoice"><span class="guimenuitem">Add</span>&nbsp;&rarr;&nbsp;<span class="guimenuitem">Config Element</span>&nbsp;&rarr;&nbsp;<span class="guimenuitem">JDBC Connection Configuration</span></span>.
Then, select this new element to view its Control Panel (see Figure 6.3).
                </p>
                
                <p>
                    Set up the following fields (these assume we will be using a MySQL database called '<span class="code">cloud</span>'):
                </p>
                
                <ul>
                    
                    <li>
                        Variable name (here: <span class="code">myDatabase</span>) bound to pool. This needs to uniquely identify the configuration. It is used by the JDBC Sampler to identify the configuration to be used.
                    </li>
                    
                    <li>
                        Database URL: <span class="code">jdbc:mysql://ipOfTheServer:3306/cloud</span>
                    </li>
                    
                    <li>
                        JDBC Driver class: <span class="code">com.mysql.jdbc.Driver</span>
                    </li>
                    
                    <li>
                        Username: <em>the username of database</em>
                    </li>
                    
                    <li>
                        Password: <em>password for the username</em>
                    </li>
                    
                </ul>
                
                <p>The other fields on the screen can be left as the defaults.</p>
                
                <p>
                    JMeter creates a database connection pool with the configuration settings as specified in the Control Panel.
The pool is referred to in JDBC Requests in the '<span class="code">Variable Name</span>' field.
Several different JDBC Configuration elements can be used, but they must have unique names.
Every JDBC Request must refer to a JDBC Configuration pool.
More than one JDBC Request can refer to the same pool.

                </p>
                
                <figure>
                    <a href="../images/screenshots/jdbctest/jdbc-config.png"><img src="../images/screenshots/jdbctest/jdbc-config.png" width="" height="" alt="
Figure 6.3. JDBC Configuration"></a>
                    <figcaption>
Figure 6.3. JDBC Configuration</figcaption>
                </figure>
                
                <p>
                    Selecting the JDBC Users element again. Click your right mouse button
to get the <b>Add</b> menu, and then select <span class="menuchoice"><span class="guimenuitem">Add</span>&nbsp;&rarr;&nbsp;<span class="guimenuitem">Sampler</span>&nbsp;&rarr;&nbsp;<span class="guimenuitem">JDBC Request</span></span>.
Then, select this new element to view its Control Panel (see Figure 6.4).
                </p>
                
                <figure>
                    <a href="../images/screenshots/jdbctest/JDBCRequest.png"><img src="../images/screenshots/jdbctest/JDBCRequest.png" width="" height="" alt="
Figure 6.4. JDBC Request"></a>
                    <figcaption>
Figure 6.4. JDBC Request</figcaption>
                </figure>
                
                <p>In our Test Plan, we will make two JDBC requests. The first one is for
select all 'Running' VM instances, and the second is to select 'Expunging' VM instance (obviously you should
change these to examples appropriate for your particular database). These
are illustrated below.</p>
                
                <div class="clear"></div>
                <div class="note">JMeter sends requests in the order that you add them to the tree.</div>
                <div class="clear"></div>
                
                <p>
                    Start by editing the following properties (see Figure 6.5):

                    <ul>
                        
                        <li>
                            Change the Name to '<span class="code">VM Running</span>'.
                        </li>
                        
                        <li>
                            Enter the Pool Name: '<span class="code">myDatabase</span>' (same as in the configuration element)
                        </li>
                        
                        <li>Enter the SQL Query String field.</li>
                        
                        <li>
                            Enter the Parameter values field with '<span class="code">Running</span>' value.
                        </li>
                        
                        <li>
                            Enter the Parameter types with '<span class="code">VARCHAR</span>'.
                        </li>
                        
                    </ul>
                    
                </p>
                
                <figure>
                    <a href="../images/screenshots/jdbctest/JDBCRequest2.png"><img src="../images/screenshots/jdbctest/JDBCRequest2.png" width="" height="" alt="
Figure 6.5. JDBC Request for the first SQL request"></a>
                    <figcaption>
Figure 6.5. JDBC Request for the first SQL request</figcaption>
                </figure>
                
                <p>
                    Next, add the second JDBC Request and edit the following properties (see
Figure 6.6):

                    <ul>
                        
                        <li>
                            Change the Name to '<span class="code">VM Expunging</span>'.
                        </li>
                        
                        <li>
                            Change the value of Parameter values to '<span class="code">Expunging</span>'.
                        </li>
                        
                    </ul>
                    
                </p>
                
                <figure>
                    <a href="../images/screenshots/jdbctest/JDBCRequest3.png"><img src="../images/screenshots/jdbctest/JDBCRequest3.png" width="" height="" alt="
Figure 6.6. JDBC Request for the second request"></a>
                    <figcaption>
Figure 6.6. JDBC Request for the second request</figcaption>
                </figure>
                
            </div>
            <div class="section">
                <h1 id="adding_listener">
                    6.3 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 Test Plan is a
<a href="component_reference.html#listeners">Listener</a>. This element is
responsible for storing all of the results of your JDBC requests in a file
and presenting the results.
                </p>
                
                <p>
                    Select the <i>JDBC Users</i> element and add a <a href="../usermanual/component_reference.html#Summary_Report">Summary Report</a>
listener (<span class="menuchoice"><span class="guimenuitem">Add</span>&nbsp;&rarr;&nbsp;<span class="guimenuitem">Listener</span>&nbsp;&rarr;&nbsp;<span class="guimenuitem">Summary Report</span></span>).
                </p>
                
                <p>
                    Save the test plan, and run the test with the menu
<span class="menuchoice"><span class="guimenuitem">Run</span>&nbsp;&rarr;&nbsp;<span class="guimenuitem">Start</span></span> or
<span class="keycombo"><span class="keysym">Ctrl</span>&nbsp;+&nbsp;<span class="keysym">R</span></span>

                </p>
                
                <p>The listener shows the results.</p>
                
                <figure>
                    <a href="../images/screenshots/jdbctest/jdbc-results.png"><img src="../images/screenshots/jdbctest/jdbc-results.png" width="" height="" alt="
Figure 6.7. Graph results Listener"></a>
                    <figcaption>
Figure 6.7. Graph results Listener</figcaption>
                </figure>
                
            </div>
            <ul class="pagelinks">
                <li>
                    <a href="build-adv-web-test-plan.html">&lt; Prev</a>
                </li>
                <li>
                    <a href="../index.html">Index</a>
                </li>
                <li>
                    <a href="build-ftp-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;
            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>
