<?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; testing</title>
	<atom:link href="http://altentee.com/tag/testing/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>Why Load Testing Does Not Work for the Web `Date::today &gt;&gt; 36`</title>
		<link>http://altentee.com/2009/why-load-testing-does-not-work-for-the-web-datetoday-36/</link>
		<comments>http://altentee.com/2009/why-load-testing-does-not-work-for-the-web-datetoday-36/#comments</comments>
		<pubDate>Sun, 18 Oct 2009 21:20:50 +0000</pubDate>
		<dc:creator>Tim Koopmans</dc:creator>
				<category><![CDATA[90kts]]></category>
		<category><![CDATA[Altentee]]></category>
		<category><![CDATA[testing]]></category>
		<category><![CDATA[tools]]></category>

		<guid isPermaLink="false">http://90kts.com/blog/2009/why-load-testing-does-not-work-for-the-web-datetoday-36/</guid>
		<description><![CDATA[<p>I was going to write why LoadRunner does not work for the web as it is today and into the foreseeable future, but decided against that because I don&#8217;t think the following points are necessarily limited to a specific toolset.</p>
<p>Load testing does not work for web as it is today primarily because&#8230;

1. Load testing tool [...]]]></description>
			<content:encoded><![CDATA[<p>I was going to write why LoadRunner does not work for the web as it is today and into the foreseeable future, but decided against that because I don&#8217;t think the following points are necessarily limited to a specific toolset.</p>
<p>Load testing does not work for web as it is today primarily because&#8230;<br />
<span id="more-259"></span><br />
<em>1. Load testing tool languages are not flexible enough. </em><br />
Load testing tools are in need of a major overhaul. Consider <a href="https://h10078.www1.hp.com/cda/hpms/display/main/hpms_content.jsp?zn=bto&#038;cp=1-11-126-17%5E8_4000_100__"><strong>LoadRunner</strong></a>, the majority of your scripts will be specified in C or proprietary API calls such as lr_ statements. String manipulation for example, whilst possible is extremely clunky and requires oodles of C code. <strong><a href="http://90kts.com/blog/2009/regex-search-and-replace-in-loadrunner/">Lack of proper regex</a></strong> or xpath support limits script flexibility in terms of parsing the necessary contents of web page and ajax calls. Don&#8217;t even get me started on ajax! Similar complaints for <a href="http://jakarta.apache.org/jmeter/"><strong>JMeter</strong></a>. Although better support for regex you can really only edit test plans via the GUI. You&#8217;ll go cross-eyed looking at test plans in xml. I think <a href="http://grinder.sourceforge.net/"><strong>the Grinder</strong></a> is the closest product I&#8217;ve seen that supports flexibility as you can write tests in Jython which provides more flexibility in terms of scripting.</p>
<p><em>2. We&#8217;re still stuck in record and playback mode.</em><br />
We really haven&#8217;t advanced like our automation brethren. Part of the big sell by commercial load testing companies is &#8220;Look it&#8217;s easy, just hit the red button and play it back when you&#8217;re finished!&#8221;. Bollocks to that, we know that never works. A dream load testing tool would support the ability to hand-code your statements and be editable in a text editor! In a similar fashion to <a href="http://watir.com"><strong>watir</strong></a>.</p>
<p>The dream tool would look like:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="ruby" style="font-family:monospace;">vusers.<span style="color:#9900CC;">start</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006666;">100</span><span style="color:#006600; font-weight:bold;">&#41;</span>
  browser.<span style="color:#9900CC;">goto</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">'url'</span><span style="color:#006600; font-weight:bold;">&#41;</span>
  browser.<span style="color:#9900CC;">button</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:text</span>, <span style="color:#006600; font-weight:bold;">/</span>Continue<span style="color:#006600; font-weight:bold;">/</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color:#9900CC;">click</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></td></tr></table></div>

<p>Instead load testing scripts in LoadRunner look something like this:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
</pre></td><td class="code"><pre class="c" style="font-family:monospace;">web_submit_data<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;transaction&quot;</span><span style="color: #339933;">,</span>
<span style="color: #ff0000;">&quot;Action=https://someurl/I/have/to/keep/correlating/damn/it&quot;</span><span style="color: #339933;">,</span>
<span style="color: #ff0000;">&quot;Method=POST&quot;</span>
<span style="color: #ff0000;">&quot;RecContentType=&quot;</span>text<span style="color: #339933;">/</span>html<span style="color: #ff0000;">&quot;,
&quot;</span>Mode<span style="color: #339933;">=</span>HTML<span style="color: #ff0000;">&quot;,
&quot;</span>ITEMDATA<span style="color: #339933;">,</span>
<span style="color: #ff0000;">&quot;Name=L_3_0_0_1_0_1&quot;</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;Value={another_value_I_have_to_correlate}&quot;</span><span style="color: #339933;">,</span>
<span style="color: #ff0000;">&quot;Name=L_3_0_0_2_0_1&quot;</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;Value={maybe_paramatize_this_one}&quot;</span><span style="color: #339933;">,</span>
ENDITEM<span style="color: #339933;">,</span>
LAST<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>We are of course talking about very different technologies. Watir automation scripts driving real browsers with win32ole, whereas most load testing tools are injecting traffic at the protocol layer. If a typical end to end scenario has 30 steps, this can amount to some 2000+ lines of code thanks to the extra verbosity of having to specify all the form values and so forth. This also means you have oodles of code to correlate and parametize. It&#8217;s not something you want to hand code, the quickest path is to record (unfortunately). <a href="http://browsermob.com"><strong>BrowserMob</strong></a> is the closest online provider I&#8217;ve seen that overcomes this, supporting load tests written as selenium scripts. Problem is, we need a solution for all those non-public facing companies, the bulk of where I do my work at!</p>
<p><em>3. No real code versioning. </em><br />
Changes to the UI will break your script! One can implement their own code versioning as I have recently begun to do with git but there really should be built in support for this. That aside, you revision your code but effectively blast it away every time you hit the red record button. Reason? Each recording can look vastly different to the last. It only takes one form value L_3_0_0_1_0_1 to change to L_3_0_0_1_0_2 or one block of code executed by an ajax call to shift to cause mass confusion. Versioning your code *may* pick this change up, but only if you got the power of the diff! Diffing just got a little harder. Shoot back 10 years ago and diffing for correlation would have been a cinch. Wind forward to today with hundreds of ajax or json calls and correlation can be a nightmare. Windiff struggles. <a href="http://code.google.com/p/daisydiff/"><strong>Daisydiff</strong></a> does a much better job highlighting differences by line and by column. This approach kind of works in a waterfall test environment. Throw in a twice weekly code drop in your performance test environment and watch your scripts break. Agile anyone?</p>
<p>So if I was an uber-elite programmer what would I do to move loadtesting into the current decade?<br />
<em>1. Develop a load-testing tool that is based on a flexible scripting language such as Ruby.<br />
2. Get rid of the record button and provide free text editors to the world!<br />
3. Provide a framework that can be versioned and easily detect changes in the system under test.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://altentee.com/2009/why-load-testing-does-not-work-for-the-web-datetoday-36/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>Untangling Performance Test Terminology</title>
		<link>http://altentee.com/2009/performance-test-terminology/</link>
		<comments>http://altentee.com/2009/performance-test-terminology/#comments</comments>
		<pubDate>Mon, 05 Jan 2009 23:02:30 +0000</pubDate>
		<dc:creator>Tim Koopmans</dc:creator>
				<category><![CDATA[Altentee]]></category>
		<category><![CDATA[testing]]></category>
		<category><![CDATA[theory]]></category>

		<guid isPermaLink="false">http://altentee.com/?p=757</guid>
		<description><![CDATA[<p>Confused about the subtle differences between a stress test, performance test or a load test? Don&#8217;t get lost in the technobabble! Altentee uses the following terminology to help describe the different types of tests we conduct:</p>

Shakeout – single script, single user, low volume scenarios whose main purpose is to confirm a correctly configured test harness [...]]]></description>
			<content:encoded><![CDATA[<p>Confused about the subtle differences between a stress test, performance test or a load test? Don&#8217;t get lost in the <a href="http://en.wikipedia.org/wiki/Technobabble">technobabble</a>! <strong>Altentee </strong>uses the following terminology to help describe the different types of tests we conduct:</p>
<ol>
<li><strong>Shakeout</strong> – single script, single user, low volume scenarios whose main purpose is to confirm a correctly configured test harness (script, parameters, data, correlation, iterations) and environment.</li>
<li><strong>Baseline</strong> – arbitrary user/volumes (typically low with multiple iterations) used to establish a baseline or reference point for further testing. Can also be used to explore/set SLAs if they have not been defined by the business using minimum sample sizes appropriate to establish a baseline.</li>
<li><strong>Load / Volume</strong> – often expressed in terms of intended production load at 100% or variations of depending on the desired test outcome. Can also incorporate growth scenarios e.g. 200%. Can also be structured to incrementally increase and sustain load up to a target so that utilization metrics can be collected for capacity modelling at each increment (e.g. ramp up from 100 to 200 users at increments of 20 additional users, with sustained execution of 20 minutes at each increment).</li>
<li><strong>Stress / Stress to Break </strong>– loads greater than intended production loads or with the specific purpose to identify component failure or ‘break’ points. Other variants include Surge / Spike testing simulating peak demands over shorter timeframes.</li>
<li><strong>Soak / Endurance</strong> – long running tests to establish performance over longer timeframes and any anomalies over time.</li>
<li><strong>Failover / Availability</strong> – targeted tests under load in failover conditions. Can also be used to test disaster recovery or availability scenarios.</li>
<li><strong>Component Based</strong> – Targeted tests designed to isolate and examine components (functional and/or specific technologies/platforms) under load.</li>
<li><strong>Penetration / Security</strong> – with the increasing inclusion of security related non-functional requirements, targeted load tests which focus on application level and/or hardware level security NFRs.</li>
<li><strong>Tuning </strong>– cyclic / iterative performance testing using any number of variables in a process of test, tune, retest and compare (for improvement).</li>
</ol>
<p>Still confused? Contact <strong><a href="../corporate/contact/" target="_self">Altentee</a></strong> and we&#8217;ll help explain our approach.</p>
]]></content:encoded>
			<wfw:commentRss>http://altentee.com/2009/performance-test-terminology/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CITCON 2008 &#8211; Melbourne</title>
		<link>http://altentee.com/2008/citcon-2008-melbourne/</link>
		<comments>http://altentee.com/2008/citcon-2008-melbourne/#comments</comments>
		<pubDate>Sat, 28 Jun 2008 23:33:11 +0000</pubDate>
		<dc:creator>Tim Koopmans</dc:creator>
				<category><![CDATA[90kts]]></category>
		<category><![CDATA[Altentee]]></category>
		<category><![CDATA[testing]]></category>

		<guid isPermaLink="false">http://90kts.com/blog/2008/citcon-2008-melbourne/</guid>
		<description><![CDATA[<p>I recently attended the 2008 conference for Continuous Integration in Melbourne, and mixed with like minded professionals involved with all aspects of CI and testing in general.</p>
<p>In short this is a great (free) opportunity to attend a conference using an open session format. By that I mean the conference is run/organized like a wiki, where [...]]]></description>
			<content:encoded><![CDATA[<p>I recently attended the 2008 conference for <strong><a href="http://www.citconf.com/wiki">Continuous Integration in Melbourne</a></strong>, and mixed with like minded professionals involved with all aspects of CI and testing in general.</p>
<p>In short this is a great (free) opportunity to attend a conference using an open session format. By that I mean the conference is run/organized like a wiki, where the attendees nominate topics they&#8217;d like to discuss or facilitate and then a user vote system organizes and makes it happen.</p>
<p>I avoided the performance testing oriented sessions and went for sessions that spoke about exploratory testing, defect management, benefits of test driven development, skills required for test automation and the last one titled &#8216;do we still need testers?&#8217; &#8230;</p>
<p>They all generated a healthy amount of discussion and it was great to hear other people&#8217;s experienced opinions on the subject matter. It was also a great opportunity to network, find out who&#8217;s working on similar problems in the local industry and from afar. There was a healthy interest in using JMeter as a performance test tool to support CI, so I&#8217;ll be posting some more targeted blogs about this in the near future, as well as some consolidated info on performance metrics collection (without SiteScope) which a few people were also interested in.</p>
<p>Anyway, if you haven&#8217;t heard about the conference, keep an eye out for next years version. It&#8217;s well worth the zero dollar commitment, free beer and t-shirt. All you have to do is &#8216;use your feet&#8217;.<br />
=)</p>
]]></content:encoded>
			<wfw:commentRss>http://altentee.com/2008/citcon-2008-melbourne/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>RailsCamp 08</title>
		<link>http://altentee.com/2008/railscamp-08/</link>
		<comments>http://altentee.com/2008/railscamp-08/#comments</comments>
		<pubDate>Fri, 27 Jun 2008 01:26:04 +0000</pubDate>
		<dc:creator>Tim Koopmans</dc:creator>
				<category><![CDATA[90kts]]></category>
		<category><![CDATA[Altentee]]></category>
		<category><![CDATA[testing]]></category>

		<guid isPermaLink="false">http://90kts.com/blog/2008/railscamp-08/</guid>
		<description><![CDATA[<p>Went to the third RailsCamp held in a scout hall near Gosford NSW last weekend; my brain has just about got back to normal after 3 solid days of drinking and coding =)</p>
<p>RailsCamp is a get together of mostly Rails developers, but also a fairly eclectic mix of Ruby hackers and geeks in general. 3 [...]]]></description>
			<content:encoded><![CDATA[<p>Went to the third RailsCamp held in a scout hall near Gosford NSW last weekend; my brain has just about got back to normal after 3 solid days of drinking and coding =)</p>
<p><a href="http://wiki.railscamp.net/w/show/HomePage">RailsCamp</a> is a get together of mostly Rails developers, but also a fairly eclectic mix of Ruby hackers and geeks in general. 3 nights of drinking, camping and coding with NO internet. Possibly the hardest habit to kick is to stop checking for emails every 5 minutes.</p>
<p>For those with harder to kick habits such as Twittering, there was a &#8216;Twetter&#8217; clone amongst other cool apps such as the &#8216;Duke&#8217;. The Duke was a user vote playlist driver for winamp (I think) and I got to observe just how close the geek community is when it comes to music tastes. Daft Punk was on fairly high rotation. Of mention was the first time we got <a href="http://en.wikipedia.org/wiki/Never_Gonna_Give_You_Up">Rick Rolled</a>, which then led to a flurry of hack attempts at the guy hosting it on his Mac.</p>
<p>Guitar Hero was in force, as was Urban Terror and a touch of BZFlag. Nice.</p>
<p>Accommodation, setup and food was awesome, the organisers really did do a good job in getting this together. Big thanks to those guys! Perhaps the best part was the ability to network with like-minded people and discuss all things related to Ruby or Rails in a collaborative manner. I managed to get a little work done relating to a test framework for use with FireWatir which I&#8217;ll post later.</p>
<p>IF you didn&#8217;t or couldn&#8217;t make it, keep an eye out for the next one to occur. Definitely worth the $100 to nerd on for a full weekend &#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://altentee.com/2008/railscamp-08/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A Perl of an idea for try &#8230; catch clauses</title>
		<link>http://altentee.com/2007/a-perl-of-an-idea-for-try-catch-clauses/</link>
		<comments>http://altentee.com/2007/a-perl-of-an-idea-for-try-catch-clauses/#comments</comments>
		<pubDate>Tue, 02 Jan 2007 23:20:50 +0000</pubDate>
		<dc:creator>Tim Koopmans</dc:creator>
				<category><![CDATA[90kts]]></category>
		<category><![CDATA[Altentee]]></category>
		<category><![CDATA[perl]]></category>
		<category><![CDATA[testing]]></category>

		<guid isPermaLink="false">http://90kts.com/blog/2007/a-perl-of-an-idea-for-try-catch-clauses/</guid>
		<description><![CDATA[<p>The try&#8230;catch&#8230;finally clause found in languages like Java are very handy for error handling. In scripting languages like Perl you can achieve the same effect using the eval function as the following code snippet demonstrates.</p>
<p>
eval{ &#038;yourSubRoutine($parameters); };
$@ ?  $yourLogObject->yourErrorMethod("I failed with reason: $@") ):
     $yourLogObject->yourTraceMethod("Everything was good: $?") );
</p>
]]></description>
			<content:encoded><![CDATA[<p>The try&#8230;catch&#8230;finally clause found in languages like Java are very handy for error handling. In scripting languages like Perl you can achieve the same effect using the eval function as the following code snippet demonstrates.</p>
<p><code><br />
eval{ &#038;yourSubRoutine($parameters); };<br />
$@ ?  $yourLogObject->yourErrorMethod("I failed with reason: $@") ):<br />
     $yourLogObject->yourTraceMethod("Everything was good: $?") );<br />
</code></p>
]]></content:encoded>
			<wfw:commentRss>http://altentee.com/2007/a-perl-of-an-idea-for-try-catch-clauses/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
