<!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 Extended LDAP 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-ldap-test-plan.html">&lt; Prev</a>
</li>
<li>
<a href="../index.html">Index</a>
</li>
<li>
<a href="build-ws-test-plan.html">Next &gt;</a>
</li>
</ul>
<div class="section">
<h1 id="ldapexttest">8b. Building an Extended LDAP Test Plan<a class="sectionlink" href="#ldapexttest" title="Link to here">&para;</a>
</h1>

<p>
In this section, you will learn how to create a basic Test Plan to test an LDAP
server.</p>

<p>
As the Extended LDAP Sampler is highly configurable, this also means that it takes
some time to build a correct testplan. You can however tune it exactly up to your
needs.
</p>


<p>
You will create 1 user that send requests for nine tests on the LDAP server. Also, you will tell
the users to run their tests one time. So, the total number of requests is <span class="code">(1 user) x (9 requests) x
(repeat 1 time) = 9</span> LDAP requests. To construct the Test Plan, you will use the following elements:<br>

<a href="test_plan.html#thread_group">Thread Group</a>,<br>

<a href="../usermanual/component_reference.html#Adding_LDAP_Extended_Request_Defaults">Adding LDAP Extended Request Defaults</a>,<br>

<a href="../usermanual/component_reference.html#Adding_LDAP_Requests">Adding LDAP Requests</a>, and<br>

<a href="../usermanual/component_reference.html#Adding_a_Listener_to_View/Store_the_Test_Results">Adding a Listener to View/Store the Test Results</a>

</p>

<p>
This example assumes that the LDAP Server is available at <span class="code">ldap.test.com</span>.
</p>

<p>
For the less experienced LDAP users, I build a <a href="ldapops_tutor.html">small
LDAP tutorial</a> which shortly explains
the several LDAP operations that can be used in building a complex testplan.
</p>

<p>
Take care when using LDAP special characters in the distinguished name, in that case (e.g. you want to use a <span class="code">+</span> sign in a
distinguished name) you need to escape the character by adding an "<span class="code">\</span>" sign before that character.
Extra exception: if you want to add a <span class="code">\</span> character in a distinguished name (in an add or rename operation), you need to use 4 backslashes.
</p>

<p>
Examples:
</p>

<dl>

<dt>
<span class="code">cn=dolf\+smits</span>
</dt>
<dd>to add/search an entry with the name like <span class="code">cn=dolf+smits</span>
</dd>

<dt>
<span class="code">cn=dolf \\ smits</span>
</dt>
<dd>to search an entry with the name <span class="code">cn=dolf \ smits</span>
</dd>

<dt>
<span class="code">cn=c:\\\\log.txt</span>
</dt>
<dd>to add an entry with a name like <span class="code">cn=c:\log.txt</span>
</dd>

</dl>


    
<div class="subsection">
<h2 id="ext_adding_users">8b.1 Adding Users<a class="sectionlink" href="#ext_adding_users" title="Link to here">&para;</a>
</h2>

<p>
The first step you want to do with every JMeter Test Plan is to add a Thread Group 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 <span class="code">Thread Group</span> element by first selecting the <span class="code">Test Plan</span>, clicking your
right mouse button to get the <span class="code">Add</span> menu, and then select <span class="code">Add</span>&rarr;<span class="code">Threads (Users)</span>&rarr;<span class="code">Thread Group</span>. 
You should now see the <span class="code">Thread Group</span> element under <span class="code">Test Plan</span>. If you do not see the element, then "expand" the Test Plan tree by
clicking on the Test Plan element.
</p>

<p>

<figure>
<a href="../images/screenshots/ldaptest/extthreadgroup.png"><img src="../images/screenshots/ldaptest/extthreadgroup.png" width="" height="" alt="
Figure 8b.1. Thread Group with Default Values"></a>
<figcaption>
Figure 8b.1. Thread Group with Default Values</figcaption>
</figure>


</p>

</div>
    
<div class="subsection">
<h2 id="add_ldapext_defaults">8b.2 Adding LDAP Extended Request Defaults<a class="sectionlink" href="#add_ldapext_defaults" title="Link to here">&para;</a>
</h2>

<p>
Begin by selecting the LDAP Ext Users element. Click your right mouse button
to get the <span class="code">Add</span> menu, and then select <span class="code">Add</span>&rarr;<span class="code">Config Element</span>&rarr;<span class="code">LDAP Extended Request Defaults</span>. Then,
select this new element to view its Control Panel.
</p>

