<?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/"
	>

<channel>
	<title>Altentee &#187; Performance &#38; Test Automation Experts &#187; productivity</title>
	<atom:link href="http://altentee.com/tag/productivity/feed/" rel="self" type="application/rss+xml" />
	<link>http://altentee.com</link>
	<description>Performance and Test Automation Experts</description>
	<lastBuildDate>Sat, 12 Jun 2010 00:35:08 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>GMail Getting Things Done &#8211; a poor man&#8217;s version</title>
		<link>http://altentee.com/2009/gmail-getting-things-done-a-poor-mans-version/</link>
		<comments>http://altentee.com/2009/gmail-getting-things-done-a-poor-mans-version/#comments</comments>
		<pubDate>Thu, 15 Oct 2009 22:21:37 +0000</pubDate>
		<dc:creator>Tim Koopmans</dc:creator>
				<category><![CDATA[90kts]]></category>
		<category><![CDATA[Altentee]]></category>
		<category><![CDATA[productivity]]></category>

		<guid isPermaLink="false">http://90kts.com/blog/2009/gmail-getting-things-done-a-poor-mans-version/</guid>
		<description><![CDATA[<p>I really like the concept of Getting Things Done. I&#8217;m also a fan of Inbox Zero. Well, at least try to be. Here&#8217;s how I implement GTD using my gmail account&#8230;

First I create four labels:
label:g-action
label:g-waiting-on
label:g-some-day
label:g-finished</p>
<p>Now I can tag emails in my inbox when I view them with the keyboard shortcut l->a for action, w for [...]]]></description>
			<content:encoded><![CDATA[<p>I really like the concept of <a href="http://en.wikipedia.org/wiki/Getting_Things_Done"><strong>Getting Things Done</strong></a>. I&#8217;m also a fan of <a href="http://inboxzero.com/"><strong>Inbox Zero</strong></a>. Well, at least try to be. Here&#8217;s how I implement GTD using my gmail account&#8230;<br />
<span id="more-255"></span><br />
First I create four labels:<br />
label:g-action<br />
label:g-waiting-on<br />
label:g-some-day<br />
label:g-finished</p>
<p>Now I can tag emails in my inbox when I view them with the keyboard shortcut <code>l->a</code> for action, <code>w</code> for waiting-on and so forth.<br />
<a href='http://90kts.com/blog/wp-content/uploads/2009/10/labels_action.png' title='labels_action.png'><img src='http://90kts.com/blog/wp-content/uploads/2009/10/labels_action.png' alt='labels_action.png' /></a></p>
<p>I make a habit of reading, deleting or tagging each email that comes through my inbox. Hence I get closer to Inbox Zero.</p>
<p>I also use the Quick Links feature available through GMail Labs.<br />
<a href='http://90kts.com/blog/wp-content/uploads/2009/10/quick_links.png' title='quick_links.png'><img src='http://90kts.com/blog/wp-content/uploads/2009/10/quick_links.png' alt='quick_links.png' /></a></p>
<p>I then create links to the 4 labels by searching on the syntax described previously.<br />
<a href='http://90kts.com/blog/wp-content/uploads/2009/10/quick_links_labels.png' title='quick_links_labels.png'><img src='http://90kts.com/blog/wp-content/uploads/2009/10/quick_links_labels.png' alt='quick_links_labels.png' /></a></p>
<p>There are of course plenty of apps and additional plugins for specific browsers that achieve the same thing. I just like this approach because it is generally OS/browser independent which means I can take it with me from workplace to workplace (provided they let me access my gmail account of course!)</p>
]]></content:encoded>
			<wfw:commentRss>http://altentee.com/2009/gmail-getting-things-done-a-poor-mans-version/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Performance Testing with Apdex</title>
		<link>http://altentee.com/2008/performance-testing-with-apdex/</link>
		<comments>http://altentee.com/2008/performance-testing-with-apdex/#comments</comments>
		<pubDate>Thu, 28 Aug 2008 04:03:41 +0000</pubDate>
		<dc:creator>Tim Koopmans</dc:creator>
				<category><![CDATA[90kts]]></category>
		<category><![CDATA[Altentee]]></category>
		<category><![CDATA[productivity]]></category>
		<category><![CDATA[tools]]></category>

		<guid isPermaLink="false">http://90kts.com/blog/2008/performance-testing-with-apdex/</guid>
		<description><![CDATA[<p>Often when performance testing in a black box environment, you are left with the onerous responsibility to report against response time performance.</p>
<p>A typical approach by performance testers is to rely on 95th percentiles, which is effectively a Service Level Agreement (SLA) saying that 95 percent of all my samples have a response time below 5 [...]]]></description>
			<content:encoded><![CDATA[<p>Often when performance testing in a black box environment, you are left with the onerous responsibility to report against response time performance.</p>
<p>A typical approach by performance testers is to rely on 95th percentiles, which is effectively a Service Level Agreement (SLA) saying that 95 percent of all my samples have a response time below 5 seconds. This is often specified as a Non Functional Requirement (NFR).</p>
<p>But so what? What does this really tell us? More importantly, if the SLA fails, you&#8217;re probably left hanging in the wind trying to explain how &#8220;bad&#8221; it failed to a (now interested) Project Manager. On the flip side, if everything is green, how close were you to failing? Are you an n&#8217;th degree away from failing? What about comparing two different  application&#8217;s response time performance when they have different NFRs to begin with? Getting confused?</p>
<p>Enter the <a href="http://www.apdex.org"><strong>Apdex</strong></a> performance index. Apdex is a numerical measure of user satisfaction that can be built from metrics expressed via more traditional SLAs and/or NFRs. The fundamental objective of Apdex is to simplify the reporting of application response time measurements by making it possible to represent any such measurement using a common metric. This can be reported on by extracting data from Load Runner / JMeter and analysing within Excel as demonstrated below.<br />
<a href='http://90kts.com/blog/wp-content/uploads/2008/08/excel2007_apdex.png' title='apdex_2007'><img src='http://90kts.com/blog/wp-content/uploads/2008/08/excel2007_apdex.png' alt='apdex_2007' /></a></p>
<p>Read on to find out more about these scores and how they are calculated.<br />
<span id="more-198"></span></p>
<p>The apdex score is a unified measurement between 1.00 &#8211; 0.00, or in plain English, Excellent, Good, Fair, Poor and Unacceptable. This colour chart represents those values:<br />
<a href='http://90kts.com/blog/wp-content/uploads/2008/08/apdex.png' title='apdec'><img src='http://90kts.com/blog/wp-content/uploads/2008/08/apdex.png' alt='apdec' /></a></p>
<p>You calculate the apdex index by first counting the total number of samples, the number of samples that have &#8217;satisified&#8217; a criteria (e.g. your SLA of 5 seconds), the number of samples that are &#8216;tolerating&#8217; (e.g. greater than 5 seconds but less than 10 seconds) and the number of samples that have failed (e.g. greater than 10 seconds). You then whack them into a formula as such:</p>
<p><a href='http://90kts.com/blog/wp-content/uploads/2008/08/apdex_calc.png' title='apdex calc'><img src='http://90kts.com/blog/wp-content/uploads/2008/08/apdex_calc.png' alt='apdex calc' /></a></p>
<p>And out pops an index between 0 and 1. Compare it to your colour chart and whammo! You now know how good or bad your application performance (in terms of response time) really is&#8230;</p>
<p><code><rant></code><br />
Apdex really is just a granular traffic light, but it also provides a single scale which traffic lights or SLA red/green status do not. So for example, one app has an NFR of 30 secs and another has one at 5 secs, apdex provides the same unit of measurement for both. So you could possibly trend for improvement/degradation of that index over time if you sampled frequently enough i.e.<br />
app 1 was <em>0.85, 0.84, 0.83, 0.82</em> and app 2 was <em>0.85, 0.80, 0.79, 0.87</em>, is a better unit of comparison than NFR/SLA secs if app1 was <em>30, 31, 32, 34</em>, and app 2 was <em>15, 13, 10, 13</em>. Hard to compare the latter as it is a different scale.</p>
<p>You can also subjectively differentiate with T, so if you see APDEX[subscript T] score of 0.85[30] you know that there is possibly a huge buffer factored into the tolerating score, perhaps reducing the effectiveness of the index. I prefer to set satisfying = NFR, then tolerating to 1.5 x NFR.</p>
<p>Another technique I like to apply is to use the apdex index score in a risk management matrix, so I can use that as a weighting factor i.e traditional risk score / adpex index = revised risk score.<br />
So low apdex scores are duly considered in a <strong>so-what</strong> decision about risk.</p>
<p>Plus in generating an apdex you get information on the count that was satisfied, tolerating, or failing, which audiences such as Project Managers can better understand. People really want to know how <em>badly</em> they failed a NFR/SLA and apdex is user friendly in this regard.<br />
<code></rant></code></p>
<p><strong>So how do you use Apdex with LoadRunner (or JMeter, or Grinder etc)?</strong><br />
Pretty simple actually. Export the response times from your measured transactions into a spreadsheet, then with a little array formula magic, spit out an automated report for inclusion in your test summaries.</p>
<p>I am attaching an example spreadsheet in Excel 2002 format, as this is probably the most common denominator in your work environment. For the ultra snazzy client, I prefer 2007 with its new ability to do multiple COUNTIFS (multiple criteria) and snappy looking traffic lights. You be the judge.<br />
<a href='http://90kts.com/blog/wp-content/uploads/2008/08/apdex_2002.png' title='apdex 2002'><img src='http://90kts.com/blog/wp-content/uploads/2008/08/apdex_2002.png' alt='apdex 2002' width=500/></a><br />
<a href='http://90kts.com/blog/wp-content/uploads/2008/08/apdex.xls' title='apdex excel'>Download: apdex excel spreadsheet template</a><br />
If you&#8217;re feeling generous at the end of all this thinking &#8220;thank God I don&#8217;t have to go through the pain of figuring this out in Excel&#8221; then feel free to:</p>
<form action="https://www.paypal.com/cgi-bin/webscr" method="post">
<input type="hidden" name="cmd" value="_s-xclick">
<input type="image" src="http://90kts.com/blog/wp-content/themes/90kts/images/x-click-but21.gif" border="0" name="submit" alt="Make payments with PayPal - it's fast, free and secure!">
<img alt="" border="0" src="https://www.paypal.com/en_AU/i/scr/pixel.gif" width="1" height="1"></p>
<input type="hidden" name="encrypted" value="-----BEGIN PKCS7-----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-----END PKCS7-----">
</form>
<p> <img src='http://altentee.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://altentee.com/2008/performance-testing-with-apdex/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Speeding Up Script Development Time in LoadRunner</title>
		<link>http://altentee.com/2008/speeding-up-script-development-time-in-loadrunner/</link>
		<comments>http://altentee.com/2008/speeding-up-script-development-time-in-loadrunner/#comments</comments>
		<pubDate>Tue, 26 Feb 2008 03:56:30 +0000</pubDate>
		<dc:creator>Tim Koopmans</dc:creator>
				<category><![CDATA[90kts]]></category>
		<category><![CDATA[Altentee]]></category>
		<category><![CDATA[loadrunner]]></category>
		<category><![CDATA[productivity]]></category>

		<guid isPermaLink="false">http://90kts.com/blog/2008/speeding-up-script-development-time-in-loadrunner/</guid>
		<description><![CDATA[<p>If you&#8217;ve ever had to write lots of LoadRunner scripts you&#8217;ll probably be interested in this snippet of code. Imagine you&#8217;re in a situation where you need to produce many LoadRunner scripts each with multiple actions. Normally, once you&#8217;ve got all your custom correlations down pat (I hate correlation studio BTW) you will also have [...]]]></description>
			<content:encoded><![CDATA[<p>If you&#8217;ve ever had to write lots of LoadRunner scripts you&#8217;ll probably be interested in this snippet of code. Imagine you&#8217;re in a situation where you need to produce many LoadRunner scripts each with multiple actions. Normally, once you&#8217;ve got all your custom correlations down pat (I hate correlation studio BTW) you will also have a ton of stock standard parameters that you need to find and replace within your scripts. You can do this manually in a point and click type fashion; you can even use VuGen&#8217;s clunky text editor (Ctrl-H) to search and replace text strings etc, but if you get sick of this approach, and you want to be more consistent / accurate in your parametization, try the following Perl script.<br />
<span id="more-119"></span></p>
<p>The attached code below does a couple of things. First, when you&#8217;re viewing the code in VuGen, you would first select all and copy the code into memory (Ctrl-A, Ctrl-C) Then you can launch the Perl script (mine is just an icon on my quick launch toolbar) itself. Secondly, once launched, the Perl script goes through and makes all the necessary changes to your code as per the following steps:</p>
<p>1. Using Win32::Clipboard, it reads the copied text from your clipboard into a temporary variable called $copy.<br />
2. Using regex, it then goes through and adds all your customizations, such as common web_reg_finds, web_reg_save_params and any other parameters you would repeatedly use.<br />
3. Using Tk, it then shows you a preview of the formatted code so you can decide if everything is good to go.<br />
<a href='http://90kts.com/blog/wp-content/uploads/2008/02/loadclipper.jpg' title='loadClipper'><img src='http://90kts.com/blog/wp-content/uploads/2008/02/loadclipper.jpg' alt='loadClipper' /></a><br />
4. The re-formatted code is automatically copied back into clipboard, so all you need to do is paste that back into VuGen &#8230;</p>
<p>Basically this should help you write more consistent code. You do need to be familiar with regex though, in order to write your own rules. See the applyRules subroutine for some examples I&#8217;m currently using.</p>
<p><code><br />
use Tk;<br />
use Win32::Clipboard;</p>
<p>my $ver    = "0.8e";<br />
my $clip   = Win32::Clipboard();<br />
my $result = $clip->Get();<br />
my $main 	= MainWindow->new();<br />
my $frame   = $main->Frame()->pack(-side=>'top', -fill =>'x');<br />
my $text	= $main->Scrolled('Text');<br />
   $text->pack(	-expand	=> 1,<br />
                -fill	=> 'both' );<br />
    tie (*TEXT, 'Tk::Text', $text);</p>
<p># Globals<br />
&#038;processHeader();<br />
&#038;correlateSessionIds();<br />
&#038;correlateSnapshots();</p>
<p># Correlations<br />
&#038;correlate('correl_productCode',           'productCode=',              '\$');<br />
&#038;correlate('correl_productId',             'bcProductId=',              '\$');<br />
&#038;correlate('correl_productVersion',        'productVersion=',           '\$');<br />
&#038;correlate('correl_productSubVersion',     'productSubVersion=',        '\$');<br />
&#038;correlate('correl_taskId',                'taskId=',                   '\$');<br />
&#038;correlate('correl_requestVersion',        'requestVersion=',           '\$');<br />
&#038;correlate('correl_popupTxopenPopupList',  'PopupTxopenPopupList=',     ';');</p>
<p># content tab correls<br />
&#038;correlate('correl_contentId',              'contentId=',               '\$');<br />
# end</p>
<p># Parameters<br />
&#038;parametize('"Name=requestnum", "Value=(\d+)"',<br />
            '"Name=requestnum", "Value={lr_requestNum}"');<br />
&#038;parametize('"Name=LastRequestTotalTime", "Value=(\d+)"',<br />
            '"Name=LastRequestTotalTime", "Value={lr_lastRequestTotalTime}"');<br />
&#038;parametize('"Name=NUM_advertiserId", "Value=(\d+)"',<br />
            '"Name=NUM_advertiserId", "Value={advertiserId}"');<br />
&#038;parametize('advID=(\d+)',                'advID={advertiserId}');<br />
&#038;parametize('NUM_advertiserId=(\d+)',     'NUM_advertiserId={advertiserId}');<br />
&#038;parametize('advertiserId=(\d+)',         'advertiserId={advertiserId}');<br />
&#038;parametize('"Name=NUM_productId", "Value=(\d+)"',<br />
            '"Name=NUM_productId", "Value={correl_productId}"');<br />
&#038;parametize('productId=(\d+)',         'productId={correl_productId}');</p>
<p># content tab params<br />
&#038;parametize('"Name=NUM_AdvertiserIDOfGeneralInfo", "Value=(\d+)"',<br />
            '"Name=NUM_AdvertiserIDOfGeneralInfo", "Value={advertiserId}"');<br />
&#038;parametize('NUM_AdvertiserIDOfGeneralInfo=(\d+)',<br />
            'NUM_AdvertiserIDOfGeneralInfo={advertiserId}');<br />
