<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	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:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Performance Testing @ the Frontline</title>
	<atom:link href="http://ptfrontline.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://ptfrontline.wordpress.com</link>
	<description>A hidden world where small things make a big differance</description>
	<lastBuildDate>Wed, 23 Dec 2009 09:58:53 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<cloud domain='ptfrontline.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://www.gravatar.com/blavatar/5c32c918eb1f88f25ceabbe0efc4a700?s=96&#038;d=http://s.wordpress.com/i/buttonw-com.png</url>
		<title>Performance Testing @ the Frontline</title>
		<link>http://ptfrontline.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://ptfrontline.wordpress.com/osd.xml" title="Performance Testing @ the Frontline" />
		<item>
		<title>LoadRunner &amp; HTTP 401 Authentication</title>
		<link>http://ptfrontline.wordpress.com/2009/12/23/loadrunner-http-401-authentication/</link>
		<comments>http://ptfrontline.wordpress.com/2009/12/23/loadrunner-http-401-authentication/#comments</comments>
		<pubDate>Wed, 23 Dec 2009 09:54:25 +0000</pubDate>
		<dc:creator>Kim</dc:creator>
				<category><![CDATA[LoadRunner]]></category>

		<guid isPermaLink="false">http://ptfrontline.wordpress.com/?p=172</guid>
		<description><![CDATA[In one of my recent projects I stumbled upon an interesting problem situation with the HTTP Authentication mechanism.
I had a Machine to Machine (M2M) interface, where clients used HTTP authentication to identify themselves to the server while sending data. In this scenario there was no HTTP 401 response from the server, because the client included [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ptfrontline.wordpress.com&blog=3385845&post=172&subd=ptfrontline&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>In one of my recent projects I stumbled upon an interesting problem situation with the <a title="Wikipedia HTTP Basic Authentication" href="http://en.wikipedia.org/wiki/Basic_access_authentication" target="_blank">HTTP Authentication</a> mechanism.</p>
<p>I had a Machine to Machine (M2M) interface, where clients used HTTP authentication to identify themselves to the server while sending data. In this scenario there was no HTTP 401 response from the server, because the client included the authentication info in the initial request.<span id="more-172"></span></p>
<p>I discovered that LoadRunner does not do the same. It waits for the HTTP 401 response before actually sending the authentication information. This is correct behavior if we would be simulating a web service meant for humans, but in my case this lead to a situation where LoadRunner was doing 1 extra POST request which had catastrophic results since I now did two POST requests instead of just one!</p>
<p>The negative effect was that I was POST:in the double amount of data over the network and doubling the amount of requests to the server, thus effectively doubling the throughput and connections (load) to the server!</p>
<p>To solve this problem I had to include the Authorization header in the initial request. To do that I used my <a href="http://ptfrontline.wordpress.com/2009/09/30/base64-encodedecode-for-loadrunner/">Base64 Encoder</a> to produce the needed Basic HTTP Authorization header information and then add it to the request using the web_add_header() function.</p>
<p>Below is code snippet from the project that shows how to create and use the custom made authentication header:</p>
<pre class="brush: cpp;">
	// Must remove std auth mechanism since this causes 2 POSTS instead of one
	// web_set_user( &quot;{Username}&quot;, &quot;{Password}&quot;, &quot;{Domain}:8000&quot; );

	// Create Base64 encoded string
	b64_encode_string( &quot;{Username}:{Password}&quot;, &quot;BasicAuth&quot; );

	// Add HTTP Authorization header &quot;Authorization: Basic XXXXXXXXXXXXXXXXXX==\r\n&quot;
	web_add_header(&quot;Authorization&quot;, lr_eval_string(&quot;Basic {BasicAuth}&quot;));

	lr_start_transaction(&quot;Custom_HTTP_Auth&quot;);

	web_custom_request(&quot;Custom_HTTP_Auth&quot;,
		&quot;Method=POST&quot;,
		&quot;EncType=text/xml; charset=\&quot;UTF-8\&quot;&quot;,
		&quot;URL=http://{Domain}/{Path}/{Document}&quot;
		&quot;BodyFilePath=XML.xml&quot;,
       LAST);

	lr_end_transaction(&quot;Custom_HTTP_Auth&quot;, LR_AUTO);
</pre>
<p>And I also wish you a Merry X-Mas everybody!</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ptfrontline.wordpress.com/172/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ptfrontline.wordpress.com/172/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ptfrontline.wordpress.com/172/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ptfrontline.wordpress.com/172/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ptfrontline.wordpress.com/172/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ptfrontline.wordpress.com/172/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ptfrontline.wordpress.com/172/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ptfrontline.wordpress.com/172/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ptfrontline.wordpress.com/172/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ptfrontline.wordpress.com/172/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ptfrontline.wordpress.com&blog=3385845&post=172&subd=ptfrontline&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://ptfrontline.wordpress.com/2009/12/23/loadrunner-http-401-authentication/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/048d611d434cda8968e902b7ab82234f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Kim</media:title>
		</media:content>
	</item>
		<item>
		<title>Base64 Encode/Decode for LoadRunner</title>
		<link>http://ptfrontline.wordpress.com/2009/09/30/base64-encodedecode-for-loadrunner/</link>
		<comments>http://ptfrontline.wordpress.com/2009/09/30/base64-encodedecode-for-loadrunner/#comments</comments>
		<pubDate>Wed, 30 Sep 2009 08:36:36 +0000</pubDate>
		<dc:creator>Kim</dc:creator>
				<category><![CDATA[LoadRunner]]></category>
		<category><![CDATA[Base64]]></category>

		<guid isPermaLink="false">http://ptfrontline.wordpress.com/?p=157</guid>
		<description><![CDATA[Recently I had the need to decode a Base64 string received from a server and in the process I created an include file that contains both Encode and Decode functions for base64. Use &#38; Abuse as you see fit! Enjoy!
Below is an example of how to use the base64.h include file

# include &#34;base64.h&#34;
vuser_init()
{
 int res;
 [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ptfrontline.wordpress.com&blog=3385845&post=157&subd=ptfrontline&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Recently I had the need to decode a Base64 string received from a server and in the process I created an include file that contains both Encode and Decode functions for base64. Use &amp; Abuse as you see fit! Enjoy!<span id="more-157"></span><br />
Below is an example of how to use the base64.h include file</p>
<pre class="brush: cpp;">
# include &quot;base64.h&quot;
vuser_init()
{
 int res;
 // ENCODE
 lr_save_string(&quot;ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789&quot;,&quot;plain&quot;);
 b64_encode_string( lr_eval_string(&quot;{plain}&quot;), &quot;b64str&quot; );
 lr_output_message(&quot;Encoded: %s&quot;, lr_eval_string(&quot;{b64str}&quot;) );

 // DECODE
 b64_decode_string( lr_eval_string(&quot;{b64str}&quot;), &quot;plain2&quot; );
 lr_output_message(&quot;Decoded: %s&quot;, lr_eval_string(&quot;{plain2}&quot;) );

 // Verify decoded matches original plain text
 res = strcmp( lr_eval_string(&quot;{plain}&quot;), lr_eval_string(&quot;{plain2}&quot;) );
 if (res==0) lr_output_message(&quot;Decoded matches original plain text&quot;);

 return 0;
}
</pre>
<p>And here&#8217;s the actual base64.h include file</p>
<pre class="brush: cpp;">
/*
Base 64 Encode and Decode functions for LoadRunner
==================================================
This include file provides functions to Encode and Decode
LoadRunner variables. It's based on source codes found on the
internet and has been modified to work in LoadRunner.

Created by Kim Sandell / Celarius - www.celarius.com
*/
// Encoding lookup table
char base64encode_lut[] = {
'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q',
'R','S','T','U','V','W','X','Y','Z','a','b','c','d','e','f','g','h',
'i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y',
'z','0','1','2','3','4','5','6','7','8','9','+','/','='};

// Decode lookup table
char base64decode_lut[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0,62, 0, 0, 0,63,52,53,54,55,56,57,58,59,60,61, 0, 0,
0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,
15,16,17,18,19,20,21,22,23,24,25, 0, 0, 0, 0, 0, 0,26,27,28,
29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,
49,50,51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, };

void base64encode(char *src, char *dest, int len)
// Encodes a buffer to base64
{
  int i=0, slen=strlen(src);
  for(i=0;i&lt;slen &amp;&amp; i&lt;len;i+=3,src+=3)
  { // Enc next 4 characters
    *(dest++)=base64encode_lut[(*src&amp;0xFC)&gt;&gt;0x2];
    *(dest++)=base64encode_lut[(*src&amp;0x3)&lt;&lt;0x4|(*(src+1)&amp;0xF0)&gt;&gt;0x4];
    *(dest++)=((i+1)&lt;slen)?base64encode_lut[(*(src+1)&amp;0xF)&lt;&lt;0x2|(*(src+2)&amp;0xC0)&gt;&gt;0x6]:'=';
    *(dest++)=((i+2)&lt;slen)?base64encode_lut[*(src+2)&amp;0x3F]:'=';
  }
  *dest=#0; // Append terminator
}

void base64decode(char *src, char *dest, int len)
// Encodes a buffer to base64
{
  int i=0, slen=strlen(src);
  for(i=0;i&lt;slen&amp;&amp;i&lt;len;i+=4,src+=4)
  { // Store next 4 chars in vars for faster access
    char c1=base64decode_lut[*src], c2=base64decode_lut[*(src+1)], c3=base64decode_lut[*(src+2)], c4=base64decode_lut[*(src+3)];
    // Decode to 3 chars
    *(dest++)=(c1&amp;0x3F)&lt;&lt;0x2|(c2&amp;0x30)&gt;&gt;0x4;
    *(dest++)=(c3!=64)?((c2&amp;0xF)&lt;&lt;0x4|(c3&amp;0x3C)&gt;&gt;0x2):'';
    *(dest++)=(c4!=64)?((c3&amp;0x3)&lt;&lt;0x6|c4&amp;0x3F):'';
  }
  *dest=#0; // Append terminator
}

int b64_encode_string( char *source, char *lrvar )
// ----------------------------------------------------------------------------
// Encodes a string to base64 format
//
// Parameters:
//		source    Pointer to source string to encode
//		lrvar     LR variable where base64 encoded string is stored
//
// Example:
//
//		b64_encode_string( &quot;Encode Me!&quot;, &quot;b64&quot; )
// ----------------------------------------------------------------------------
{
	int dest_size;
	int res;
	char *dest;
	// Allocate dest buffer
	dest_size = 1 + ((strlen(source)+2)/3*4);
	dest = (char *)malloc(dest_size);
	memset(dest,0,dest_size);
	// Encode &amp; Save
	base64encode(source, dest, dest_size);
	lr_save_string( dest, lrvar );
	// Free dest buffer
	res = strlen(dest);
	free(dest);
	// Return length of dest string
	return res;
}

int b64_decode_string( char *source, char *lrvar )
// ----------------------------------------------------------------------------
// Decodes a base64 string to plaintext
//
// Parameters:
//		source    Pointer to source base64 encoded string
//		lrvar     LR variable where decoded string is stored
//
// Example:
//
//		b64_decode_string( lr_eval_string(&quot;{b64}&quot;), &quot;Plain&quot; )
// ----------------------------------------------------------------------------
{
	int dest_size;
	int res;
	char *dest;
	// Allocate dest buffer
	dest_size = strlen(source);
	dest = (char *)malloc(dest_size);
	memset(dest,0,dest_size);
	// Encode &amp; Save
	base64decode(source, dest, dest_size);
	lr_save_string( dest, lrvar );
	// Free dest buffer
	res = strlen(dest);
	free(dest);
	// Return length of dest string
	return res;
}</pre>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ptfrontline.wordpress.com/157/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ptfrontline.wordpress.com/157/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ptfrontline.wordpress.com/157/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ptfrontline.wordpress.com/157/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ptfrontline.wordpress.com/157/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ptfrontline.wordpress.com/157/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ptfrontline.wordpress.com/157/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ptfrontline.wordpress.com/157/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ptfrontline.wordpress.com/157/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ptfrontline.wordpress.com/157/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ptfrontline.wordpress.com&blog=3385845&post=157&subd=ptfrontline&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://ptfrontline.wordpress.com/2009/09/30/base64-encodedecode-for-loadrunner/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/048d611d434cda8968e902b7ab82234f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Kim</media:title>
		</media:content>
	</item>
		<item>
		<title>The end of summer and the start of work</title>
		<link>http://ptfrontline.wordpress.com/2009/09/11/the-end-of-summer-and-the-start-of-work/</link>
		<comments>http://ptfrontline.wordpress.com/2009/09/11/the-end-of-summer-and-the-start-of-work/#comments</comments>
		<pubDate>Fri, 11 Sep 2009 07:19:49 +0000</pubDate>
		<dc:creator>Kim</dc:creator>
				<category><![CDATA[Main]]></category>

		<guid isPermaLink="false">http://ptfrontline.wordpress.com/?p=155</guid>
		<description><![CDATA[And so ends the summer &#38; vacations and work begins &#8230; Back at the desk solving some the performance problems of the world.
       <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ptfrontline.wordpress.com&blog=3385845&post=155&subd=ptfrontline&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>And so ends the summer &amp; vacations and work begins &#8230; Back at the desk solving some the performance problems of the world.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ptfrontline.wordpress.com/155/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ptfrontline.wordpress.com/155/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ptfrontline.wordpress.com/155/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ptfrontline.wordpress.com/155/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ptfrontline.wordpress.com/155/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ptfrontline.wordpress.com/155/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ptfrontline.wordpress.com/155/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ptfrontline.wordpress.com/155/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ptfrontline.wordpress.com/155/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ptfrontline.wordpress.com/155/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ptfrontline.wordpress.com&blog=3385845&post=155&subd=ptfrontline&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://ptfrontline.wordpress.com/2009/09/11/the-end-of-summer-and-the-start-of-work/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/048d611d434cda8968e902b7ab82234f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Kim</media:title>
		</media:content>
	</item>
		<item>
		<title>Vacation time!</title>
		<link>http://ptfrontline.wordpress.com/2009/08/08/vacation-time/</link>
		<comments>http://ptfrontline.wordpress.com/2009/08/08/vacation-time/#comments</comments>
		<pubDate>Sat, 08 Aug 2009 07:21:13 +0000</pubDate>
		<dc:creator>Kim</dc:creator>
				<category><![CDATA[Main]]></category>

		<guid isPermaLink="false">http://ptfrontline.wordpress.com/?p=148</guid>
		<description><![CDATA[Yes it&#8217;s true, I&#8217;m on vacation and not really doing very much at all &#8230; at least no real performance testing work!
But I&#8217;m active with planning the future for my company, and so we changed our Celarius.com look to more match the new comapny vision. In the near future I will start writing blog articles [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ptfrontline.wordpress.com&blog=3385845&post=148&subd=ptfrontline&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><div id="attachment_149" class="wp-caption alignright" style="width: 370px"><img class="size-full wp-image-149" title="A well performed Golf shot" src="http://ptfrontline.files.wordpress.com/2009/08/imag0059.jpg?w=360&#038;h=480" alt="A well performed Golf shot" width="360" height="480" /><p class="wp-caption-text">A well performed Golf shot</p></div>
<p>Yes it&#8217;s true, I&#8217;m on vacation and not really doing very much at all &#8230; at least no real performance testing work!</p>
<p>But I&#8217;m active with planning the future for my company, and so we changed our Celarius.com look to more match the new comapny vision. In the near future I will start writing blog articles on the celarius pages as well as here, but they will be more from a commercial standpoint. This blog still remains as my private projects/discoveries etc blog..</p>
<p><em>And as it is summer and and I performed outstandingly on the golf-course on Friday I just have to include my opening shot on a 150 meter PAR 3 hole. The ball landed 15 cm (6&#8243;) from the flag, and my birdie was assured! The Birdie-whiskey we enjoyed afterwards was better than usual!</em></p>
<p>I hope you all have had a good summer and recharged your battires for a potentially demanding fall&#8217;09 !</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ptfrontline.wordpress.com/148/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ptfrontline.wordpress.com/148/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ptfrontline.wordpress.com/148/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ptfrontline.wordpress.com/148/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ptfrontline.wordpress.com/148/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ptfrontline.wordpress.com/148/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ptfrontline.wordpress.com/148/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ptfrontline.wordpress.com/148/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ptfrontline.wordpress.com/148/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ptfrontline.wordpress.com/148/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ptfrontline.wordpress.com&blog=3385845&post=148&subd=ptfrontline&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://ptfrontline.wordpress.com/2009/08/08/vacation-time/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/048d611d434cda8968e902b7ab82234f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Kim</media:title>
		</media:content>

		<media:content url="http://ptfrontline.files.wordpress.com/2009/08/imag0059.jpg" medium="image">
			<media:title type="html">A well performed Golf shot</media:title>
		</media:content>
	</item>
		<item>
		<title>Performance Test Tool Poll</title>
		<link>http://ptfrontline.wordpress.com/2009/05/08/performance-test-tool-poll/</link>
		<comments>http://ptfrontline.wordpress.com/2009/05/08/performance-test-tool-poll/#comments</comments>
		<pubDate>Fri, 08 May 2009 08:19:16 +0000</pubDate>
		<dc:creator>Kim</dc:creator>
				<category><![CDATA[Main]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Poll]]></category>

		<guid isPermaLink="false">http://ptfrontline.wordpress.com/?p=146</guid>
		<description><![CDATA[I&#8217;ve had my poll for &#8220;Which LoadTesting tool do you use most?&#8221; open for some time now, but unfortunately there has been a very low level of participation, and therefore I now ask you to please participate and let us know what tools you are using!
       <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ptfrontline.wordpress.com&blog=3385845&post=146&subd=ptfrontline&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>I&#8217;ve had my poll for &#8220;<em>Which LoadTesting tool do you use most?</em>&#8221; open for some time now, but unfortunately there has been a very low level of participation, and therefore I now ask you to please participate and let us know what tools you are using!</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ptfrontline.wordpress.com/146/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ptfrontline.wordpress.com/146/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ptfrontline.wordpress.com/146/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ptfrontline.wordpress.com/146/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ptfrontline.wordpress.com/146/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ptfrontline.wordpress.com/146/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ptfrontline.wordpress.com/146/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ptfrontline.wordpress.com/146/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ptfrontline.wordpress.com/146/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ptfrontline.wordpress.com/146/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ptfrontline.wordpress.com&blog=3385845&post=146&subd=ptfrontline&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://ptfrontline.wordpress.com/2009/05/08/performance-test-tool-poll/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/048d611d434cda8968e902b7ab82234f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Kim</media:title>
		</media:content>
	</item>
		<item>
		<title>Search &amp; Replace function for LoadRunner</title>
		<link>http://ptfrontline.wordpress.com/2009/03/13/search-replace-function-for-lr/</link>
		<comments>http://ptfrontline.wordpress.com/2009/03/13/search-replace-function-for-lr/#comments</comments>
		<pubDate>Fri, 13 Mar 2009 13:59:16 +0000</pubDate>
		<dc:creator>Kim</dc:creator>
				<category><![CDATA[LoadRunner]]></category>

		<guid isPermaLink="false">http://ptfrontline.wordpress.com/?p=135</guid>
		<description><![CDATA[Sometimes it is necessary to process parameters in LoadRunner after they have been &#8220;captured&#8221; using web_reg_save() or similar methods. There is no built-in function to do this, and I&#8217;ve seen multiple horrific attempts at different kinds of Search &#38; Replace methods over the years.
In light of this I decided to post the source for my [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ptfrontline.wordpress.com&blog=3385845&post=135&subd=ptfrontline&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Sometimes it is necessary to process parameters in LoadRunner after they have been &#8220;captured&#8221; using<span style="color:#800000;"> web_reg_save()</span> or similar methods. There is no built-in function to do this, and I&#8217;ve seen multiple horrific attempts at different kinds of <em>Search &amp; Replace</em> methods over the years.</p>
<p>In light of this I decided to post the source for my working solution that does not eat memory, is fast and is LoadRunner parameter friendly. It can be used by anyone who has worked with LoadRunner before!<span id="more-135"></span><br />
Examples:</p>
<pre class="brush: cpp;">

// Store a string into &quot;MyPar&quot; parameter
lr_save_string(&quot;This is a string&quot;, &quot;MyPar&quot;);

// For examples sake, convert it to URL encoded format
web_convert_param( &quot;MyPar&quot;,
                   &quot;SourceEncoding=PLAIN&quot;,
                   &quot;TargetEncoding=URL&quot;, LAST); 

// Output the current result
lr_output_message(&quot;%s&quot;, lr_eval_string(&quot;{MyPar}&quot;));

// Replace the ? characters with %20
lr_replace(&quot;MyPar&quot;, &quot;+&quot;, &quot;%20&quot; );

// Output new result
lr_output_message(&quot;%s&quot;, lr_eval_string(&quot;{MyPar}&quot;));
</pre>
<p>The following source can be copied into the VUSER_INIT action, at the end or stored as a separate file to be included in the script (your choice!)</p>
<pre class="brush: cpp;">
// ----------------------------------------------------------------------------
//
// Description:
//    Search for and replace text within a string.
//
// Parameters:
//    src (in) - pointer to source string
//    from (in) - pointer to search text
//    to (in) - pointer to replacement text
//
// Returns:
//    Returns a pointer to dynamically-allocated memory containing string
//    with occurences of the text pointed to by 'from' replaced by with
//    the text pointed to by 'to'.
//
// Notes:
//    Do not use this directly in scripts unless you are a more advanced
//    user who knows C and string handling. See below for the function you
//    should use!
//
// ----------------------------------------------------------------------------
char *strReplace(const char *src, const char *from, const char *to)
{
  char *value;
  char *dst;
  char *match;
  int size;
  int fromlen;
  int tolen;

  // Find out the lengths of the source string, text to replace, and
  // the replacement text.
  size = strlen(src) + 1;
  fromlen = strlen(from);
  tolen = strlen(to);

  // Allocate the first chunk with enough for the original string.
  value = (char *)malloc(size);

  // We need to return 'value', so let's make a copy to mess around with.
  dst = value;

  // Before we begin, let's see if malloc was successful.
  if ( value != NULL )
  {
    // Loop until no matches are found.
    for ( ;; )
    {
      // Try to find the search text.
      match = (char *) strstr(src, from);
      if ( match != NULL )
      {
        // Found search text at location 'match'.
        // Find out how many characters to copy up to the 'match'.
        size_t count = match - src;

        // We are going to realloc, and for that we will need a
        // temporary pointer for safe usage.
        char *temp;

        // Calculate the total size the string will be after the
        // replacement is performed.
        size += tolen - fromlen;

        // Attempt to realloc memory for the new size.
        //
        // temp = realloc(value, size);
        temp = (char *)realloc(value, size);

        if ( temp == NULL )
        {
          // Attempt to realloc failed. Free the previously malloc'd
          // memory and return with our tail between our legs.
          free(value);
          return NULL;
        }

        // The call to realloc was successful. But we'll want to
        // return 'value' eventually, so let's point it to the memory
        // that we are now working with. And let's not forget to point
        // to the right location in the destination as well.
        dst = temp + (dst - value);
        value = temp;

        // Copy from the source to the point where we matched. Then
        // move the source pointer ahead by the amount we copied. And
        // move the destination pointer ahead by the same amount.
        memmove(dst, src, count);
        src += count;
        dst += count;

        // Now copy in the replacement text 'to' at the position of
        // the match. Adjust the source pointer by the text we replaced.
        // Adjust the destination pointer by the amount of replacement
        // text.
        memmove(dst, to, tolen);
        src += fromlen;
        dst += tolen;
      }
      else // No match found.
      {
        // Copy any remaining part of the string. This includes the null
        // termination character.
        strcpy(dst, src);
        break;
      }
    } // For Loop()
  }
  return value;
}

// ----------------------------------------------------------------------------
//
// Description:
//    Find and replace text within a LoadRunner string.
//
// Parameters:
//    lrparam (in)    - pointer to LoadRunner Parameter Name
//    findstr (in)    - pointer to text top search for
//    replacestr (in) - pointer to text to use as replacement
//
// Returns:
//    Returns an integer. 0=Error, 1=Success.
//
// Example:
//    lr_save_string( &quot;This is a small test of the search and replace function&quot;, &quot;LRParam&quot;);
//    lr_replace( &quot;LRParam&quot;, &quot;a&quot;, &quot;-x-&quot; );
//    lr_output_message( &quot;%s&quot;, lr_eval_string(&quot;{LRParam}&quot;) );
//
// ----------------------------------------------------------------------------
int lr_replace( const char *lrparam, char *findstr, char *replacestr )
{
  int res = 0;
  char *result_str;
  char lrp[1024];

  // Finalize the LR Param Name
  sprintf( lrp, &quot;{%s}&quot;, lrparam);

  // Do the Search and Replace
  result_str = strReplace( lr_eval_string(lrp), findstr, replacestr );

  // Process results
  if (result_str != NULL )
  {
    lr_save_string( result_str, lrparam );
    free( result_str );
    res = 1;
  }
  return res;
} // EOF
</pre>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ptfrontline.wordpress.com/135/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ptfrontline.wordpress.com/135/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ptfrontline.wordpress.com/135/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ptfrontline.wordpress.com/135/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ptfrontline.wordpress.com/135/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ptfrontline.wordpress.com/135/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ptfrontline.wordpress.com/135/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ptfrontline.wordpress.com/135/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ptfrontline.wordpress.com/135/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ptfrontline.wordpress.com/135/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ptfrontline.wordpress.com&blog=3385845&post=135&subd=ptfrontline&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://ptfrontline.wordpress.com/2009/03/13/search-replace-function-for-lr/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/048d611d434cda8968e902b7ab82234f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Kim</media:title>
		</media:content>
	</item>
		<item>
		<title>Using a custom DLL in LoadRunner</title>
		<link>http://ptfrontline.wordpress.com/2009/02/24/using-a-custom-dll-in-loadrunner/</link>
		<comments>http://ptfrontline.wordpress.com/2009/02/24/using-a-custom-dll-in-loadrunner/#comments</comments>
		<pubDate>Tue, 24 Feb 2009 09:56:19 +0000</pubDate>
		<dc:creator>Kim</dc:creator>
				<category><![CDATA[Delphi]]></category>
		<category><![CDATA[LoadRunner]]></category>

		<guid isPermaLink="false">http://ptfrontline.wordpress.com/?p=108</guid>
		<description><![CDATA[Sometimes LoadRunner does not provide all the needed features that one needs when doing performance testing. One option is to write DLL&#8217;s to handle the needed stuff and writing your own custom DLL&#8217;s is really easy once you get the hang of it!
I needed to do a few HTTP calls &#8220;under the radar&#8221; from a [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ptfrontline.wordpress.com&blog=3385845&post=108&subd=ptfrontline&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Sometimes LoadRunner does not provide all the needed features that one needs when doing performance testing. One option is to write DLL&#8217;s to handle the needed stuff and writing your own custom DLL&#8217;s is really easy once you get the hang of it!</p>
<p>I needed to do a few HTTP calls &#8220;under the radar&#8221; from a script so using <a title="Visit CodeGear.com" href="http://www.codegear.com" target="_blank">Delphi 2009</a> I wrote my own HTTPClient DLL that allows me to do a HTTP GET to a specific URL without adding to the statistics (Pages and Hits/Sec stats).<span id="more-108"></span></p>
<p>Creating DLL&#8217;s in Delphi is really simple. One of the things I had to keep in mind was that D2009 uses unicode internally so I had to take care to convert any internal strings to non-unicode before returning them to LR. I opted for using the Indy 10 component TIdHTTP as the base HTTP client, adding some Cookie handling and Compression support (gzip,deflate) and making sure the DLL was thread safe (as many client threads/process would be using it). I also soon realized I needed HTTP Proxy Support so in the end I added that too.</p>
<p>Finally had a DLL that exported the following methods:</p>
<ul>
<li>http_Initialize( VUserID: Integer )</li>
<li>http_WebProxy( VUser: Integer; Host:PAnsiChar; Port: Integer )</li>
<li>http_WebGet( VUserID: Integer; URL: PAnsiChar; DestBuf: PAnsiChar; BufSize: Integer )</li>
<li>http_Finalize( VUserID: Integer )</li>
</ul>
<p>The VUserID is the identifier for the connection since the DLL supports keep-alive. Calling Finalize() will destroy all cookies and disconnect the client from the server.</p>
<p>I also made a small sample script that utilizes all the methods:</p>
<pre class="brush: cpp;">
vuser_init()
{
    int ret, VUserID;
    char buf[10240];

	// Get VUserID
    VUserID = atoi(lr_eval_string(&quot;{VUserID&quot;));

	// Load the DLL
    lr_load_dll(&quot;HTTPClient.dll&quot;);

	// Initialize the VUser object inside the DLL
    http_Initialize( VUserID );

	// Set the HTTP Proxy
	http_WebProxy( VUserID, &quot;127.0.0.1&quot;, 8080);

	// Clear buffer, and get the URL's response
	memset(buf,0,sizeof(buf));
    ret = http_WebGet( VUserID, &quot;http://www.celarius.com&quot;, buf, sizeof(buf) );

	// Check for error
	// Returns
	//  0 != Insufficient Buffer (Returned value is needed size)
	if (ret != 0) lr_error_message(&quot;Error: RetCode=%d&quot;, ret)
	else lr_output_message(&quot;%s&quot;, buf);

	// Finalize the VUser (free the VUser object inside the DLL)
    http_Finalize( VUserID );

	return 0;
}
</pre>
<p>An additional good thing with this is that the DLL can be loaded under ANY protocol, so now HTTP calls can be made in any script type!</p>
<p><a title="Download DLL file" href="http://celarius.com/files/HTTPClientDLL_v1.0.1.36.zip">Click here to download v1.0.1.36 of the DLL (295KB)</a><br />
<hr />
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ptfrontline.wordpress.com/108/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ptfrontline.wordpress.com/108/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ptfrontline.wordpress.com/108/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ptfrontline.wordpress.com/108/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ptfrontline.wordpress.com/108/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ptfrontline.wordpress.com/108/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ptfrontline.wordpress.com/108/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ptfrontline.wordpress.com/108/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ptfrontline.wordpress.com/108/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ptfrontline.wordpress.com/108/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ptfrontline.wordpress.com&blog=3385845&post=108&subd=ptfrontline&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://ptfrontline.wordpress.com/2009/02/24/using-a-custom-dll-in-loadrunner/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/048d611d434cda8968e902b7ab82234f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Kim</media:title>
		</media:content>
	</item>
		<item>
		<title>Optimizing a Delphi 2009 app using Firebird 2.5 Alpha 1</title>
		<link>http://ptfrontline.wordpress.com/2009/02/03/optimizing-a-delphi-2009-app-using-firebird-25-alpha-1/</link>
		<comments>http://ptfrontline.wordpress.com/2009/02/03/optimizing-a-delphi-2009-app-using-firebird-25-alpha-1/#comments</comments>
		<pubDate>Tue, 03 Feb 2009 13:36:47 +0000</pubDate>
		<dc:creator>Kim</dc:creator>
				<category><![CDATA[Delphi]]></category>
		<category><![CDATA[Firebird]]></category>
		<category><![CDATA[database]]></category>

		<guid isPermaLink="false">http://ptfrontline.wordpress.com/?p=106</guid>
		<description><![CDATA[The last few days I&#8217;ve spent optimizing an application written in Delphi 2009 that talks to a Firebird database using the standard TIBDatabase, TIBTransaction and TIBSQL components  The application needs to do alot of reading/writing to the database, and was rather slow so I had to optimize it a little &#8230;The application is basically an [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ptfrontline.wordpress.com&blog=3385845&post=106&subd=ptfrontline&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>The last few days I&#8217;ve spent optimizing an application written in <a title="Visit Embarcadero" href="http://www.embarcadero.com" target="_blank">Delphi 2009</a> that talks to a <a title="Visit Firebird" href="http://www.firebirdsql.org" target="_blank">Firebird</a> database using the standard TIBDatabase, TIBTransaction and TIBSQL components  The application needs to do alot of reading/writing to the database, and was rather slow so I had to optimize it a little &#8230;<span id="more-106"></span>The application is basically an Indy based Web-Server that receives simple GET parameters, does a thing or two in the DB and returns with the Success/Fail and a possible result from the DB.</p>
<p>My need was to have more than 400 simultaneous connections to the web-server (keep-alive=true) and still maintain good performance in regards to reads/writes. For each command I have to do 3 selects and optionally one delete or insert. Further the business logic dictates that in a certain case only one (1) client can do a SELECT+DELETE and thus guarantee to retrieve a unique row from the table.</p>
<p>After several trial/errors I finally got to a situation where I was able to get 50 hits/sec with 400 active connections, and still retain response times of under 0.3 sec/insert and &lt;1 sec for select+delete operations. Each connection has its own TIBDatabase component, and each SELECT or DELETE had it&#8217;s own transaction. Adding more load to the application only resulted in longer response times, but no more than 50 GET commands/sec.</p>
<p>The DB server was a QuadCore (4 x 3.0 GHz XEON) machine and the app is running on the same machine. Local connection to Firebird was with TCP. Firebird was configured to use all 4 cores and HashSlots was increased to 499. The machine avg CPU was around 55%-60%. My guess is that the Disk I/O was the limiting factor.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ptfrontline.wordpress.com/106/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ptfrontline.wordpress.com/106/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ptfrontline.wordpress.com/106/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ptfrontline.wordpress.com/106/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ptfrontline.wordpress.com/106/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ptfrontline.wordpress.com/106/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ptfrontline.wordpress.com/106/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ptfrontline.wordpress.com/106/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ptfrontline.wordpress.com/106/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ptfrontline.wordpress.com/106/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ptfrontline.wordpress.com&blog=3385845&post=106&subd=ptfrontline&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://ptfrontline.wordpress.com/2009/02/03/optimizing-a-delphi-2009-app-using-firebird-25-alpha-1/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/048d611d434cda8968e902b7ab82234f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Kim</media:title>
		</media:content>
	</item>
		<item>
		<title>Windows 7 &#8211; A promising thing when it comes to performance</title>
		<link>http://ptfrontline.wordpress.com/2009/01/17/windows-7-a-promising-thing-when-it-comes-to-performance/</link>
		<comments>http://ptfrontline.wordpress.com/2009/01/17/windows-7-a-promising-thing-when-it-comes-to-performance/#comments</comments>
		<pubDate>Sat, 17 Jan 2009 12:24:37 +0000</pubDate>
		<dc:creator>Kim</dc:creator>
				<category><![CDATA[Main]]></category>
		<category><![CDATA[Delphi 2009]]></category>
		<category><![CDATA[Firebird]]></category>
		<category><![CDATA[Windows 7]]></category>
		<category><![CDATA[Windows Vista]]></category>

		<guid isPermaLink="false">http://ptfrontline.wordpress.com/?p=103</guid>
		<description><![CDATA[As soon as I was able to (the download surge killing Win7 downloads prevented it for a while) I downloaded and installed 2 copies of the Win7 beta. One was on an old 3GHz HT Intel with 2Gb mem and the other on a Virtual PC inside my QuadCore Vista ultimate machine.
The installation was smooth [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ptfrontline.wordpress.com&blog=3385845&post=103&subd=ptfrontline&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>As soon as I was able to (the download surge killing Win7 downloads prevented it for a while) I downloaded and installed 2 copies of the Win7 beta. One was on an old 3GHz HT Intel with 2Gb mem and the other on a Virtual PC inside my QuadCore Vista ultimate machine.</p>
<p>The installation was smooth on both, took about the same time and I was amazed at the lack of problems along the way. Both recognized all hardware components without problems and everything seemed fast on the GFX level even when I was using a VGA mode for both (no seeing any GFX specialties).</p>
<p>I next installed <a title="Firebird" href="http://www.firebirdsql.org" target="_self">Firebird v2.1</a> (latest stable) and it insalled without problems as well on both machines. I didn&#8217;t have much time to play around with the OS but the little I did showed me a stable well working system with very little or no hichups at all.</p>
<p>In my personal opinion this Win7 will be a hit-OS in the future. It feels fast and looks good and I see no reason for me to start looking into alternative OS&#8217;s in the future. If drivers and programs are made compatible with this Beta I suspect they will work well with the official release and if MS adds WinFS or other enhancements to it later they will likely not break the compatibility in any way.</p>
<p>I for one will surely use it in the future! And a s bonus it seems my <a title="Delphi 2009" href="http://www.embarcadero.com" target="_blank">Delphi 2009</a> programs are also working flawlessly on it!</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ptfrontline.wordpress.com/103/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ptfrontline.wordpress.com/103/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ptfrontline.wordpress.com/103/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ptfrontline.wordpress.com/103/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ptfrontline.wordpress.com/103/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ptfrontline.wordpress.com/103/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ptfrontline.wordpress.com/103/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ptfrontline.wordpress.com/103/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ptfrontline.wordpress.com/103/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ptfrontline.wordpress.com/103/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ptfrontline.wordpress.com&blog=3385845&post=103&subd=ptfrontline&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://ptfrontline.wordpress.com/2009/01/17/windows-7-a-promising-thing-when-it-comes-to-performance/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/048d611d434cda8968e902b7ab82234f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Kim</media:title>
		</media:content>
	</item>
		<item>
		<title>How users see a SAP EP Portal perform &#8230;</title>
		<link>http://ptfrontline.wordpress.com/2008/12/12/how-users-see-a-sap-ep-portal-perform/</link>
		<comments>http://ptfrontline.wordpress.com/2008/12/12/how-users-see-a-sap-ep-portal-perform/#comments</comments>
		<pubDate>Fri, 12 Dec 2008 12:31:50 +0000</pubDate>
		<dc:creator>Kim</dc:creator>
				<category><![CDATA[Main]]></category>
		<category><![CDATA[LoadRunner]]></category>
		<category><![CDATA[QALoad]]></category>
		<category><![CDATA[SAP]]></category>

		<guid isPermaLink="false">http://ptfrontline.wordpress.com/?p=90</guid>
		<description><![CDATA[I recently had the opportunity to test a SAP Enterprise Portal (web interface) with several different tools. I used both LoadRunner and QALoad, but in the end the customer chose LR for this, since scripting was somewhat easier in LR.
The performance of the EP portal is fairly good when it comes to communicating with the [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ptfrontline.wordpress.com&blog=3385845&post=90&subd=ptfrontline&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>I recently had the opportunity to test a SAP Enterprise Portal (web interface) with several different tools. I used both LoadRunner and QALoad, but in the end the customer chose LR for this, since scripting was somewhat easier in LR.</p>
<p>The performance of the EP portal is fairly good when it comes to communicating with the server on a HTTP protocol level, but boy was the customer in for a surprise when they actually used the interface. <span id="more-90"></span>The whole EP interface is built around a huge amount of JavaScript (we are talking thousands of lines of code for every page) and is very complicated. It turns out that the client machines rendering the interface was the problem, along with an AntiVirus software that scanned the content. Sometimes drawing the interface on-screen took as much as 20 seconds while the actual transfers of data where in the range of less than 3 seconds.</p>
<p>So all in all, the performance reports shows a good positive thing, whilst the users experienced something totally different. I once again have been reminded that performance testing is not just measuring the servers responses but measuring the end-user experience of the system under test!</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ptfrontline.wordpress.com/90/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ptfrontline.wordpress.com/90/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ptfrontline.wordpress.com/90/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ptfrontline.wordpress.com/90/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ptfrontline.wordpress.com/90/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ptfrontline.wordpress.com/90/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ptfrontline.wordpress.com/90/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ptfrontline.wordpress.com/90/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ptfrontline.wordpress.com/90/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ptfrontline.wordpress.com/90/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ptfrontline.wordpress.com&blog=3385845&post=90&subd=ptfrontline&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://ptfrontline.wordpress.com/2008/12/12/how-users-see-a-sap-ep-portal-perform/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/048d611d434cda8968e902b7ab82234f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Kim</media:title>
		</media:content>
	</item>
	</channel>
</rss>