<p>
Like most JMeter elements, the <span class="code">LDAP Extended Request Defaults</span> Control Panel has a name
field that you can modify. In this example, leave this field with the default value.
</p>

<p>
<figure>
<a href="../images/screenshots/ldaptest/extrequestdefaults.png"><img src="../images/screenshots/ldaptest/extrequestdefaults.png" width="" height="" alt="
  Figure 8b.2 LDAP Defaults for our Test Plan"></a>
<figcaption>
<br>
  Figure 8b.2 LDAP Defaults for our Test Plan</figcaption>
</figure>

</p>

<p>
            For each of the different operations, some default values can be filled in.
            In All cases, when a default is filled in, this is used for the LDAP extended requests.
            For each request, you can override the defaults by filling in the values in the LDAP extended request sampler.
            When no value is entered which is necessary for a test, the test will fail in an unpredictable way!
            </p>
            We will not enter any default values here, as we will build a very small testplan, so we will explain all the different fields when we add the LDAP Extended samplers.
</div>

<div class="subsection">
<h2 id="add_extrequests">8b.3 Adding LDAP Requests<a class="sectionlink" href="#add_extrequests" title="Link to here">&para;</a>
</h2>

<p>
In our Test Plan, we want to use all 9 LDAP requests.
</p>
   
<ol>

<li>
Thread bind
</li>

<li>
Search Test
</li>

<li>
Compare Test
</li>

<li>
Single bind/unbind Test
</li>

<li>
Add Test
</li>

<li>
Modify Test
</li>

<li>
Rename entry (moddn)
</li>

<li>
Delete Test
</li>

<li>
Thread unbind
</li>

</ol>
   
<p>
JMeter sends requests in the order that you add them to the tree.
</p>

<p>
Adding a requests always start by:<br>
Adding the <span class="code">LDAP Extended Request</span> to the LDAP Ext Users element (<span class="code">Add</span>&rarr;
<span class="code">Sampler</span>&rarr;<span class="code">LDAP Ext Request</span>). Then, select the <span class="code">LDAP Ext Request</span> element in the tree
and edit the following properties.</p>



<div class="subsection">
<h2 id="add_threadbind">8b.3.1 Adding a Thread bind Request<a class="sectionlink" href="#add_threadbind" title="Link to here">&para;</a>
</h2>

<p>
   
<ol>

<li>
Rename the element: "<span class="code">1. Thread bind</span>" 
</li>

<li>
Select the "<span class="code">Thread bind</span>" button.
</li>

<li>
Enter the hostname value from the LDAP server in the Servername field
</li>

<li>
Enter the portnumber from the LDAP server (<span class="code">636</span> : ldap over SSL) in the port field
</li>

<li>

<i>(Optional)</i> Enter the baseDN in the DN field, this baseDN will be used as the starting point for searches, add, deletes, etc.<br>
take care that this must be the uppermost shared level for all your request, e.g. when all information is stored under <span class="code">ou=Users, dc=test, dc=com</span>, you can use this value in the basedn.<br>

</li>

<li>

<i>(Optional)</i> Enter the distinguished name from the user you want to use for authentication.
When this field is kept empty, an anonymous bind will be established.
</li>

<li>

<i>(Optional)</i> Enter the password for the user you want to authenticate with, an empty password will also lead to an anonymous bind.
</li>

<li>

<i>(Optional)</i> Enter a value for the connection timeout with LDAP
</li>

<li>

<i>(Optional)</i> Check the box Use Secure LDAP Protocol if you access with LDAP over SSL (ldaps)
</li>

<li>

<i>(Optional)</i> Check the box TrustAll if you want the client to trust all certificates
</li>

</ol>

</p>

<p>

<figure>
<a href="../images/screenshots/ldaptest/extthreadbind.png"><img src="../images/screenshots/ldaptest/extthreadbind.png" width="" height="" alt="
Figure 8b.3.1. Thread Bind example"></a>
<figcaption>
Figure 8b.3.1. Thread Bind example</figcaption>
</figure>

</p>

</div>


<div class="subsection">
<h2 id="add_searchreq">8b.3.2 Adding a search Request<a class="sectionlink" href="#add_searchreq" title="Link to here">&para;</a>
</h2>

<p>
   
<ol>

<li>
Rename the element: "<span class="code">2. Search Test</span>" 
</li>

<li>
Select the "<span class="code">Search Test</span>" button.
</li>

<li>

