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