&#038;parametize('contentIdOfgeneralInfo=(\d+)',         'contentIdOfgeneralInfo={correl_contentId}');<br />
&#038;parametize('artPiece.generalInfo.advertiserID.stringValue", "Value=(\d+)"',<br />
            'artPiece.generalInfo.advertiserID.stringValue", "Value={advertiserId}"');<br />
&#038;parametize('artPiece.generalInfo.advertiserID.stringValue=(\d+)',<br />
            'artPiece.generalInfo.advertiserID.stringValue={advertiserId}');<br />
# end</p>
<p># Clean up the code<br />
&#038;cleanUp();</p>
<p># Print to screen<br />
print TEXT $result;</p>
<p># Loop da loop<br />
MainLoop();</p>
<p># Subs<br />
sub processHeader {<br />
    if ($result =~ /{/) {<br />
        $custom =   '{'."\n\n\t\/* custom parameters by loadClipper v$ver \n\t\tend mods\n\t*\/\n".<br />
                    "\n\n\t// advertiserId from dbApi added by loadClipper v$ver \n".<br />
                    "\t".'dbApi("selectUniqueNext", "advertiserId", "advertisers","","");'."\n";<br />
        $result =~ s/{/$custom/;<br />
    }</p>
<p>    if ($result =~ /Action=http:\/\/(.+?)\//g) {<br />
        $custom = pack("A30","\t{host_302}")."\t$1\n";<br />
        $result =~ s/$1/{host_302}/g;<br />
        $result =~ s/\t\tend mods\n/\t$custom\n\t\tend mods\n/;<br />
    }<br />
}</p>
<p>sub correlate {<br />
    my $param   = $_[0];<br />
    my $LB      = $_[1];<br />
    my $RB      = $_[2];</p>
<p>    my $search  = $LB.'(\d+|\w+)'.$RB;<br />
    print $search . "\n";</p>
<p>    $LB =~ s/\\//g;<br />
    $RB =~ s/\\//g;<br />
    my $replace = $LB."{".$param."}".$RB;</p>
<p>    my $web_reg_save =<br />
                    "\n\n\t// auto correlation by loadClipper v$ver \n".<br />
                    "\tweb_reg_save_param(\"$param\",\n".<br />
                    "\t\t\"LB=$LB\",\n".<br />
                    "\t\t\"RB=$RB\",\n".<br />
                    "\t\t\"Search=Body\",\n".<br />
                    "\t\t"."LAST);\n\n\n\t";</p>
<p>    $result =~ s/$search/$replace/g;</p>
<p>    my @indexes = ();<br />
    my $index   = 0;<br />
    while ($result =~ m/(web.+?\);)/sg) {<br />
        $this = $1;</p>
<p>        if ($this =~ /$param/g) {<br />
            $index = pop(@indexes) || index($result, $this);<br />
            substr($result, $index, 0) = $web_reg_save;<br />
            last;<br />
        }</p>
<p>        if ($this =~ /web_submit_data/g) {<br />
            $index = index($result, $this);<br />
            push(@indexes, $index);<br />
        }<br />
    }<br />
}</p>
<p>sub correlateSessionIds {<br />
    # Process local popup session IDs<br />
    my %popupSessions = ();<br />
    while ($result =~ m/(web_url\("Popup;jsessionid=)(.+?)",/sg) {<br />
        $popupSessions{"$2"} = index($result, "$1$2");<br />
    }</p>
<p>    foreach $key(keys %popupSessions) {<br />
        my $search  = $key;<br />
        my $index   = $popupSessions{$key};<br />
        my $param   = ($key =~ /([\w\d]{10})!/g) ? "correl_popup_".$1 : undef;<br />
        my $replace = "{$param}";<br />
        my $web_reg_save =<br />
                    "\n\n\t// auto correlation by loadClipper v$ver \n".<br />
                    "\tweb_reg_save_param(\"$param\",\n".<br />
                    "\t\t\"LB=Popup;jsessionid=\",\n".<br />
                    "\t\t\"RB=\\\"\",\n".<br />
                    "\t\t\"Search=Body\",\n".<br />
                    "\t\t"."LAST);\n\n\n\t";<br />
        substr($result, $index, 0) = $web_reg_save;<br />
        $result =~ s/$search/$replace/g;<br />
    }</p>
<p>    # Process opener and primary session IDs<br />
    if ($result =~ /jsessionid=(.+?)_/g) {<br />
        $result =~ s/$1/{correl_mainSessionId}/g;<br />
        $result =~ s/{correl_mainSessionId}_\d+/{correl_mainSessionId}_{lr_sessionNum}/g;<br />
    }<br />
}</p>
<p>sub correlateSnapshots {<br />
    # Random snapshot number viewer based on ascii->char conversion of action_name<br />
    if ($result =~ /^([\w\_])+\(\)/g) {<br />
        @num = unpack("C*",$1);<br />
        foreach (@num) {<br />
            $tNumber += $_;<br />
        }<br />
        $tNumber *= 100;<br />
        $custom = pack("A30","\t{Snapshot tNumber start}")."\t$tNumber\n";<br />
        $result =~ s/\t\tend mods\n/\t$custom\n\t\tend mods\n/;<br />
        @match = ($result =~ /Snapshot=t(\d+)\.inf/g);<br />
        foreach (@match) {<br />
            $result =~ s/Snapshot=t$_\.inf/Snapshot=t$tNumber\.inf/g;<br />
            $tNumber++;<br />
        }<br />
    }<br />
}</p>
<p>sub parametize {<br />
    my $search  = $_[0];<br />
    my $replace = $_[1];</p>
<p>    if ($result =~ /$search/g) {<br />
        my $value  = $1;<br />
        my $param  = ($replace =~ /{(.+?)}/g) ? $1 : undef;<br />
        $result =~ s/$search/$replace/g;<br />
    }<br />
}</p>
<p>sub cleanUp {<br />
    $result =~ s/[\r]+/\n/g;<br />
    $result =~ s/\n\n/\n/g;<br />
    $clip->Empty;<br />
    $clip->Set($result);<br />
}</p>
<p></code></p>
]]></content:encoded>
			<wfw:commentRss>http://altentee.com/2008/speeding-up-script-development-time-in-loadrunner/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