<i>(Optional)</i> enter the searchbase under which you want to perform the search, relative to the basedn, used in the thread bind request.<br>
When left empty, the basedn is used as a search base, this files is important if you want to use a "base-entry" or "one-level" search (see below)
</li>

<li>
Enter the searchfilter, any decent LDAP search filter will do, but for now, use something simple, like <span class="code">(sn=Doe)</span> or <span class="code">(cn=*)</span>

</li>

<li>

<i>(Optional)</i> Enter the scope in the scope field, it has three options:
     <ol>
     
<li>baseobject search<br>only the given searchbase is used, only for checking attributes or existence.
     </li>
     
<li>onelevel search<br>Only search in one level below given searchbase is used
     </li>
     
<li>subtree search<br> Searches for object at any point below the given basedn
     </li>
</ol>

</li>

<li>

<i>(Optional)</i> Size limit, specifies the maximum number of returned entries,
</li>

<li>

<i>(Optional)</i> Time limit, specifies the maximum number of milliseconds, the SERVER can use for performing the search. It is NOT the maximum time the application will wait.<br>
When a very large returnset is returned, from a very fast server, over a very slow line, you may have to wait for ages for the completion of the search request, but this parameter will not influence this.
</li>

<li>
<i>(Optional)</i> Attributes you want in the search answer. This can be used to limit the size of the answer, especially when an object has very large attributes (like <span class="code">jpegPhoto</span>). There are three possibilities:
<ol>
<li>Leave empty (the default setting must also be empty) This will return all attributes.
</li>

<li>Put in one empty value (<span class="code">""</span>), it will request a non-existent attributes, so in reality it returns no attributes
</li>

<li>Put in the attributes, separated by a semi-colon. It will return only the requested attributes
</li>
</ol>
</li>

<li>

<i>(Optional)</i> Return object. Checked will return all java-object attributes, it will add these to the requested attributes, as specified above.<br>
Unchecked will mean no java-object attributes will be returned.
</li>

<li>

<i>(Optional)</i> Dereference aliases. Checked will mean it will follow references, Unchecked says it will not.
</li>

<li>

<i>(Optional)</i> Parse the search results?. Checked will mean it gets all results in response data, Unchecked says it will not.
</li>

</ol>

</p>

<p>

<figure>
<a href="../images/screenshots/ldaptest/extsearch.png"><img src="../images/screenshots/ldaptest/extsearch.png" width="" height="" alt="
Figure 8b.3.2. search request example"></a>
<figcaption>
Figure 8b.3.2. search request example</figcaption>
</figure>

</p>
</div>


<div class="subsection">
<h2 id="add_comparereq">8b.3.3 Adding a Compare Request<a class="sectionlink" href="#add_comparereq" title="Link to here">&para;</a>
</h2>

<p>
   
<ol>

<li>
Rename the element: "<span class="code">3. Compare Test</span>" 
</li>

<li>
Select the "<span class="code">Compare</span>" button.
</li>

<li>
enter the entryname form the object on which you want the compare operation to work, relative to the basedn, e.g. "<span class="code">cn=jdoe,ou=Users</span>"
</li>

<li>
Enter the compare filter, this must be in the form "<span class="code">attribute=value</span>", e.g. "<span class="code">mail=jdoe@test.com</span>"
</li>

</ol>

</p>

<p>

<figure>
<a href="../images/screenshots/ldaptest/extcompare.png"><img src="../images/screenshots/ldaptest/extcompare.png" width="" height="" alt="
Figure 8b.3.3. Compare example"></a>
<figcaption>
Figure 8b.3.3. Compare example</figcaption>
</figure>

</p>

</div>


<div class="subsection">
<h2 id="add_sbind">8b.3.4 Adding a Single bind/unbind<a class="sectionlink" href="#add_sbind" title="Link to here">&para;</a>
</h2>

<p>
   
<ol>

<li>
Rename the element: "<span class="code">4. Single bind/unbind Test</span>" 
</li>

<li>
Select the "<span class="code">Single bind/unbind</span>" button.
</li>

<li>
Enter the FULL distinguished name from the user you want to use for authentication.<br>
E.g. <span class="code">cn=jdoe,ou=Users,dc=test,dc=com</span>
When this field is kept empty, an anonymous bind will be established.
</li>

<li>
Enter the password for the user you want to authenticate with, an empty password will also lead to an anonymous bind.
</li>

</ol>

<b>Take care</b>: This single bind/unbind is in reality two separate operations but cannot easily be split!
</p>
<p>

