<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Headwired</title>
	
	<link>http://www.headwired.com</link>
	<description>Performance Testing Articles and Tutorials</description>
	<lastBuildDate>Wed, 08 Feb 2012 09:17:55 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/Headwired" /><feedburner:info uri="headwired" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Visual Representation of Process</title>
		<link>http://feedproxy.google.com/~r/Headwired/~3/oWxbHzLEEOw/</link>
		<comments>http://www.headwired.com/articles/visual-representation-of-process/#comments</comments>
		<pubDate>Wed, 08 Feb 2012 09:17:55 +0000</pubDate>
		<dc:creator>Joel Deutscher</dc:creator>
				<category><![CDATA[Articles]]></category>

		<guid isPermaLink="false">http://www.headwired.com/?p=912</guid>
		<description><![CDATA[In most organisations, you will find that while they have a process, nobody seems to know it exactly, or even where to go to find it. The problem, it seems is with the way in which processes are documented. Process documents are usually lamented over at the time of their writing, then shelved without much [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.headwired.com/wp-content/uploads/2011/05/svt_visual_process.png" alt="performance testing visual process" title="performance testing visual process" width="580" height="238" class="aligncenter size-full wp-image-915" /></p>
<p>In most organisations, you will find that while they have a process, nobody seems to know it exactly, or even where to go to find it. The problem, it seems is with the way in which processes are documented.  Process documents are usually lamented over at the time of their writing, then shelved without much thought at all. The reason for this I believe is that there is primarily only two times when a process document is actually referenced:</p>
<ol>
<li>When a new employee joins the team, and is shown how things are done</li>
<li>When a higher manager asks &#8220;how does your team operate&#8221;</li>
</ol>
<p>In my mind, I would much prefer a simpler process flow that is actually used by staff, even if it doesn&#8217;t cover every possible eventuality along the way. The visual process document provides the most effective way of presenting the flow of how we go about completing our tasks. Its typically printable on one page (though it might have to be A3), it&#8217;s pinnable to your office cubicle, and sometimes as importantly, can be pasted into powerpoint presentations for the business.</p>
<p>So how do you present your testing process?</p>
<img src="http://feeds.feedburner.com/~r/Headwired/~4/oWxbHzLEEOw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.headwired.com/articles/visual-representation-of-process/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.headwired.com/articles/visual-representation-of-process/</feedburner:origLink></item>
		<item>
		<title>An Alternative to System Info Wallpaper</title>
		<link>http://feedproxy.google.com/~r/Headwired/~3/AmcsBEtEwCE/</link>
		<comments>http://www.headwired.com/articles/an-alternative-to-system-info-wallpaper/#comments</comments>
		<pubDate>Wed, 21 Dec 2011 05:04:33 +0000</pubDate>
		<dc:creator>Joel Deutscher</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Controller]]></category>
		<category><![CDATA[Quick Tip]]></category>
		<category><![CDATA[Tips and Tricks]]></category>
		<category><![CDATA[Toolbox]]></category>

		<guid isPermaLink="false">http://www.headwired.com/?p=1054</guid>
		<description><![CDATA[I have setup many machines to control and generate load. My initial experiences was with LINUX based systems, then as the tools progressed, the operating systems regressed onto the Windows platform. It seemed that back in the days of KVM&#8217;s, setting a new background colour for each machine was the way to tell them apart. [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.headwired.com/wp-content/uploads/2011/12/rainmeter.png" alt="Rainmeter" title="rainmeter" width="580" height="250" class="aligncenter size-full wp-image-1055" />I have setup many machines to control and generate load. My initial experiences was with LINUX based systems, then as the tools progressed, the operating systems regressed onto the Windows platform. It seemed that back in the days of KVM&#8217;s, setting a new background colour for each machine was the way to tell them apart. Next came the system information imprinted on a wallpaper with tools like <a href="http://technet.microsoft.com/en-gb/sysinternals/bb897557">BgInfo</a> from SysInternals. Unfortunately for this approach, a majority of RDP clients are setup to remove wallpapers (and should be if they aren&#8217;t). So in 2011 do we have a better way of displaying machine information on the desktop?<br />
<span id="more-1054"></span><br />
Enter <a href="http://www.rainmeter.net/">Rainmeter</a>. Anyone who reads Lifehacker and seen their <a href="http://lifehacker.com/featured-home-screen/">Featured Home Screen</a> section would be very familiar with what this tool can do. Best of all, for my purpose at least, is that Rainmeter shows up over RDP even when the wallpapers are turned off. My initial intention was to simply display the system name and possibly the IP address, though after playing with the tool, I was able to quickly create something that would be a little more useful. Using the Welcome example from the default illustro skin, I was able to provide a brief summary of the current system metrics as well as some short-cut links to my tools and directories, and given how hard is it to find anything in Windows Server 2008, this is a good thing. This also gets rid of creating stupid bitmap wallpapers on each machine.</p>
<p>While I might have gone a little bit overboard with this one, keep Rainmeter in mind if you are trying to display the system information without having to worry if your users have wallpapers turned on or off.</p>
<img src="http://feeds.feedburner.com/~r/Headwired/~4/AmcsBEtEwCE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.headwired.com/articles/an-alternative-to-system-info-wallpaper/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.headwired.com/articles/an-alternative-to-system-info-wallpaper/</feedburner:origLink></item>
		<item>
		<title>Building a realistic load profile with Analytics</title>
		<link>http://feedproxy.google.com/~r/Headwired/~3/avw-wCj7Avs/</link>
		<comments>http://www.headwired.com/articles/building-a-realistic-load-profile-with-analytics/#comments</comments>
		<pubDate>Mon, 12 Dec 2011 23:13:30 +0000</pubDate>
		<dc:creator>Joel Deutscher</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Analytics]]></category>
		<category><![CDATA[Google]]></category>

		<guid isPermaLink="false">http://www.headwired.com/?p=1004</guid>
		<description><![CDATA[One of the most important parts of a successful Performance Test is getting the requirements right. No matter what tool you use or how well you script, your test won&#8217;t succeed if you are not accurately simulating end-user activity on the application. Traditionally, the user volume has been a mix of current load levels from [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.headwired.com/wp-content/uploads/2011/12/google-analytics-real-time.png" alt="Google Analytics Real Time" title="google-analytics-real-time" width="580" height="312" class="aligncenter size-full wp-image-1005" /><br />
One of the most important parts of a successful Performance Test is getting the requirements right. No matter what tool you use or how well you script, your test won&#8217;t succeed if you are not accurately simulating end-user activity on the application. Traditionally, the user volume has been a mix of current load levels from log files and projected load from the business. More recently, analytics have been so easily implementable that every site these days, even small blogs, have analytics information. </p>
<p>So how can we use Analytics to help build a realistic load profile for performance testing?<br />
<span id="more-1004"></span><br />
A <a href="http://loadstorm.com/2011/using-web-analytics-modeling-application-usage-performance-tests">post</a> by Suraj Sundarrajan (<a href="http://twitter.com/perfengineering" title="@perfengineering">@perfengineering</a>) highlighted some of the current uses of GA in modelling user behaviour for performance testing. These include the calculation of user idle time, 3rd party web components like Flash, Silverlight &#038; AJAX and a current area of interest for me, cache.</p>
<blockquote><p>  Industry reports suggest that ‘Cached pages’ can account for up to one-third of all page views. Due to its obvious performance benefits, browser caching mechanism is being extensively used by application developers. Web server logs do not (and will not be able to) capture user activity metrics for cached pages as no request is made to the Web server. On the contrary, Web Analytics tools track visits to cached pages (as they track usage from users’ browser) and thus provide a more accurate picture of “browser caching” on the web application. Performance testers can use this information to determine what percentage of total application usage is being cached and emulate this browser behavior in the load test scenario. &#8211; Suraj Sundarrajan</p></blockquote>
<p>Suraj does a great job of describing some of the elements of Analytics that will help performance testers build a realistic load profile. Though I hear you saying &#8220;Analytics? So what, Google Analytics have been publicly available since 2006, and there were many options before then&#8221;. This is exactly where I was headed. Though I am impressed with the new features of GA, one of the most valuable additions isn&#8217;t actually a feature at all. It&#8217;s the fact that they have been around so long, and that we now have enough history to start to evaluate trends. Combining this data with projected business usage provides another invaluable source of information to help ensure a successful performance test.</p>
<img src="http://feeds.feedburner.com/~r/Headwired/~4/avw-wCj7Avs" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.headwired.com/articles/building-a-realistic-load-profile-with-analytics/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.headwired.com/articles/building-a-realistic-load-profile-with-analytics/</feedburner:origLink></item>
		<item>
		<title>Using mldap_modify &amp; mldap_delete functions in LoadRunner</title>
		<link>http://feedproxy.google.com/~r/Headwired/~3/1AuqcA0cyH8/</link>
		<comments>http://www.headwired.com/articles/using-mldap_modify-mldap_delete-functions-in-loadrunner/#comments</comments>
		<pubDate>Tue, 20 Sep 2011 02:43:06 +0000</pubDate>
		<dc:creator>Joel Deutscher</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[LDAP]]></category>
		<category><![CDATA[LoadRunner]]></category>
		<category><![CDATA[Tips and Tricks]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://www.headwired.com/?p=988</guid>
		<description><![CDATA[I have written before about using the LDAP protocol using LoadRunner. This time, I had a requirement to reset the passwords for all my test users before an execution. Luckily for me, there was already some shell scripts setup that utilised ldapmodify, so it was just a matter of converting them over to LoadRunner scripts. [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.headwired.com/wp-content/uploads/2011/09/deleted.png" alt="Deleted" title="deleted" width="580" height="202" class="aligncenter size-full wp-image-1032" /><br />
I have written before about using the LDAP protocol using LoadRunner. This time, I had a requirement to reset the passwords for all my test users before an execution.  Luckily for me, there was already some shell scripts setup that utilised ldapmodify, so it was just a matter of converting them over to LoadRunner scripts.<br />
<span id="more-988"></span><br />
After binding to the LDAP server, the first command was to delete the users password history to get around the password policy. The batch file called the ldapmodify function like below</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;">ldapmodify <span style="color: #339933;">-</span>h ldap.<span style="color: #202020;">headwired</span>.<span style="color: #202020;">com</span> <span style="color: #339933;">-</span>p <span style="color: #0000dd;">389</span> <span style="color: #339933;">-</span>D <span style="color: #ff0000;">'cn=Directory Manager'</span> <span style="color: #339933;">-</span>w PASSWORD <span style="color: #339933;">&lt;&lt;</span>EOF
&nbsp;
dn<span style="color: #339933;">:</span> uid<span style="color: #339933;">=</span>$USERNAME<span style="color: #339933;">,</span>ou<span style="color: #339933;">=</span>people<span style="color: #339933;">,</span>dc<span style="color: #339933;">=</span>headwired<span style="color: #339933;">,</span>dc<span style="color: #339933;">=</span>com
changetype<span style="color: #339933;">:</span> modify
delete<span style="color: #339933;">:</span> passwordHistory
&nbsp;
EOF</pre></div></div>

<p>As the action is actually a delete, this translates to the mldap_delete function in LoadRunner.</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// Clear Password History</span>
mldap_delete<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;LDAP Delete&quot;</span><span style="color: #339933;">,</span> 
      <span style="color: #ff0000;">&quot;DN=uid={USERNAME},ou=people,dc=headwired,dc=com &quot;</span><span style="color: #339933;">,</span> 
      <span style="color: #ff0000;">&quot;AttrName=passwordHistory&quot;</span><span style="color: #339933;">,</span> 
      LAST <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>The next step was reseting the actual password, and here is the script again. Note that as the script must authenticate every time it calls ldapmodify.</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;">ldapmodify <span style="color: #339933;">-</span>h ldap.<span style="color: #202020;">headwired</span>.<span style="color: #202020;">com</span> <span style="color: #339933;">-</span>p <span style="color: #0000dd;">389</span> <span style="color: #339933;">-</span>D <span style="color: #ff0000;">'cn=Directory Manager'</span> <span style="color: #339933;">-</span>w PASSWORD <span style="color: #339933;">&lt;&lt;</span>EOF
&nbsp;
dn<span style="color: #339933;">:</span> uid<span style="color: #339933;">=</span>$USERNAME<span style="color: #339933;">,</span>ou<span style="color: #339933;">=</span>people<span style="color: #339933;">,</span>dc<span style="color: #339933;">=</span>headwired<span style="color: #339933;">,</span>dc<span style="color: #339933;">=</span>com
changetype<span style="color: #339933;">:</span> modify
replace<span style="color: #339933;">:</span> userpassword
userpassword<span style="color: #339933;">:</span> $PASSWORD
&nbsp;
EOF</pre></div></div>

<p>This time, we will use the mldap_modify function to change the userpassword value</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// Update Password</span>
mldap_modify<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;LDAP Modify&quot;</span><span style="color: #339933;">,</span> 
      <span style="color: #ff0000;">&quot;DN=uid={USERNAME},ou=people,dc=headwired,dc=com&quot;</span><span style="color: #339933;">,</span> 
      <span style="color: #ff0000;">&quot;AttrName=userpassword&quot;</span><span style="color: #339933;">,</span>   <span style="color: #666666; font-style: italic;">// Name of attribute </span>
      <span style="color: #ff0000;">&quot;AttrValue={PASSWORD}&quot;</span><span style="color: #339933;">,</span>    	<span style="color: #666666; font-style: italic;">// New Value </span>
      LAST <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>While the task to be performed here is very trivial, it’s a simple demonstration of the mldap_modify and mldap_delete functions. The full script is below.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
</pre></td><td class="code"><pre class="c" style="font-family:monospace;">Action<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
  <span style="color: #666666; font-style: italic;">// LDAP Bind</span>
  mldap_logon<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;TRANSACTION_NAME&quot;</span><span style="color: #339933;">,</span>
        <span style="color: #ff0000;">&quot;URL=ldap://cn=Directory Manager:PASSWORD@ldap.headwired.com:389/ &quot;</span><span style="color: #339933;">,</span>
        <span style="color: #ff0000;">&quot;Version=3&quot;</span><span style="color: #339933;">,</span>
        <span style="color: #ff0000;">&quot;Mode=Async&quot;</span><span style="color: #339933;">,</span>
        LAST<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
  <span style="color: #666666; font-style: italic;">// Clear Password History</span>
  mldap_delete<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;LDAP Delete&quot;</span><span style="color: #339933;">,</span> 
        <span style="color: #ff0000;">&quot;DN=uid={USERNAME},ou=people,dc=headwired,dc=com &quot;</span><span style="color: #339933;">,</span> 
        <span style="color: #ff0000;">&quot;AttrName=passwordHistory&quot;</span><span style="color: #339933;">,</span> 
        LAST <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
  <span style="color: #666666; font-style: italic;">// Update Password</span>
  mldap_modify<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;LDAP Modify&quot;</span><span style="color: #339933;">,</span> 
        <span style="color: #ff0000;">&quot;DN=uid={USERNAME},ou=people,dc=headwired,dc=com&quot;</span><span style="color: #339933;">,</span> 
        <span style="color: #ff0000;">&quot;AttrName=userpassword&quot;</span><span style="color: #339933;">,</span>   <span style="color: #666666; font-style: italic;">// Name of attribute </span>
        <span style="color: #ff0000;">&quot;AttrValue={PASSWORD}&quot;</span><span style="color: #339933;">,</span>    	<span style="color: #666666; font-style: italic;">// New Value </span>
        LAST <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
  <span style="color: #b1b100;">return</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<img src="http://feeds.feedburner.com/~r/Headwired/~4/1AuqcA0cyH8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.headwired.com/articles/using-mldap_modify-mldap_delete-functions-in-loadrunner/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.headwired.com/articles/using-mldap_modify-mldap_delete-functions-in-loadrunner/</feedburner:origLink></item>
		<item>
		<title>Performance Testing SOAP with LoadRunner – Basics</title>
		<link>http://feedproxy.google.com/~r/Headwired/~3/G0DVjrz0ubE/</link>
		<comments>http://www.headwired.com/articles/performance-testing-soap-with-loadrunner-basics/#comments</comments>
		<pubDate>Wed, 10 Aug 2011 06:28:58 +0000</pubDate>
		<dc:creator>Joel Deutscher</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[LoadRunner]]></category>
		<category><![CDATA[SOAP]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[Web Services]]></category>

		<guid isPermaLink="false">http://www.headwired.com/?p=10</guid>
		<description><![CDATA[Web services are more commonly becoming the targets of Performance tests. This post aims to provide an introduction to testing SOAP with LoadRunner without using the Web Services VUser type. Why not use the Web Services Vuser? Errors like this System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---&#38;gt; System.Xml.XmlException: 'xsi' is [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.headwired.com/wp-content/uploads/2011/08/soap.jpg" alt="Simple Object Access Protocol (SOAP)" title="soap" width="580" height="250" class="aligncenter size-full wp-image-1035" />Web services are more commonly becoming the targets of Performance tests. This post aims to provide an introduction to testing SOAP with LoadRunner without using the Web Services VUser type. Why not use the Web Services Vuser? Errors like this</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;">System.<span style="color: #202020;">Reflection</span>.<span style="color: #202020;">TargetInvocationException</span><span style="color: #339933;">:</span> Exception has been thrown by the target of an invocation. <span style="color: #339933;">---&amp;</span>gt<span style="color: #339933;">;</span> System.<span style="color: #202020;">Xml</span>.<span style="color: #202020;">XmlException</span><span style="color: #339933;">:</span> <span style="color: #ff0000;">'xsi'</span> is an undeclared namespace.</pre></div></div>

<p>Using the custom web request (as suggested by <a href="http://www.wilsonmar.com/1lrscript.htm#WebSvcs">Wilson Mar</a>, <a href="http://www.myloadtest.com/web-service-testing-with-standard-web-vuser/">Stuart Moncrieff</a> and many others) bypasses the XML validation steps of LoadRunner, which is a good thing. This is possible because SOAP is just XML over HTTP, so lets take a look.<br />
<span id="more-10"></span></p>
<h1>Understanding SOAP</h1>
<p>A typical SOAP message is made up of header and body encapsulated in a SOAP envelope. The SOAP header contains application-specific information (like authentication, payment, etc) about the SOAP message. The header is optional, yet if present, must be the first child element of the Envelope. The SOAP body element contains the actual message.<br />
<a href="http://en.wikipedia.org/wiki/File:SOAP.svg"><img src="http://www.headwired.com/wp-content/uploads/2011/04/200px-SOAP.svg_.png" alt="SOAP Envelope" title="SOAP Envelope" width="200" height="213" class="aligncenter size-full wp-image-834" /></a>As SOAP uses HTTP as an application protocol, it utilises a request / response model. A SOAP request is sent to the endpoint via a HTTP POST and the returned SOAP message uses the same response codes for HTTP (200 OK, etc).  This request is to get the stock price for the ticker symbol HWB (Headwired Bank), with the response returning a price of $460.75 as the last traded price.</p>
<h3>SOAP Request</h3>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;">POST /StockQuote HTTP/1.1
Host: headwired.com
Content-Type: text/xml; charset=&quot;utf-8&quot;
Content-Length: 1452
&nbsp;
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;soapenv:Envelope</span> <span style="color: #000066;">xmlns:soapenv</span>=<span style="color: #ff0000;">&quot;http://schemas.xmlsoap.org/soap/envelope/&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;soapenv:Body<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;m:GetLastTradePrice</span> <span style="color: #000066;">xmlns:m</span>=<span style="color: #ff0000;">&quot;headwired.com&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
            <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;m:tickerSymbol<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>HWB<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/m:tickerSymbol<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/m:GetLastTradePrice<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/soapenv:Body<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/soapenv:Envelope<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<h3>SOAP Response</h3>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;">HTTP/1.1 200 OK
Content-Type: text/xml; charset=&quot;utf-8&quot;
Content-Length: 1298
&nbsp;
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;soapenv:Envelope</span> <span style="color: #000066;">xmlns:soapenv</span>=<span style="color: #ff0000;">&quot;http://schemas.xmlsoap.org/soap/envelope/&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;soapenv:Body<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;m:GetLastTradePriceResponse</span> <span style="color: #000066;">xmlns:m</span>=<span style="color: #ff0000;">&quot;Some-URI&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
            <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;m:price<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>460.75<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/m:price<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/m:GetLastTradePriceResponse<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/soapenv:Body<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/soapenv:Envelope<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<h2>SOAP as a Web Service</h2>
<p>As a Web Service, the structure of all supported SOAP requests and responses are provided in a WSDL (Web Service Definitions Language). A WSDL provides the following information:</p>
<ul>
<li> The interactions service provided</li>
<li> The arguments and results are involved in the interactions</li>
<li> The network addresses are used to locate the service</li>
<li> The communication protocol that should be used</li>
<li> The data formats that messages are represented in</li>
</ul>
<p>In our example SOAP web have a structure for our request in the SOAP body. We have a <em>GetLastTradePrice</em> tag, with a child tickerSymbol . How can we determine that this is what we need to submit by looking at the WSDL? The following WSDL definition declares what elements should be in GetLastTradePrice input request.</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;message</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;GetLastTradePriceInput&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;part</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;body&quot;</span> <span style="color: #000066;">element</span>=<span style="color: #ff0000;">&quot;xsd1:TradePriceRequest&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/message<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<p>This specifies that our input should contain the “ TradePriceRequest” element which is also defined in the WSDL. The definition is for one element “tickerSymbol” that must be a string value.</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;element</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;TradePriceRequest&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;complexType<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;all<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
      <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;element</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;tickerSymbol&quot;</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">&quot;string&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/all<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/complexType<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/element<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<p>The WSDL will also specify the response that we should expect from this request.</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;message</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;GetLastTradePriceOutput&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;part</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;body&quot;</span> <span style="color: #000066;">element</span>=<span style="color: #ff0000;">&quot;xsd1:TradePrice&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/message<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<p>This specifies that our input should contain the “TradePrice” element which is also defined in the WSDL. The definition is for one element “price” that will contain a float value.</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;element</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;TradePrice&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;complexType<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;all<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
      <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;element</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;price&quot;</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">&quot;float&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/all<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/complexType<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/element<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<p>The WSDL below is a rough example of the stock service that would be used by the example SOAP.</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;?xml</span> <span style="color: #000066;">version</span>=<span style="color: #ff0000;">&quot;1.0&quot;</span><span style="color: #000000; font-weight: bold;">?&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;definitions</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;Stock&quot;</span> <span style="color: #000066;">targetNamespace</span>=<span style="color: #ff0000;">&quot;http://headwired.com/stock.wsdl&quot;</span></span>
<span style="color: #009900;">       <span style="color: #000066;">xmlns:tns</span>=<span style="color: #ff0000;">&quot;http://headwired.com/stock.wsdl&quot;</span></span>
<span style="color: #009900;">       <span style="color: #000066;">xmlns:xsd1</span>=<span style="color: #ff0000;">&quot;http://headwired.com/stock.xsd&quot;</span></span>
<span style="color: #009900;">       <span style="color: #000066;">xmlns:soap</span>=<span style="color: #ff0000;">&quot;http://schemas.xmlsoap.org/wsdl/soap/&quot;</span></span>
<span style="color: #009900;">       <span style="color: #000066;">xmlns</span>=<span style="color: #ff0000;">&quot;http://schemas.xmlsoap.org/wsdl/&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;types<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;schema</span> <span style="color: #000066;">targetNamespace</span>=<span style="color: #ff0000;">&quot;http://headwired.com/stock.xsd&quot;</span></span>
<span style="color: #009900;">            <span style="color: #000066;">xmlns</span>=<span style="color: #ff0000;">&quot;http://www.w3.org/2000/10/XMLSchema&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
      <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;element</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;TradePriceRequest&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;complexType<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
          <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;all<span style="color: #000000; font-weight: bold;">&gt;</span></span><span style="color: #000000; font-weight: bold;">&lt;element</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;tickerSymbol&quot;</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">&quot;string&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span><span style="color: #000000; font-weight: bold;">&lt;/all<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/complexType<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
      <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/element<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
      <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;element</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;TradePrice&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;complexType<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
          <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;all<span style="color: #000000; font-weight: bold;">&gt;</span></span><span style="color: #000000; font-weight: bold;">&lt;element</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;price&quot;</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">&quot;float&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span><span style="color: #000000; font-weight: bold;">&lt;/all<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/complexType<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
      <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/element<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/schema<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/types<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;message</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;GetLastTradePriceInput&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;part</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;body&quot;</span> <span style="color: #000066;">element</span>=<span style="color: #ff0000;">&quot;xsd1:TradePriceRequest&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/message<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;message</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;GetLastTradePriceOutput&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;part</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;body&quot;</span> <span style="color: #000066;">element</span>=<span style="color: #ff0000;">&quot;xsd1:TradePrice&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/message<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;portType</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;StockPortType&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;operation</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;GetLastTradePrice&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
      <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;input</span> <span style="color: #000066;">message</span>=<span style="color: #ff0000;">&quot;tns:GetLastTradePriceInput&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
      <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;output</span> <span style="color: #000066;">message</span>=<span style="color: #ff0000;">&quot;tns:GetLastTradePriceOutput&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/operation<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/portType<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;binding</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;StockSoapBinding&quot;</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">&quot;tns:StockPortType&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;soap:binding</span> <span style="color: #000066;">style</span>=<span style="color: #ff0000;">&quot;document&quot;</span> <span style="color: #000066;">transport</span>=<span style="color: #ff0000;">&quot;http://schemas.xmlsoap.org/soap/http&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;operation</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;GetLastTradePrice&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
           <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;soap:operation</span> <span style="color: #000066;">soapAction</span>=<span style="color: #ff0000;">&quot;http://headwired.com/GetLastTradePrice&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
           <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;input<span style="color: #000000; font-weight: bold;">&gt;</span></span><span style="color: #000000; font-weight: bold;">&lt;soap:body</span> <span style="color: #000066;">use</span>=<span style="color: #ff0000;">&quot;literal&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span><span style="color: #000000; font-weight: bold;">&lt;/input<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
           <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;output<span style="color: #000000; font-weight: bold;">&gt;</span></span><span style="color: #000000; font-weight: bold;">&lt;soap:body</span> <span style="color: #000066;">use</span>=<span style="color: #ff0000;">&quot;literal&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span><span style="color: #000000; font-weight: bold;">&lt;/output<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/operation<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/binding<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;service</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;StockService&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;documentation<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>My first service<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/documentation<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;port</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;StockPort&quot;</span> <span style="color: #000066;">binding</span>=<span style="color: #ff0000;">&quot;tns:StockBinding&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
           <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;soap:address</span> <span style="color: #000066;">location</span>=<span style="color: #ff0000;">&quot;http://headwired.com/stock&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/port<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/service<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/definitions<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<h1>SOAP With LoadRunner Custom Requests</h1>
<p>SOAP in its most basic form is XML + HTTP. Therefore, we can use the LoadRunner web_custom_request function to manually specify our SOAP message. This method is more verbose than a web_service_call script, yet as it is a web request, there is no XML parsing performed by LoadRunner. This can be very useful if your web_service_call scripts are returning errors.</p>
<p>Scripting a web service is different a web page. Firstly, unless you have a client application, you will not be able to record and replay, instead you will have to recreate the web service calls based on logs, interface specification documents or a WSDL. It is also important to understand how the operations of the web service will be used in production.</p>
<h2>Setup</h2>
<p>This section discusses the steps to setup your LoadRunner script to commence scripting.</p>
<h3>Script Type</h3>
<p>A web_custom_request script for SOAP should be created as a “Web (HTTP/HTML)” script. This allows for Internet Protocol Run Time settings to be configured for handling authentication in a more effective way (read:  web_set_sockets_option).</p>
<p><img src="http://www.headwired.com/wp-content/uploads/2011/04/web_http_script.png" alt="Web HTTP Script in LoadRunner" title="web_http_script" width="277" height="106" class="aligncenter size-full wp-image-843" /></p>
<h2>Authentication</h2>
<p>The web service you are using may require HTTP level Authentication in order to access the web service operations. This can be performed using a simple web_set_user  command in LoadRunner.  To avoid a Authentication Error on your first request, the web_set_sockets_option can be configured along with the &#8220;Enable Integrated Authentication&#8221; run-time setting to avoid this issue.</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// Requires &quot;Enable Integrated Authentication&quot; to be set to &quot;yes&quot;</span>
web_set_sockets_option<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;INITIAL_BASIC_AUTH&quot;</span><span style="color: #339933;">,</span><span style="color: #ff0000;">&quot;1&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #666666; font-style: italic;">// Authenticate</span>
web_set_user<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;USERNAME&quot;</span><span style="color: #339933;">,</span><span style="color: #ff0000;">&quot;PASSWORD&quot;</span><span style="color: #339933;">,</span><span style="color: #ff0000;">&quot;www.headwired.com:443&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>To enable integrated authentication, open “Run-time Settings &gt; Internet Protocol &gt; Preferences &gt; Set Advanced Options” and select yes for “Enable Integrated Authentication”. More information about authentication can be found <a href="http://altentee.com/2009/improved-spnego-or-kerberos-support-with-loadrunner/">here</a>.</p>
<p><img src="http://www.headwired.com/wp-content/uploads/2011/04/enable_integrated_authentication.png" alt="Enable Integrated Authentication in LoadRunner" title="enable_integrated_authentication" width="470" height="492" class="aligncenter size-full wp-image-844" /></p>
<p>There may also be the requirement to login using multiple authentication pairs throughout the test. This is possible through the use of the web_cleanup_cookies function. This function will remove all cookies related to the VUser, including NTLM authentication cookies.</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// Clear previous logins</span>
web_cleanup_cookies<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<h1>Scripting</h1>
<h2>Making the Request</h2>
<p>In order to use the web_custom_request function for SOAP, we must specify that we will be submitting text/xml. The web_add_header function is used to specify this.</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// Set Headers to plain text / xml</span>
web_add_header<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Content-Type&quot;</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;text/xml; charset=utf8&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>The web_custom_request is pretty straightforward. You specify your URL, Method and Body of the request. The SOAP message, including XML specification and Envelope is placed in the Body section of the request.</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;">web_custom_request<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Transaction_Name&quot;</span><span style="color: #339933;">,</span> 
	<span style="color: #ff0000;">&quot;URL=https://www.headwired.com/StockQuote&quot;</span><span style="color: #339933;">,</span> 
	<span style="color: #ff0000;">&quot;Method=POST&quot;</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;TargetFrame=&quot;</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;Resource=0&quot;</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;Referer=&quot;</span><span style="color: #339933;">,</span> 
	<span style="color: #ff0000;">&quot;Body=&lt;?xml version=<span style="color: #000099; font-weight: bold;">\&quot;</span>1.0<span style="color: #000099; font-weight: bold;">\&quot;</span> encoding=<span style="color: #000099; font-weight: bold;">\&quot;</span>ISO-8859-1<span style="color: #000099; font-weight: bold;">\&quot;</span>?&gt;&quot;</span> 
	<span style="color: #339933;">&lt;</span>SOAP Envelope Here<span style="color: #339933;">&gt;</span>
	<span style="color: #ff0000;">&quot;Snapshot=t1.inf&quot;</span><span style="color: #339933;">,</span>
	LAST<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<h2>Verifying the Response</h2>
<p>The simplest way to verify the response of a SOAP request is to use the web_reg_find function. This allows the specification of text that must be matched within the response text.</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// Ensure the response contains correct text</span>
web_reg_find<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Text=GetLastTradePriceResponse&quot;</span><span style="color: #339933;">,</span>LAST<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>To extract data from the response and save it as a parameter, you may also use the web_reg_save_param function.  In the example below, the entire XML response, including HTTP headers is saved in the “response” variable.</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// Save entire response as a string</span>
web_reg_save_param<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;response&quot;</span><span style="color: #339933;">,</span><span style="color: #ff0000;">&quot;LB=&quot;</span><span style="color: #339933;">,</span><span style="color: #ff0000;">&quot;RB=&quot;</span><span style="color: #339933;">,</span>LAST<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<h1>Debugging Tips</h1>
<p>Perhaps the easiest way to debug a web services script that utilises the web_custom_request function is to enable “Visual test results”. This feature can be enabled via the VuGen General Options, Replay Tab</p>
<p><img src="http://www.headwired.com/wp-content/uploads/2011/04/virual_test_results.png" alt="Visual Test Results" title="virual_test_results" width="373" height="258" class="aligncenter size-full wp-image-845" /></p>
<p>The visual test results will display a report after replaying a script and provide you a script tree view, and allow you to view the XML response from the SOAP server.</p>
<h1>Example Script</h1>
<p>The following is a LoadRunner script that will send our sample SOAP request to the server. It will ensure that the response contains the term “GetLastTradePriceResponse”. As SOAP uses HTTP, any HTTP level errors (401, 500) will also automatically be failed by LoadRunner.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
</pre></td><td class="code"><pre class="c" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// Ensure the response contains correct text</span>
web_reg_find<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Text=GetLastTradePriceResponse&quot;</span><span style="color: #339933;">,</span>LAST<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// Set Headers to plain text / xml</span>
web_add_header<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Content-Type&quot;</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;text/xml; charset=ISO-8859-1&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
&nbsp;
<span style="color: #666666; font-style: italic;">// Submit SOAP Request</span>
lr_start_transaction<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;SOAP_GetLastTradePrice&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
web_custom_request<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;SOAP_GetLastTradePrice&quot;</span><span style="color: #339933;">,</span> 
	<span style="color: #ff0000;">&quot;URL=http://www.headwired.com/stock&quot;</span><span style="color: #339933;">,</span> 
	<span style="color: #ff0000;">&quot;Method=POST&quot;</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;TargetFrame=&quot;</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;Resource=0&quot;</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;Referer=&quot;</span><span style="color: #339933;">,</span> 
	<span style="color: #ff0000;">&quot;Body=&lt;?xml version=<span style="color: #000099; font-weight: bold;">\&quot;</span>1.0<span style="color: #000099; font-weight: bold;">\&quot;</span> encoding=<span style="color: #000099; font-weight: bold;">\&quot;</span>ISO-8859-1<span style="color: #000099; font-weight: bold;">\&quot;</span>?&gt;&quot;</span> 
<span style="color: #ff0000;">&quot;&lt;soapenv:Envelope xmlns:soapenv=<span style="color: #000099; font-weight: bold;">\&quot;</span>http://schemas.xmlsoap.org/soap/envelope/<span style="color: #000099; font-weight: bold;">\&quot;</span>&gt;&quot;</span>
  <span style="color: #ff0000;">&quot;&lt;soapenv:Body&gt;&quot;</span>
    <span style="color: #ff0000;">&quot;&lt;m:GetLastTradePrice xmlns:m=<span style="color: #000099; font-weight: bold;">\&quot;</span>Some-URI<span style="color: #000099; font-weight: bold;">\&quot;</span>&gt;&quot;</span>
      <span style="color: #ff0000;">&quot;&lt;m:tickerSymbol&gt;HWB&lt;/m:tickerSymbol&gt;&quot;</span>
    <span style="color: #ff0000;">&quot;&lt;/m:GetLastTradePrice&gt;&quot;</span>
  <span style="color: #ff0000;">&quot;&lt;/soapenv:Body&gt;&quot;</span>
<span style="color: #ff0000;">&quot;&lt;/soapenv:Envelope&gt;&quot;</span>
	<span style="color: #ff0000;">&quot;Snapshot=t1.inf&quot;</span><span style="color: #339933;">,</span>
	LAST<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
lr_end_transaction<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;SOAP_GetLastTradePrice&quot;</span><span style="color: #339933;">,</span> LR_AUTO<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<div class="references">
<h1>Links and References</h1>
<p><a href="http://www.w3schools.com/soap/">W3Schools SOAP Tutorial</a><br />
<a href="http://www.w3.org/TR/wsdl">WSDL Authentication</a><br />
<a href="http://90kts.com/blog/2009/improved-spnego-or-kerberos-support-with-loadrunner/">Authentication</a></p>
</div>
<img src="http://feeds.feedburner.com/~r/Headwired/~4/G0DVjrz0ubE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.headwired.com/articles/performance-testing-soap-with-loadrunner-basics/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.headwired.com/articles/performance-testing-soap-with-loadrunner-basics/</feedburner:origLink></item>
		<item>
		<title>Quick Tip – LoadRunner Download Filters and Proxy Servers</title>
		<link>http://feedproxy.google.com/~r/Headwired/~3/Iaqn4tKcOXs/</link>
		<comments>http://www.headwired.com/articles/quick-tip-loadrunner-download-filters-and-proxy-servers/#comments</comments>
		<pubDate>Tue, 24 May 2011 11:40:20 +0000</pubDate>
		<dc:creator>Joel Deutscher</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[LoadRunner]]></category>
		<category><![CDATA[Quick Tip]]></category>
		<category><![CDATA[Tips and Tricks]]></category>
		<category><![CDATA[VUGen]]></category>

		<guid isPermaLink="false">http://www.headwired.com/?p=890</guid>
		<description><![CDATA[A previously mentioned the move from a download filters black list to a white list to avoid hitting servers outside of our testing scope. One interesting outcome of this change was a nasty C compile error. Error: C interpreter run time error: Action.c &#40;39&#41;: Error -- memory violation : Exception ACCESS_VIOLATION received. As it turns [...]]]></description>
			<content:encoded><![CDATA[<p>A <a href="http://www.headwired.com/2011/loadrunner-and-iframes/">previously mentioned</a> the move from a download filters black list to a white list to avoid hitting servers outside of our testing scope.</p>
<p><img src="http://www.headwired.com/wp-content/uploads/2011/05/download_filters-580x432.png" alt="LoadRunner Download Filters" title="LoadRunner Download Filters" width="580" height="432" class="aligncenter size-large wp-image-900" /></p>
<p>One interesting outcome of this change was a nasty C compile error.</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;">Error<span style="color: #339933;">:</span> C interpreter run time error<span style="color: #339933;">:</span> Action.<span style="color: #202020;">c</span> <span style="color: #009900;">&#40;</span><span style="color: #0000dd;">39</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">:</span>  Error <span style="color: #339933;">--</span> memory violation <span style="color: #339933;">:</span> Exception ACCESS_VIOLATION received.</pre></div></div>

<p>As it turns out, as we were using a <a href="http://en.wikipedia.org/wiki/Proxy_auto-config">proxy auto-config (PAC)</a> file and this error occurs if your download filters are set to block your pac files. Luckily, LoadRunner does report that the PAC file was &#8220;Not downloaded due to a filter&#8221;, yet on the very next line reports that it was &#8220;downloaded and evaluated successfully&#8221;</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;">Starting to download the proxy automatic configuration script<span style="color: #339933;">,</span> URL<span style="color: #339933;">=</span><span style="color: #ff0000;">&quot;http://www.headwired.com/proxy.pac&quot;</span>  	<span style="color: #009900;">&#91;</span>MsgId<span style="color: #339933;">:</span> MMSG<span style="color: #339933;">-</span><span style="color: #0000dd;">27097</span><span style="color: #009900;">&#93;</span>
Warning <span style="color: #339933;">-</span><span style="color: #0000dd;">26554</span><span style="color: #339933;">:</span> Not downloaded due to a filter<span style="color: #339933;">,</span> URL<span style="color: #339933;">=</span><span style="color: #ff0000;">&quot;http://www.headwired.com/proxy.pac&quot;</span>  	<span style="color: #009900;">&#91;</span>MsgId<span style="color: #339933;">:</span> MWAR<span style="color: #339933;">-</span><span style="color: #0000dd;">26554</span><span style="color: #009900;">&#93;</span>
Proxy automatic configuration script <span style="color: #009900;">&#40;</span>URL<span style="color: #339933;">=</span><span style="color: #ff0000;">&quot;http://www.headwired.com/proxy.pac&quot;</span><span style="color: #009900;">&#41;</span> downloaded and evaluated successfully  	<span style="color: #009900;">&#91;</span>MsgId<span style="color: #339933;">:</span> MMSG<span style="color: #339933;">-</span><span style="color: #0000dd;">27096</span><span style="color: #009900;">&#93;</span></pre></div></div>

<p>Surely if iframes are considered a critical resource, then the PAC file should cause an error and not just a warning, especially when it causes such a poorly handled memory violation error.</p>
<p>Luckily adding the pac file location to your download filters include list fixes this problem.</p>
<img src="http://feeds.feedburner.com/~r/Headwired/~4/Iaqn4tKcOXs" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.headwired.com/articles/quick-tip-loadrunner-download-filters-and-proxy-servers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.headwired.com/articles/quick-tip-loadrunner-download-filters-and-proxy-servers/</feedburner:origLink></item>
		<item>
		<title>LoadRunner and iframes</title>
		<link>http://feedproxy.google.com/~r/Headwired/~3/WzY0D7sMzbY/</link>
		<comments>http://www.headwired.com/articles/loadrunner-and-iframes/#comments</comments>
		<pubDate>Tue, 24 May 2011 09:56:11 +0000</pubDate>
		<dc:creator>Joel Deutscher</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[LoadRunner]]></category>
		<category><![CDATA[Quick Tip]]></category>
		<category><![CDATA[Rant]]></category>
		<category><![CDATA[Tips and Tricks]]></category>
		<category><![CDATA[VUGen]]></category>

		<guid isPermaLink="false">http://www.headwired.com/?p=884</guid>
		<description><![CDATA[After a recent application update, I noticed that all of our scripts started to fail. It turns out that the AUT now included a piece of tracking code, and our load generators did not resolve the domain name. The error message that came up was: Error -26627: HTTP Status-Code=404 &#40;Not Found&#41; for &#34;http://tracking.headwired.com/track.asp&#34; &#91;MsgId: MERR-26627&#93; [...]]]></description>
			<content:encoded><![CDATA[<p>After a recent application update, I noticed that all of our scripts started to fail. It turns out that the AUT now included a piece of tracking code, and our load generators did not resolve the domain name. The error message that came up was:</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;">Error <span style="color: #339933;">-</span><span style="color: #0000dd;">26627</span><span style="color: #339933;">:</span> HTTP Status<span style="color: #339933;">-</span>Code<span style="color: #339933;">=</span><span style="color: #0000dd;">404</span> <span style="color: #009900;">&#40;</span>Not Found<span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">for</span> <span style="color: #ff0000;">&quot;http://tracking.headwired.com/track.asp&quot;</span>  	<span style="color: #009900;">&#91;</span>MsgId<span style="color: #339933;">:</span> MERR<span style="color: #339933;">-</span><span style="color: #0000dd;">26627</span><span style="color: #009900;">&#93;</span></pre></div></div>

<p>So why would a 404 cause an error and not just a warning? Turns out that iframes are treated as a critical resource. By default, images, scripts, css are all treated as non-critical resources resulting in a warning only, however iframes are considered to be critical and hence cause an error. It makes sense for iframes to be a critical resource&#8230; in 1999 when the virtual mall was a good idea, yet in 2011, iframes are used for tracking services only. Rants aside, I could find the option to treat images, scripts and css as critical (pictured below), however I could not find the option to treat iframes as non-critical.</p>
<p><img src="http://www.headwired.com/wp-content/uploads/2011/05/non-critical-580x432.png" alt="non-critical resource errors as warnings" title="non-critical resource errors as warnings" width="580" height="432" class="aligncenter size-large wp-image-894" /></p>
<p>By turning this option off, all 404&#8242;ed resources are treated as errors as well, as you can see in the following output log</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;">Found resource <span style="color: #ff0000;">&quot;http://localhost/notfound.css&quot;</span> in HTML <span style="color: #ff0000;">&quot;http://localhost/iframe.html&quot;</span>  	<span style="color: #009900;">&#91;</span>MsgId<span style="color: #339933;">:</span> MMSG<span style="color: #339933;">-</span><span style="color: #0000dd;">26659</span><span style="color: #009900;">&#93;</span>
Found resource <span style="color: #ff0000;">&quot;http://localhost/notfound.js&quot;</span> in HTML <span style="color: #ff0000;">&quot;http://localhost/iframe.html&quot;</span>  	<span style="color: #009900;">&#91;</span>MsgId<span style="color: #339933;">:</span> MMSG<span style="color: #339933;">-</span><span style="color: #0000dd;">26659</span><span style="color: #009900;">&#93;</span>
Found resource <span style="color: #ff0000;">&quot;http://localhost/notfound.png&quot;</span> in HTML <span style="color: #ff0000;">&quot;http://localhost/iframe.html&quot;</span>  	<span style="color: #009900;">&#91;</span>MsgId<span style="color: #339933;">:</span> MMSG<span style="color: #339933;">-</span><span style="color: #0000dd;">26659</span><span style="color: #009900;">&#93;</span>
Detected non<span style="color: #339933;">-</span>resource <span style="color: #ff0000;">&quot;http://localhost/notfound-iframe.html&quot;</span> in <span style="color: #ff0000;">&quot;http://localhost/iframe.html&quot;</span>  	<span style="color: #009900;">&#91;</span>MsgId<span style="color: #339933;">:</span> MMSG<span style="color: #339933;">-</span><span style="color: #0000dd;">26574</span><span style="color: #009900;">&#93;</span>
Found resource <span style="color: #ff0000;">&quot;http://localhost/notfound-object.html&quot;</span> in HTML <span style="color: #ff0000;">&quot;http://localhost/iframe.html&quot;</span>  	<span style="color: #009900;">&#91;</span>MsgId<span style="color: #339933;">:</span> MMSG<span style="color: #339933;">-</span><span style="color: #0000dd;">26659</span><span style="color: #009900;">&#93;</span>
Error <span style="color: #339933;">-</span><span style="color: #0000dd;">26627</span><span style="color: #339933;">:</span> HTTP Status<span style="color: #339933;">-</span>Code<span style="color: #339933;">=</span><span style="color: #0000dd;">404</span> <span style="color: #009900;">&#40;</span>Not Found<span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">for</span> <span style="color: #ff0000;">&quot;http://localhost/notfound.js&quot;</span>  	<span style="color: #009900;">&#91;</span>MsgId<span style="color: #339933;">:</span> MERR<span style="color: #339933;">-</span><span style="color: #0000dd;">26627</span><span style="color: #009900;">&#93;</span>
Error <span style="color: #339933;">-</span><span style="color: #0000dd;">26627</span><span style="color: #339933;">:</span> HTTP Status<span style="color: #339933;">-</span>Code<span style="color: #339933;">=</span><span style="color: #0000dd;">404</span> <span style="color: #009900;">&#40;</span>Not Found<span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">for</span> <span style="color: #ff0000;">&quot;http://localhost/notfound.css&quot;</span>  	<span style="color: #009900;">&#91;</span>MsgId<span style="color: #339933;">:</span> MERR<span style="color: #339933;">-</span><span style="color: #0000dd;">26627</span><span style="color: #009900;">&#93;</span>
Error <span style="color: #339933;">-</span><span style="color: #0000dd;">26627</span><span style="color: #339933;">:</span> HTTP Status<span style="color: #339933;">-</span>Code<span style="color: #339933;">=</span><span style="color: #0000dd;">404</span> <span style="color: #009900;">&#40;</span>Not Found<span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">for</span> <span style="color: #ff0000;">&quot;http://localhost/notfound.png&quot;</span>  	<span style="color: #009900;">&#91;</span>MsgId<span style="color: #339933;">:</span> MERR<span style="color: #339933;">-</span><span style="color: #0000dd;">26627</span><span style="color: #009900;">&#93;</span>
Error <span style="color: #339933;">-</span><span style="color: #0000dd;">26627</span><span style="color: #339933;">:</span> HTTP Status<span style="color: #339933;">-</span>Code<span style="color: #339933;">=</span><span style="color: #0000dd;">404</span> <span style="color: #009900;">&#40;</span>Not Found<span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">for</span> <span style="color: #ff0000;">&quot;http://localhost/notfound-iframe.html&quot;</span>  	<span style="color: #009900;">&#91;</span>MsgId<span style="color: #339933;">:</span> MERR<span style="color: #339933;">-</span><span style="color: #0000dd;">26627</span><span style="color: #009900;">&#93;</span>
Error <span style="color: #339933;">-</span><span style="color: #0000dd;">26627</span><span style="color: #339933;">:</span> HTTP Status<span style="color: #339933;">-</span>Code<span style="color: #339933;">=</span><span style="color: #0000dd;">404</span> <span style="color: #009900;">&#40;</span>Not Found<span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">for</span> <span style="color: #ff0000;">&quot;http://localhost/notfound-object.html&quot;</span>  	<span style="color: #009900;">&#91;</span>MsgId<span style="color: #339933;">:</span> MERR<span style="color: #339933;">-</span><span style="color: #0000dd;">26627</span><span style="color: #009900;">&#93;</span>
web_url<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;web_url&quot;</span><span style="color: #009900;">&#41;</span> highest severity level was <span style="color: #ff0000;">&quot;ERROR&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">1627</span> body bytes<span style="color: #339933;">,</span> <span style="color: #0000dd;">1438</span> header bytes  	<span style="color: #009900;">&#91;</span>MsgId<span style="color: #339933;">:</span> MMSG<span style="color: #339933;">-</span><span style="color: #0000dd;">26388</span><span style="color: #009900;">&#93;</span></pre></div></div>

<p>So back to the problem, a new domain that I needed to block had surfaced and if the domain name resolved, then it would have been included in the tests without my knowledge. While there are two schools of thought here, in the particular testing that I was doing, the customer did not want their tracking sites being hit from the performance tests, it was time to change approach and move to the include only list.</p>
<p>Why was this important? Well now I don&#8217;t have to catch every new tracking feature in order to block it, and my ever expanding list of blocked hostnames was now a thing of the past and everything was coming up Milhouse.</p>
<p>My test HTML page is as follows for anyone who is interested.</p>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">&lt;html&gt;
  &lt;head&gt;
	&lt;link rel=&quot;shortcut icon&quot; href=&quot;notfound.ico&quot; /&gt;
	&lt;link rel=&quot;stylesheet&quot; href=&quot;notfound.css&quot; type=&quot;text/css&quot; media=&quot;all&quot; /&gt;
	&lt;script src=&quot;notfound.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
  &lt;/head&gt;
  &lt;body&gt;
	&lt;h1&gt;Testing IFRAME&lt;/h1&gt;
	&lt;img src=&quot;notfound.png&quot; /&gt;
	&lt;!-- iframe --&gt;
	&lt;iframe src=&quot;notfound-iframe.html&quot; width=&quot;100%&quot; height=&quot;300&quot;&gt;
	  &lt;p&gt;Your browser does not support iframes.&lt;/p&gt;
	&lt;/iframe&gt;
	&lt;!-- object --&gt;
	&lt;object data=&quot;notfound-object.html&quot; type=&quot;text/html&quot; width=&quot;300&quot; height=&quot;200&quot;&gt;
	&lt;/object&gt;
  &lt;/body&gt;
&lt;/html&gt;</pre></div></div>

<img src="http://feeds.feedburner.com/~r/Headwired/~4/WzY0D7sMzbY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.headwired.com/articles/loadrunner-and-iframes/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.headwired.com/articles/loadrunner-and-iframes/</feedburner:origLink></item>
		<item>
		<title>Headwired Wordle Art</title>
		<link>http://feedproxy.google.com/~r/Headwired/~3/YSfjWzkRBE4/</link>
		<comments>http://www.headwired.com/articles/headwired-word-art/#comments</comments>
		<pubDate>Thu, 19 May 2011 03:05:45 +0000</pubDate>
		<dc:creator>Joel Deutscher</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Fun]]></category>

		<guid isPermaLink="false">http://www.headwired.com/?p=873</guid>
		<description><![CDATA[I recently saw some very cool word art generated by articles on on Bish.co.uk and decided to produce one for Headwired. The tool used to create these artworks is a very nifty Java Applet called Wordle. So what is this magical Wordle you ask? Wordle is a toy for generating “word clouds” from text that [...]]]></description>
			<content:encoded><![CDATA[<p>I recently saw some very cool word art generated by articles on on <a href="http://bish.co.uk/home/36-other/124-am-i-too-loadrunner-focussed">Bish.co.uk</a>  and decided to produce one for Headwired. The tool used to create these artworks is a very nifty Java Applet called Wordle.</p>
<p><a href="http://www.wordle.net/show/wrdl/3638711/Headwired.com_Articles"><img class="size-large wp-image-874 " title="Headwired.com Wordle May 2011" src="http://www.headwired.com/wp-content/uploads/2011/05/wordle2011-580x373.png" alt="Headwired.com Wordle May 2011" width="580" height="373" /></a><br />
So what is this magical Wordle you ask?</p>
<blockquote><p>Wordle is a toy for generating “word clouds” from text that you provide. The clouds give greater prominence to words that appear more frequently in the source text. You can tweak your clouds with different fonts, layouts, and color schemes. The images you create with Wordle are yours to use however you like. You can print them out, or save them to the Wordle gallery to share with your friends</p></blockquote>
<p>So get out there an <a href="http://www.wordle.net/create">create your own</a>!</p>
<img src="http://feeds.feedburner.com/~r/Headwired/~4/YSfjWzkRBE4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.headwired.com/articles/headwired-word-art/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.headwired.com/articles/headwired-word-art/</feedburner:origLink></item>
		<item>
		<title>A Journey to Automated Performance Test Execution Reports</title>
		<link>http://feedproxy.google.com/~r/Headwired/~3/vcqvlVe99OA/</link>
		<comments>http://www.headwired.com/articles/a-journey-to-automated-performance-test-execution-reports/#comments</comments>
		<pubDate>Tue, 05 Apr 2011 08:44:33 +0000</pubDate>
		<dc:creator>Joel Deutscher</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Analysis]]></category>
		<category><![CDATA[Automation]]></category>
		<category><![CDATA[Metrics]]></category>
		<category><![CDATA[Theory]]></category>
		<category><![CDATA[Utilisation]]></category>

		<guid isPermaLink="false">http://www.headwired.com/?p=745</guid>
		<description><![CDATA[A performance test execution report summarises the results of a single test execution. These reports are produced after each execution and usually contain varying levels of detail. In my 10 years of performance test consulting, I have seen reports that are one-pagers, outputted directly by the tool with very little user interaction. I have also [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-large wp-image-816" title="sla" src="http://www.headwired.com/wp-content/uploads/2011/03/sla2-580x123.png" alt="" width="580" height="123" />A performance test execution report summarises the results of a single test execution. These reports are produced after each execution and usually contain varying levels of detail.</p>
<p>In my 10 years of performance test consulting, I have seen reports that are one-pagers, outputted directly by the tool with very little user interaction. I have also seen reports that go into significant detail and require hours of data manipulation to produce. Personally, I prefer the later.</p>
<p>Its  not that I like am a stickler for documentation, its more that I believe that an execution report should  tell me all of the interesting parts of a test, from response times to resource utilization, I want to know as much as I can about injecting a  particular load level against an application. When I walk in to work in the morning, I  want to be able to answer that question &#8220;How did last nights test go?&#8221;.</p>
<p>While working at a major bank, I had the opportunity of defining the test execution report templates for a major application. I worked closely with the production availability team to  create a report template that provided everything that was required to  determine if changes could result in performance degradation. The  sign-off process involved a pile of execution reports that were  analysed top to bottom and signed-off one by one. Needless to say, I  learned a lot about which content was vital for these reports, and which  could be ommitted.</p>
<p>Unfortunately, despite  a very happy production support team, and a nomination by the client  for a customer service award, there was one problem. The reports took  too long to produce. Few elements of the report could be simply copied  out of the customers performance tool (LoadRunner), and many took  parsing raw results through excel to get the desired result.</p>
<p>After a successful  release, I left the client and moved onto a new challenge. I wanted to  find a way to maintain the quality of the reports while reducing the  amount of effort required to produce them. I heard that after I left, the client had  employed some automation for the excel processing parts of the report.  While this had reduced their time, it was still a very hands on process.  I knew there must be a better way.</p>
<p>6 months on, and I now  recieve 95% of the elements of this original report in my inbox  automatically after each test execution. I had reached a point where my  team can now spend more time on analysis, and less time on producing  graphs. It is now clear within minutes of an execution if there is a  major problem or not. At last, I had my cake and was eating it too.</p>
<p>Over the next couple of weeks, I  will document the journey from looking at the individual elements of an  execution report to having an automated report in my inbox after each test.</p>
<img src="http://feeds.feedburner.com/~r/Headwired/~4/vcqvlVe99OA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.headwired.com/articles/a-journey-to-automated-performance-test-execution-reports/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.headwired.com/articles/a-journey-to-automated-performance-test-execution-reports/</feedburner:origLink></item>
		<item>
		<title>Quick Tip – Fixing A Locked LoadRunner Results Directory</title>
		<link>http://feedproxy.google.com/~r/Headwired/~3/0Spw2LjLooE/</link>
		<comments>http://www.headwired.com/articles/quick-tip-fixing-locked-loadrunner-results-directory/#comments</comments>
		<pubDate>Wed, 09 Mar 2011 02:13:37 +0000</pubDate>
		<dc:creator>Joel Deutscher</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[LoadRunner]]></category>
		<category><![CDATA[Quick Tip]]></category>
		<category><![CDATA[Tips and Tricks]]></category>
		<category><![CDATA[VUGen]]></category>

		<guid isPermaLink="false">http://www.headwired.com/?p=783</guid>
		<description><![CDATA[Everynow and then, Vugen will have a little episode and decide that its default results directory is locked, and you will be presented with an friendly dialog box like the one below. If you have ever wondered what is going on, it turns out the culprit is mmdrv.exe. This executable is the Multithreaded Driver Command [...]]]></description>
			<content:encoded><![CDATA[<p>Everynow and then, Vugen will have a little episode and decide that its default results directory is locked, and you will be presented with an friendly dialog box like the one below.</p>
<p><img class="aligncenter size-full wp-image-784" title="overwrite_directory" src="http://www.headwired.com/wp-content/uploads/2011/03/overwrite_directory.png" alt="The result directory is locked" width="306" height="147" /></p>
<p>If you have ever wondered what is going on, it turns out the culprit is mmdrv.exe. This executable is the Multithreaded Driver Command Line application that is used to simulate virtual users, and killing all instances from the task manager will remove any locks on your results directory, and you can go back to normal vugenning.</p>
<p>While most of us don&#8217;t mind using multiple directories, it seems that  even in Vugen 11, the replay log window will always show the log of the  first results directory after playback. This can be very confusing when debugging  scripts.</p>
<p>This exe can also be used manually to execute vuser scripts from the command line. This can be handy for environment smoke tests. I will write more about some alternate uses for mmdrv.exe in a later post.</p>
<img src="http://feeds.feedburner.com/~r/Headwired/~4/0Spw2LjLooE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.headwired.com/articles/quick-tip-fixing-locked-loadrunner-results-directory/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.headwired.com/articles/quick-tip-fixing-locked-loadrunner-results-directory/</feedburner:origLink></item>
	</channel>
</rss>

