<?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>blogstuff &#187; Development</title>
	<atom:link href="http://www.testuff.com/blog/category/development/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.testuff.com/blog</link>
	<description>blogging the world of testing stuff</description>
	<lastBuildDate>Wed, 14 Jul 2010 12:46:09 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Selenium &#8211; Please do the dishes!</title>
		<link>http://www.testuff.com/blog/2010/04/selenium-please-do-the-dishes/</link>
		<comments>http://www.testuff.com/blog/2010/04/selenium-please-do-the-dishes/#comments</comments>
		<pubDate>Thu, 15 Apr 2010 11:25:43 +0000</pubDate>
		<dc:creator>Yoav Aner</dc:creator>
				<category><![CDATA[Automation]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Tips]]></category>

		<guid isPermaLink="false">http://www.testuff.com/blog/?p=457</guid>
		<description><![CDATA[In the testing community, lots of companies use many different automation tools. It saves a lot of trouble going through repetitive tasks that the computer is quite capable of doing by itself. At Testuff, we don&#8217;t try to compete with those tools. They&#8217;ve been around for a while, they do a pretty good job, and [...]]]></description>
			<content:encoded><![CDATA[<p>In the testing community, lots of companies use many different automation tools. It saves a lot of trouble going through repetitive tasks that the computer is quite capable of doing by itself. At Testuff, we don&#8217;t try to compete with those tools. They&#8217;ve been around for a while, they do a pretty good job, and trying to beat them at their own game is not what we&#8217;re after. Nevertheless, we do our best to integrate with as many <a href="/help/automation-tools">automation tools</a> as we can (as we do with <a href="/help#tracker">bug trackers</a>). The only problem so far is that they can&#8217;t do your dishes (yet).</p>
<p><img src="http://farm3.static.flickr.com/2131/2503480337_d9083fee2b.jpg" alt="Dirty Dishes" /><br />
<br/><br />
I ended up playing with <a href="http://seleniumhq.org/">Selenium</a> recently, when we created a <a href="/help/automation-tools#selenium">Selenium Extension</a> which integrates with Testuff. It got me thinking: Wouldn&#8217;t it be useful (and cool) to use those test automation tools to help me keep up with stuff on my personal life as well? How about checking my bank balance, and sending an email with the latest transactions every day? What about the mobile or home phone bill? Track electricity usage? The possibilities are endless.</p>
<p>Many companies nowadays offer web-based access to your own information, from banks to utility companies, mobile phone operators and so on. However, logging in every time, just to check your balance can be tedious.</p>
<p>I&#8217;m sure many of our customers are more experienced Selenium users than we are, but I still wanted to give a few hints about making selenium a little more tedious-task-friendly. One of the main differences in running Selenium for testing and for automating those tasks, is that when you&#8217;re testing &#8211; if a step fails &#8211; the test fails and that&#8217;s good enough. All you need is to abort the script and report it back to Testuff via our <a href="/help/automation">Automation API</a>. However, for checking your online bank balance, you might want your selenium script to be a little, erm, more intelligent! It should keep trying a few times if a step fails. It should perhaps restart the whole process and try again. It could in fact ignore a few small issues and carry on. Maybe the web page didn&#8217;t load completely, but the link to the next page is available. Maybe if a link or text is not available, clicking on another link and then re-loading the page helps.</p>
<p>We&#8217;re using python primarily. It&#8217;s a simple and powerful language, very easy to read and write, and Selenium easily exports scripts to it. I&#8217;ll just list a couple of simple helper functions that I ended up using. They are fairly self-explanatory, but feel free to comment if you have a question.</p>
<div class="codesnip-container" >
<div class="python codesnip" style="font-family:monospace;"><span class="kw1">def</span> wait_for_text<span class="br0">&#40;</span><span class="kw2">self</span>, text, wait=<span class="nu0">60</span><span class="br0">&#41;</span>:<br />
<span class="st0">&quot;&quot;&quot; &nbsp; &nbsp;Waits for text to appear on screen for a<br />
given number of seconds. It does not<br />
raise any exception if the text is<br />
not present, but rather returns False<br />
&quot;&quot;&quot;</span><br />
sel = <span class="kw2">self</span>.<span class="me1">selenium</span><br />
<span class="kw1">for</span> i <span class="kw1">in</span> <span class="kw2">range</span><span class="br0">&#40;</span>wait<span class="br0">&#41;</span>:<br />
<span class="kw1">try</span>:<br />
<span class="kw2">self</span>.<span class="me1">failUnless</span><span class="br0">&#40;</span>sel.<span class="me1">is_text_present</span><span class="br0">&#40;</span>text<span class="br0">&#41;</span><span class="br0">&#41;</span><br />
<span class="kw1">break</span><br />
<span class="kw1">except</span>: <span class="kw1">pass</span><br />
<span class="kw3">time</span>.<span class="me1">sleep</span><span class="br0">&#40;</span>1<span class="br0">&#41;</span><br />
<span class="kw1">else</span>: <span class="kw1">return</span> <span class="kw2">False</span></p>
<p><span class="kw1">def</span> wait_until_text_disappears<span class="br0">&#40;</span><span class="kw2">self</span>, text, wait=<span class="nu0">60</span><span class="br0">&#41;</span>:<br />
<span class="st0">&quot;&quot;&quot; &nbsp; &nbsp;Waits for text to disappear off screen for a given number<br />
of seconds. It does not raise any exception if the text<br />
is still present, but rather returns False.<br />
This is useful for some websites which put<br />
pages like &quot;processing your request&quot;<br />
&quot;&quot;&quot;</span><br />
sel = <span class="kw2">self</span>.<span class="me1">selenium</span><br />
<span class="kw1">for</span> i <span class="kw1">in</span> <span class="kw2">range</span><span class="br0">&#40;</span>wait<span class="br0">&#41;</span>:<br />
<span class="kw1">try</span>:<br />
<span class="kw2">self</span>.<span class="me1">failIf</span><span class="br0">&#40;</span>sel.<span class="me1">is_text_present</span><span class="br0">&#40;</span>text<span class="br0">&#41;</span><span class="br0">&#41;</span><br />
<span class="kw1">break</span><br />
<span class="kw1">except</span>: <span class="kw1">pass</span><br />
<span class="kw3">time</span>.<span class="me1">sleep</span><span class="br0">&#40;</span>1<span class="br0">&#41;</span><br />
<span class="kw1">else</span>: <span class="kw1">return</span> <span class="kw2">False</span></p>
<p><span class="kw1">def</span> wait_for_page<span class="br0">&#40;</span><span class="kw2">self</span>, wait<span class="br0">&#41;</span>:<br />
<span class="st0">&quot;&quot;&quot; Replaces the wait_for_page_to_load built-in<br />
function, but catches any exception, so the<br />
script can carry on despite the page<br />
not being fully loaded.<br />
&quot;&quot;&quot;</span><br />
sel = <span class="kw2">self</span>.<span class="me1">selenium</span><br />
<span class="kw1">try</span>:<br />
sel.<span class="me1">wait_for_page_to_load</span><span class="br0">&#40;</span><span class="st0">&quot;%d&quot;</span> <span class="sy0">%</span> wait <span class="sy0">*</span> 1000<span class="br0">&#41;</span><br />
<span class="kw1">except</span> <span class="kw2">Exception</span>, e:<br />
<span class="kw1">print</span> <span class="st0">&quot;Exception caught: %s&quot;</span> <span class="sy0">%</span>e</div>
</div>
<p>A &#8216;typical&#8217; automation script will look something like (simplified slightly):</p>
<div class="codesnip-container" >
<div class="python codesnip" style="font-family:monospace;"><span class="kw1">def</span> get_mobile_balance<span class="br0">&#40;</span><span class="kw2">self</span><span class="br0">&#41;</span>:<br />
<span class="st0">&quot;&quot;&quot; retrieves the mobile phone and remaining Mb balance<br />
and emails it<br />
It retries several times, in case there&#8217;s a temporary issue with<br />
the website.<br />
&quot;&quot;&quot;</span><br />
sel = <span class="kw2">self</span>.<span class="me1">selenium</span><br />
retry_count = 0<br />
MAX_TRIES = 5<br />
<span class="kw1">while</span> retry_count <span class="sy0">&amp;</span>lt<span class="sy0">;</span>= MAX_TRIES: &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">try</span>: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; balance = <span class="kw2">self</span>._get_balance<span class="br0">&#40;</span>sel<span class="br0">&#41;</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>._email<span class="br0">&#40;</span><span class="st0">&quot;me@address.com&quot;</span>, <span class="st0">&quot;Mobile Phone Balance&quot;</span>, <span class="st0">&quot;Here&#8217;s your balance for today: %s&quot;</span> <span class="sy0">%</span> balance<span class="br0">&#41;</span> &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">except</span>: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; retry_count = retry_count + 1 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> retry_count <span class="sy0">&amp;</span>gt<span class="sy0">;</span>= MAX_TRIES:<br />
<span class="kw1">raise</span><br />
<span class="kw3">time</span>.<span class="me1">sleep</span><span class="br0">&#40;</span>15<span class="br0">&#41;</span></p>
<p><span class="kw1">def</span> _get_balance<span class="br0">&#40;</span><span class="kw2">self</span>, sel<span class="br0">&#41;</span>:<br />
sel.<span class="kw2">open</span><span class="br0">&#40;</span>sel.<span class="me1">browserURL</span><span class="br0">&#41;</span><br />
sel.<span class="me1">click</span><span class="br0">&#40;</span><span class="st0">&quot;//div[@id='check_balance']/div[1]/div/a/h2&quot;</span><span class="br0">&#41;</span><br />
sel.<span class="me1">click</span><span class="br0">&#40;</span><span class="st0">&quot;link=mobile phone&quot;</span><span class="br0">&#41;</span><br />
<span class="kw2">self</span>.<span class="me1">wait_for_page</span><span class="br0">&#40;</span>30<span class="br0">&#41;</span><br />
sel.<span class="kw2">type</span><span class="br0">&#40;</span><span class="st0">&quot;txtMobileNo&quot;</span>, <span class="st0">&quot;12345678&quot;</span><span class="br0">&#41;</span><br />
sel.<span class="kw2">type</span><span class="br0">&#40;</span><span class="st0">&quot;txtPassword&quot;</span>, <span class="st0">&quot;my_password&quot;</span><span class="br0">&#41;</span><br />
sel.<span class="me1">click</span><span class="br0">&#40;</span><span class="st0">&quot;continue&quot;</span><span class="br0">&#41;</span><br />
<span class="kw2">self</span>.<span class="me1">wait_for_page</span><span class="br0">&#40;</span>30<span class="br0">&#41;</span><br />
<span class="kw2">self</span>.<span class="me1">wait_for_text</span><span class="br0">&#40;</span><span class="st0">&quot;Account is ready.&quot;</span><span class="br0">&#41;</span><br />
sel.<span class="me1">click</span><span class="br0">&#40;</span><span class="st0">&quot;//input[@type='image']&quot;</span><span class="br0">&#41;</span><br />
<span class="kw2">self</span>.<span class="me1">wait_for_text</span><span class="br0">&#40;</span><span class="st0">&quot;Your Package&quot;</span>, <span class="nu0">60</span><span class="br0">&#41;</span><br />
sel.<span class="me1">click</span><span class="br0">&#40;</span><span class="st0">&quot;link=view your current usage&quot;</span><span class="br0">&#41;</span><br />
<span class="kw2">self</span>.<span class="me1">wait_for_page</span><span class="br0">&#40;</span>30<span class="br0">&#41;</span><br />
<span class="kw2">self</span>.<span class="me1">wait_until_text_disappears</span><span class="br0">&#40;</span><span class="st0">&quot;processing&#8230; please wait&quot;</span>, 60<span class="br0">&#41;</span><br />
<span class="kw2">self</span>.<span class="me1">wait_for_text</span><span class="br0">&#40;</span><span class="st0">&quot;view package balance&quot;</span>, <span class="nu0">60</span><span class="br0">&#41;</span><br />
sel.<span class="me1">click</span><span class="br0">&#40;</span><span class="st0">&quot;link=view package balance&quot;</span><span class="br0">&#41;</span><br />
<span class="kw2">self</span>.<span class="me1">wait_for_page</span><span class="br0">&#40;</span>30<span class="br0">&#41;</span><br />
<span class="kw2">self</span>.<span class="me1">wait_until_text_disappears</span><span class="br0">&#40;</span><span class="st0">&quot;processing&#8230; please wait&quot;</span>, 60<span class="br0">&#41;</span><br />
<span class="kw2">self</span>.<span class="me1">wait_for_text</span><span class="br0">&#40;</span><span class="st0">&quot;minutes available&quot;</span>, <span class="nu0">60</span><span class="br0">&#41;</span><br />
remaining_minutes = sel.<span class="me1">get_text</span><span class="br0">&#40;</span><span class="st0">&quot;//div[1]/span[2]&quot;</span><span class="br0">&#41;</span><br />
remaining_mb = sel.<span class="me1">get_text</span><span class="br0">&#40;</span><span class="st0">&quot;//div[4]/div[1]/span[2]&quot;</span><span class="br0">&#41;</span><br />
sel.<span class="me1">click</span><span class="br0">&#40;</span><span class="st0">&quot;link=log out&quot;</span><span class="br0">&#41;</span><br />
<span class="kw1">return</span> <span class="st0">&quot;%s<span class="es0">\n</span>%s&quot;</span> <span class="sy0">%</span> <span class="br0">&#40;</span>remaining_minutes, remaining_mb<span class="br0">&#41;</span></p>
<p><span class="kw1">def</span> _email<span class="br0">&#40;</span><span class="kw2">self</span>, email_address, subject, bodyText<span class="br0">&#41;</span>:<br />
&#8230;</div>
</div>
<p>Feel free to share any other cool ideas for using Selenium, or any other automation tool.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.testuff.com/blog/2010/04/selenium-please-do-the-dishes/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>How many programs does your washing machine have?</title>
		<link>http://www.testuff.com/blog/2009/09/how-many-programs-does-your-washing-machine-have/</link>
		<comments>http://www.testuff.com/blog/2009/09/how-many-programs-does-your-washing-machine-have/#comments</comments>
		<pubDate>Tue, 08 Sep 2009 13:46:08 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[SaaS]]></category>
		<category><![CDATA[Usability]]></category>

		<guid isPermaLink="false">http://www.testuff.com/blog/?p=338</guid>
		<description><![CDATA[ You probably don’t even know, and I bet you use maybe 2-3 of them.
4 if you are really into washing your clothes as a hobby.
This applies to most of our appliances and gadgets, our mobile phones, ipods and digital cameras. We usually don’t even know what the options are; we simply use those we already [...]]]></description>
			<content:encoded><![CDATA[<p> You probably don’t even know, and I bet you use maybe 2-3 of them.<img class="alignright size-full wp-image-343" title="One for all" src="http://www.testuff.com/blog/wp-content/uploads/2009/09/Washing.jpg" alt="One for all" width="130" height="98" /></p>
<p><em>4 if you are really into washing your clothes as a hobby.</em></p>
<p>This applies to most of our appliances and gadgets, our mobile phones, ipods and digital cameras. We usually don’t even know what the options are; we simply use those we already know, or the most obvious ones.</p>
<p><strong>Have you ever read the manual?</strong></p>
<p>It’s always there. In the box. The manual.</p>
<p>It looks nice, written in 4 different languages, with 5 content pages and an index at the end. But what’s in it? Thicker than a Harry Potter book. No one knows…It’s a mystery as no one ever reads it. Some of us keep them in a drawer, some throw it away immediately.</p>
<p>And this is exactly why Testuff doesn’t come with a manual or a user guide. Not only that, we have worked hard to make it unnecessary. We strongly believe that applications which need training or a pre-sales rep to use are not good apps. Just as hardware comes in a ‘plug-and-play’ mode, so should applications. This is how Testuff comes. Simply install it and you are up-and-running <a href="http://www.testuff.com/help/testuff-in-5-minutes">in 5 minutes</a>. It&#8217;s true, we do have an online help guide, but it&#8217;s more of an elaborated &#8216;FAQ&#8217; section. Moreover, based on our user feedback, it is rarely needed or used.</p>
<p><strong>What about the thousands of features a test management tool can have?</strong></p>
<p>Yes, we know that there are always more features a system can have. There’s always another report, another way to navigate, a new tab, a new tick-box option or a drop-down selection box. The line between a fully featured app and an over-featured app is thin, but better stay on the right side of it. Simplicity is important and it doesn’t have to be in contradiction with giving users the full experience and answer all their needs. As <a href="http://en.wikipedia.org/wiki/Leonardo_da_Vinci">Leonardo DaVinci</a> said, &#8220;Simplicity is the ultimate sophistication&#8221;, and we&#8217;d like to keep the Testuff simplicity, which our users like and appreciate so much.</p>
<p>Too many features, a too complicated application isn&#8217;t a good idea. Do that and now you need training, a rep to answer usability questions and you&#8217;ll end up with users using 20% of the system&#8217;s options and features anyway.</p>
<p>Such an approach will also lead to a higher sale price, and a higher implementation time and cost at the other end. It doesn’t work, and especially not in the SaaS business.</p>
<p><strong>More features = More customers?</strong></p>
<p>Our experience shows that more features aren’t necessarily what customers are looking for. Of course, they want to see that the basics (and then some) is covered well, but they will be looking at many other aspects when making the decision if both the company and the application are good enough for them.</p>
<p>Reliability, competitive pricing, ease of use, security, complexity of implementation in the organization, integration to other testing tools (automation, trackers), high quality and responsive support and more.</p>
<p><a href="http://en.wikipedia.org/wiki/Albert_Einstein">Albert Einstein</a> said that &#8220;Everything should be made as simple as possible, but not simpler&#8221;. Testuff does offer a fully featured package. However, there&#8217;s no need to learn how to use it, these features and options are used intuitively. You won&#8217;t find the likes of &#8220;tools &#8211;&gt; options &#8212;&gt; &#8230;&#8221;  buttons, but it&#8217;s all still there.</p>
<p>We have many debates here, long discussions about new features and new options we add to Testuff &#8211; whether they are required, will they make Testuff too complicated and less friendly. How many clicks a typical user needs to click through and whether we can make the process just a little shorter. There&#8217;s never a one only true solution. It&#8217;s more a keep-within-your-strategy thinking process.</p>
<p>Hopefully, we never end up with a complicated washing machine&#8230;&#8230;&#8230;<img class="alignleft size-full wp-image-344" title="Complicated" src="http://www.testuff.com/blog/wp-content/uploads/2009/09/Comlicated.jpg" alt="Complicated" width="128" height="88" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.testuff.com/blog/2009/09/how-many-programs-does-your-washing-machine-have/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Testuff 1.1 Aftermath</title>
		<link>http://www.testuff.com/blog/2008/10/testuff-1-1-aftermath/</link>
		<comments>http://www.testuff.com/blog/2008/10/testuff-1-1-aftermath/#comments</comments>
		<pubDate>Wed, 29 Oct 2008 13:39:29 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[Tips]]></category>

		<guid isPermaLink="false">http://www.testuff.com/blog/?p=174</guid>
		<description><![CDATA[Yes, it has been two weeks since my last post. During this time we worked very hard on fixing and releasing Testuff 1.1 for the general QA public.
Unfortunately, it took us longer to release Testuff 1.1 than what we had anticipated. So, after it was finally out, we gathered round the round table and did [...]]]></description>
			<content:encoded><![CDATA[<p>Yes, it has been two weeks since my last post. During this time we worked very hard on fixing and releasing Testuff 1.1 for the general QA public.</p>
<p>Unfortunately, it took us longer to release Testuff 1.1 than what we had anticipated. So, after it was finally out, we gathered round the round table and did the aftermath. This is what we found out:</p>
<ul>
<li><a href="http://www.testuff.com/blog/wp-content/uploads/2008/10/aftermath.jpg"><img class="alignright size-full wp-image-177" title="aftermath" src="http://www.testuff.com/blog/wp-content/uploads/2008/10/aftermath.jpg" alt="" width="300" height="225" align="right" /></a><strong>We didn&#8217;t take holidays into account.</strong> The month of September was plagued with <a href="http://www.hebcal.com/hebcal/" target="_blank">Jewish holidays</a>. Even though we do work quite often on non-working hours and on weekends, the holidays still slowed us down, making us go to family dinners and sleep more with lot&#8217;s of food in our stomachs. <em><br />
Conclusion</em> &#8211; Take holidays into account for the next milestones.</li>
<li><strong>Incomplete feature design.</strong> We wanted to implement an improvement in the infrastructure. Unfortunately we found out way too late into the coding that the design had failed to take into account certain scnearios and thus the feature could not be implemented properly. The code was then reverted, coding time flushed more or less down the drain. <em><br />
Conclusion</em> &#8211; instead of trusting the design with one man only, discuss it with more people as early as possible and include QA in the process.</li>
<li><strong>Last minute major changes.</strong> Due to some performance problems in the My Tasks feature, we made last minute major changes to fix them. This caused an array of bugs and extended the testing and fixing cycles beyond what we thought. <em><br />
Conclusion</em> &#8211; better to wait for the next version or patch with such major changes. This way the release candidate can be stabilized faster for release.</li>
<li><strong>Lack of communication.</strong> Even though I sit in the same room with the devs, we didn&#8217;t communicate about the new version enough. Turns out there were some infrastructural changes that caused bugs, and we are going to have to release another patch to fix them.<br />
<em>Conclusion</em> &#8211; hold testing meetings and discuss changes in the new version and what should be tested in particular.</li>
<li><strong>Too many failed validations.</strong> They might not be a major time killer, but they sure are annoying and most of them can be eliminated. We discovered that some bugs were closed as fixed even though they weren&#8217;t fixed, they just didn&#8217;t reproduce for the dev. Another thing we found out is that sometimes the dev didn&#8217;t understand the bug and just closed it. The bugs had to be reopened, refixed, and retested.<br />
<em>Conclusion</em> &#8211; if a bug fails to reproduce or is incoherent, talk to QA before closing it.</li>
<li><strong>Side effect bugs.</strong> Certain bugs, even though that they themselves were fixed, caused side effect bugs that could&#8217;ve easily been fixed had they been noticed following the initial fix. These kind of bugs increased the testing cycles we needed to stabilize the version.<br />
<em>Conclusion</em> &#8211; after fixing a bug, take a minute to poke around and see if anything related went wrong.</li>
</ul>
<p>We have learned some lessons because of this version and I hope they may be of use for you as well. Did you also run into similar situations? What other lessons have you learned from delayed releases? Share it with us in the comments or write a post about it and link back to this one.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.testuff.com/blog/2008/10/testuff-1-1-aftermath/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