<figure>
<a href="../images/screenshots/ldaptest/extsbind.png"><img src="../images/screenshots/ldaptest/extsbind.png" width="" height="" alt="
Figure 8b.3.4. Single bind/unbind example"></a>
<figcaption>
Figure 8b.3.4. Single bind/unbind example</figcaption>
</figure>

</p>

</div>


<div class="subsection">
<h2 id="add_addreq">8b.3.5 Adding an Add Request<a class="sectionlink" href="#add_addreq" title="Link to here">&para;</a>
</h2>

<p>
   
<ol>

<li>
Rename the element: "<span class="code">5. Add Test</span>" 
</li>

<li>
Select the "<span class="code">Add</span>" button.
</li>

<li>
Enter the distinguished name for the object to add, relative to the basedn.
</li>

<li>
Add a line in the "<span class="code">add test</span>" table, fill in the attribute and value.<br>
When you need the same attribute more than once, just add a new line, add the attribute again, and a different value.<br>
All necessary attributes and values must be specified to pass the test, see picture!<br>
(sometimes the server adds the attribute "<span class="code">objectClass=top</span>", this might give a problem.
</li>

</ol>

</p>

<p>

<figure>
<a href="../images/screenshots/ldaptest/extadd.png"><img src="../images/screenshots/ldaptest/extadd.png" width="" height="" alt="
Figure 8b.3.5. Add request example"></a>
<figcaption>
Figure 8b.3.5. Add request example</figcaption>
</figure>

</p>

</div>


<div class="subsection">
<h2 id="add_modreq">8b.3.6 Adding a Modify Request<a class="sectionlink" href="#add_modreq" title="Link to here">&para;</a>
</h2>

<p>
   
<ol>

<li>
Rename the element: "<span class="code">6. Modify Test</span>" 
</li>

<li>
Select the "<span class="code">Modify test</span>" button.
</li>

<li>
Enter the distinguished name for the object to modify, relative to the basedn.
</li>

<li>
Add a line in the "<span class="code">modify test</span>" table, with the "<span class="code">add</span>" button.
</li>

<li>
You need to enter the attribute you want to modify, (optional) a value, and the opcode. The meaning of this opcode:
<dl>

<dt>
<span class="code">add</span>
</dt>
<dd>this will mean that the attribute value (not optional in this case) will be added to the attribute.<br>
When the attribute is not existing, it will be created and the value added<br>
When it is existing, and defined multi-valued, the new value is added.<br>
when it is existing, but single valued, it will fail.</dd>

<dt>
<span class="code">replace</span>
</dt>
<dd>
This will overwrite the attribute with the given new value (not optional here)<br>
When the attribute is not existing, it will be created and the value added<br>
When it is existing, old values are removed, the new value is added.</dd>

<dt>
<span class="code">delete</span>
</dt>
<dd>
When no value is given, all values will be removed<br>
When a value is given, only that value will be removed<br>
 when the given value is not existing, the test will fail
</dd>

</dl>

</li>

<li>

<i>(Optional)</i> Add more modifications in the "<span class="code">modify test</span>" table.<br>
All modifications which are specified must succeed, to let the modification test pass. When one modification fails, 
NO modifications at all will be made and the entry will remain unchanged.
</li>

</ol>

</p>

<p>

<figure>
<a href="../images/screenshots/ldaptest/extmod.png"><img src="../images/screenshots/ldaptest/extmod.png" width="" height="" alt="
Figure 8b.3.6. Modify example"></a>
<figcaption>
Figure 8b.3.6. Modify example</figcaption>
</figure>

</p>

</div>


<div class="subsection">
<h2 id="add_moddn">8b.3.7 Adding a Rename Request (moddn)<a class="sectionlink" href="#add_moddn" title="Link to here">&para;</a>
</h2>

<p>
   
<ol>

<li>
Rename the element: "<span class="code">7. Rename entry (moddn)</span>" 
</li>

<li>
Select the "<span class="code">Rename Entry</span>" button.
</li>

<li>
Enter the name of the entry, relative to the baseDN, in the "<span class="code">old entry name</span>"-Field.<br>
that is, if you want to rename "<span class="code">cn=Little John Doe,ou=Users</span>", and you set the baseDN to "<span class="code">dc=test,dc=com</span>",
you need to enter "<span class="code">cn=John Junior Doe,ou=Users</span>" in the <span class="code">old entry name</span>-Field.
</li>

<li>
Enter the new name of the entry, relative to the baseDN, in the "<span class="code">new distinguished name</span>"-Field.<br>
when you only change the RDN, it will simply rename the entry<br>
when you also add a different subtree, e.g. you change from <span class="code">cn=john doe,ou=Users</span> to <span class="code">cn=john doe,ou=oldusers</span>, it will move the entry.
You can also move a complete subtree (If your LDAP server supports this!), e.g. <span class="code">ou=Users,ou=retired</span>, to <span class="code">ou=oldusers,ou=users</span>,
this will move the complete subtree, plus all retired people in the subtree to the new place in the tree.
</li>

</ol>

</p>

<p>

<figure>
<a href="../images/screenshots/ldaptest/extmoddn.png"><img src="../images/screenshots/ldaptest/extmoddn.png" width="" height="" alt="
Figure 8b.3.7. Rename example"></a>
<figcaption>
Figure 8b.3.7. Rename example</figcaption>
</figure>

</p>

</div>


<div class="subsection">
<h2 id="add_delreq">8b.3.8 Adding a Delete Request<a class="sectionlink" href="#add_delreq" title="Link to here">&para;</a>
</h2>

<p>
   
<ol>

<li>
Rename the element: "<span class="code">8. Delete Test</span>" 
</li>

<li>
Select the "<span class="code">Delete</span>" button.
</li>

<li>
Enter the name of the entry, relative to the baseDN, in the <span class="code">Delete</span>-Field.<br>
that is, if you want to remove "<span class="code">cn=John Junior Doe,ou=Users,dc=test,dc=com</span>", and you set the baseDN to "<span class="code">dc=test,dc=com</span>",
you need to enter "<span class="code">cn=John Junior Doe,ou=Users</span>" in the <span class="code">Delete</span>-field.
</li>

</ol>

</p>

<p>

<figure>
<a href="../images/screenshots/ldaptest/extdel.png"><img src="../images/screenshots/ldaptest/extdel.png" width="" height="" alt="
Figure 8b.3.8. Delete example"></a>
<figcaption>
Figure 8b.3.8. Delete example</figcaption>
</figure>

</p>

</div>


<div class="subsection">
<h2 id="add_unbind">8b.3.9 Adding an unbind Request<a class="sectionlink" href="#add_unbind" title="Link to here">&para;</a>
</h2>

<p>
   
<ol>

<li>
Rename the element: "<span class="code">9. Thread unbind</span>" 
</li>

<li>
Select the "<span class="code">Thread unbind</span>" button.
This will be enough as it just closes the current connection.
The information which is needed is already known by the system
</li>
</ol>

</p>

<p>

<figure>
<a href="../images/screenshots/ldaptest/extthreadunbind.png"><img src="../images/screenshots/ldaptest/extthreadunbind.png" width="" height="" alt="
Figure 8b.3.9. Unbind example"></a>
<figcaption>
Figure 8b.3.9. Unbind example</figcaption>
</figure>

</p>

</div>

</div>


<div class="subsection">
<h2 id="add_ldapext_listener">8b.4 Adding a Listener to View/Store the Test Results<a class="sectionlink" href="#add_ldapext_listener" title="Link to here">&para;</a>
</h2>

<p>
The final element you need to add to your Test Plan is a Listener.
 This element is responsible for storing all of the results of your LDAP
requests in a file  and presenting a visual model of the data. Select the Thread group
element and add a <span class="code">View Results Tree</span> (<span class="code">Add</span>&rarr;<span class="code">Listener</span>&rarr;<span class="code">View Results Tree</span>)
</p>

<p>

<figure>
<a href="../images/screenshots/ldaptest/extviewtree.png"><img src="../images/screenshots/ldaptest/extviewtree.png" width="" height="" alt="
Figure 8b.4. View Result Tree Listener"></a>
<figcaption>
Figure 8b.4. View Result Tree Listener</figcaption>
</figure>

</p>

<p>
In this listener you have three tabs to view, the sampler result, the request and the response data.
<ol>

<li>
The sampler result just contains the response time, the returncode and return message
</li>

<li>
The request gives a short description of the request that was made, in practice no relevant information
is contained here.
</li>

<li>
The response data contains the full details of the sent request, as well the full details of the received answer,
this is given in a (self defined) xml-style.
<a href="ldapanswer_xml.html">The full description can be found here.</a>

</li>

</ol>

</p>

</div>

</div>
<ul class="pagelinks">
<li>
<a href="build-ldap-test-plan.html">&lt; Prev</a>
</li>
<li>
<a href="../index.html">Index</a>
</li>
<li>
<a href="build-ws-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>
