<?xml version="1.0" encoding="UTF-8"?><!-- generator="wordpress.com" -->
<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/"
	>

<channel>
	<title>webtest &amp;laquo; WordPress.com Tag Feed</title>
	<link>http://wordpress.com/tag/webtest/</link>
	<description>Feed of posts on WordPress.com tagged "webtest"</description>
	<pubDate>Wed, 15 Oct 2008 02:08:35 +0000</pubDate>

	<generator>http://wordpress.com/tags/</generator>
	<language>en</language>

<item>
<title><![CDATA[Why Google should better use HtmlUnit to avoid JS error on its start page]]></title>
<link>http://mguillem.wordpress.com/?p=68</link>
<pubDate>Wed, 10 Sep 2008 12:26:59 +0000</pubDate>
<dc:creator>Marc Guillemot</dc:creator>
<guid>http://mguillem.sv.wordpress.com/2008/09/10/why-google-should-better-use-htmlunit/</guid>
<description><![CDATA[Like many other testing tools, WebTest uses Google&#8217;s website for simple code examples. It has ]]></description>
<content:encoded><![CDATA[<p>Like many other testing tools, <a href="http://webtest.canoo.com">WebTest</a> uses <a href="http://www.google.com">Google</a>'s website for simple code examples. It has the advantage to be a well known website, pretty fast and with simple code.</p>
<h2>www.google.com used to be a simple page</h2>
<p style="text-align:left;">For some time WebTest users started to <a href="http://webtest.markmail.org/search/?q=google.com#query:google.com+page:1+mid:bbgh7qci3zu5va46+state:results">report</a> that even simple examples from the demo tests available when creating a new project failed due to JS errors like this:</p>
<p style="text-align:center;"><a href="http://mguillem.wordpress.com/files/2008/09/webtesterror1.png"><img class="size-full wp-image-72 aligncenter" title="JS error with simple WebTest searching on Google" src="http://mguillem.wordpress.com/files/2008/09/webtesterror1.png" alt="" width="477" height="426" /></a></p>
<p style="text-align:center;">
<p>As this test used to work, this means that Google's <a href="http://www.google.com/ncr">start page</a> isn't so simple any more that it used to be. It was predictable that this page would change one day but it is <strong>quite embarrassing as we use this kind of tests to show how easy and powerful WebTest is</strong> even for sites using a lot of JS stuff.</p>
<h2>www.google.com has really a JS error!</h2>
<p><a href="http://htmlunit.sourceforge.net">HtmlUnit</a>'s JS support is quite good (and improved continuously), but of course not (yet ;-) ) as good as the one of "real" browsers, therefore I've started to search for the cause of the problem in HtmlUnit, looking for missing/incorrect implementation of some JS functionalities. At the end I've found that the problem occurred only when setting directly the value attribute of the field rather than calling the <code>type(...)</code> method on it because <code>keypress</code> handlers were being used. This means that WebTest should probably use <code>type(...)</code> rather than setting the field's value directly.</p>
<p>But this means as well that Google's home page relies on the <code>keypress</code> handlers and that the JavaScript code doesn't work correctly if these handlers are not called like in following scenario:</p>
<ol>
<li>- go to <a href="http://www.google.com/ncr">http://www.google.com/ncr</a> (to be sure to have the English version of the page)</li>
<li>- right mouse click in the search field to paste some value to search for</li>
<li>- click the "I'm Feeling Lucky" button</li>
</ol>
<p>The results are quite similar to the JS error obtained by WebTest, no matter if you use Firefox or Internet Explorer (perhaps does it work correctly with Chrome ;-) ):</p>
<p style="text-align:center;"><a href="http://mguillem.wordpress.com/files/2008/09/firefoxerror.png"><img class="aligncenter size-full wp-image-70" title="JavaScript error in Firefox" src="http://mguillem.wordpress.com/files/2008/09/firefoxerror.png" alt="" width="477" height="151" /></a></p>
<p style="text-align:center;"><a href="http://mguillem.wordpress.com/files/2008/09/ieerror.png"><img class="size-full wp-image-71 aligncenter" title="JavaScript error in Internet Explorer" src="http://mguillem.wordpress.com/files/2008/09/ieerror.png" alt="" width="441" height="294" /></a></p>
<p style="text-align:left;">
<h2 style="text-align:left;">Rather painful for Google than for WebTest!</h2>
<p style="text-align:left;">OK, this error is nothing dramatical but for an Internet giant like Google that has plenty of talented engineers (and ..., and..., and .... You perhaps know better than I what the web means for Google), I find quite <strong>painful to have such an error on its main page</strong>!</p>
<p style="text-align:left;">The error scenario is not particularly complicated and such a case should surely be covered by automated tests. Perhaps is it a question of inadequate tools? Google seems to use intensively <a href="http://selenium.openqa.org/">Selenium</a> ;-) .</p>
<p style="text-align:left;">Concerning WebTest, I'll start the discussion on the mailing list to decide what is the best way to follow: setting directly the field value, typing it, or having both possibilities.</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[WebTest @ JUG Cologne slides]]></title>
<link>http://mguillem.wordpress.com/?p=66</link>
<pubDate>Tue, 26 Aug 2008 15:26:30 +0000</pubDate>
<dc:creator>Marc Guillemot</dc:creator>
<guid>http://mguillem.sv.wordpress.com/2008/08/26/webtest-jug-cologne-slides/</guid>
<description><![CDATA[Here are the slides of the presentation I&#8217;ve made yesterday:

]]></description>
<content:encoded><![CDATA[<p>Here are the slides of the presentation I've made yesterday:</p>
<p>[slideshare id=569950&#38;doc=webtest1-1219754182328161-8&#38;w=425]</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[WebTest @ JUG Cologne, 25.08.2008]]></title>
<link>http://mguillem.wordpress.com/?p=62</link>
<pubDate>Thu, 14 Aug 2008 20:01:33 +0000</pubDate>
<dc:creator>Marc Guillemot</dc:creator>
<guid>http://mguillem.sv.wordpress.com/2008/08/14/webtest-jug-cologne-25082008/</guid>
<description><![CDATA[I&#8217;ll give a presentation about efficient web test automation with WebTest at JUG Cologne on 25]]></description>
<content:encoded><![CDATA[<p>I'll give a presentation about efficient web test automation with <a href="http://webtest.canoo.com">WebTest</a> at <a href="http://www.jugcologne.org">JUG Cologne</a> on 25.08.2008. Thanks <a href="http://huettermann.net">Michael</a> for inviting me, it's an honour to appear in the list of great speakers of my "home JUG".</p>
<p>There is no time limitation (according to Michael) therefore I plan to show different new demos of existing features as well as of future ones that should trouble / motivate / question the attendees.</p>
<p>There will be a Lightning Talk on Selenium by <a href="http://www.agimatec.de/blog/">Simon Tiffert</a> before my presentation. I think that this will be quite interesting as well because Simon has far more experience with Selenium than nearly all persons blogging about this tool.</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Groovy]]></title>
<link>http://k0zm0p0litan.wordpress.com/?p=16</link>
<pubDate>Sat, 19 Jul 2008 03:38:58 +0000</pubDate>
<dc:creator>prashanthchetty</dc:creator>
<guid>http://k0zm0p0litan.sv.wordpress.com/2008/07/19/groovy/</guid>
<description><![CDATA[Yesterday, I was reading a bit about scripting languages and started playing with &#8216;Groovy]]></description>
<content:encoded><![CDATA[<p>Yesterday, I was reading a bit about scripting languages and started playing with 'Groovy', which is an alternative to 'Java'. You can say that it's a bit higher-level language than Java, as it is built on Java libraries (or classes) and provides one more abstraction layer. Groovy, which is a 'Dynamic Language' (dynamically typed) was built to provide a scripting language for the Java platform, along the lines of Python, Ruby and Perl. Below are some imp points:</p>
<p>1) The Groovy compiler can be used to generate 'Java Bytecode', which can be integrated with any other java module/project.</p>
<p>2) Most of the Java code is also a valid syntax for Groovy.</p>
<p>3) Groovy is dynamically typed, whereas Java is static and strongly typed. Dynamically typed languages have lesser code, but more execution time.</p>
<p>4) Groovy also provides special XML processing through the classes XmlParser, XmlSlurper, DOMCategory.</p>
<p>Apart from these, Groovy has features like 'Dynamic Typing', 'Closures' and 'builders'. Also, it's pretty useful for testing as it supports unit-testing and mocking out-of-the-box.<br />
After doing a bit of reading and coding some basic scripts, I tried to code a Groovy solution for the Java code that I wrote for solving the "<a title="&#34;Google Billboard Puzzle&#34;" href="http://google-tale.blogspot.com/2008/07/google-billboard-puzzle.html" target="_blank">Google's Billboard Puzzle</a>" (from my other blog). It's for calculating "Euler's Number (e)" , which is pretty basic and simple code. Here's the code:</p>
<p><strong><span>BigDecimal e = new BigDecimal(1.0G)</span><br />
<span>BigDecimal temp = new BigDecimal(1.0G)</span></strong></p>
<p><span><strong>for(i in 1..100) {</strong></span><strong><br />
<span> temp *= i</span><br />
<span> e += new BigDecimal("1").divide(temp, new java.math.MathContext(10000))</span><br />
<span>}</span></strong></p>
<p><span><strong>println("e : " + e)</strong></span><strong><br />
<span><span>println("length of e calculated : " + (e+"").length())</span></span></strong></p>
<p><span><span>As you can see, the 'Groovy' script also has 'Java' code in it (and is valid). Since, Groovy is a dynamically typed language, it took more time than the Java code took, to produce the solution.</span></span></p>
<p><span><span>Here's one more script, which outputs the 'hashcode' of a string:</span></span></p>
<p style="color:#993300;"><strong><span><span>def str = "abc"<br />
int hashcode = 1;<br />
int len = str.length()</span></span></strong></p>
<p style="color:#993300;"><strong>for(i in 0..(len-1)) {<br />
hashcode = 31*hashcode + str.charAt(i)<br />
}</strong></p>
<p><strong><span style="color:#993300;">println("hashcode : " + hashcode)</span></strong></p>
<p>The above code is a naive approach to calculate the 'hashcode' and is not a cryptographically secure function. Its based on the formula "<span class="texhtml"><em>s</em>[0] * 31<sup><em>n</em> − 1</sup> + <em>s</em>[1] * 31<sup><em>n</em> − 2</sup> + ... + <em>s</em>[<em>n</em> − 1]", which is actually '</span><span class="bodySubtitle">Rabin-Karp Algorithm (RK)'</span><span class="texhtml">. One might be wondering why there in '31' in that Math expression. Its because Java's int is '32' bit, in length.<br />
</span></p>
<p><span style="color:#000000;">Groovy can also be used to test web applications, webservices, et al. Groovy can be used to test webservices in the following way:</span></p>
<p>* Act as a normal webservice client<br />
* Use 'WebTest'<br />
* Use 'SoapUI'</p>
<p>Ok..I decided to code a webservice client and googled for 'Free Publicly Available Webservices' and found a couple of websites with publicly available webservices. I picked  the CDYNE''s 'Profanity Filter' webservice (which filters words that are considered profanity) and provided the WSDL url to the Groovy script. Here's the script (minimalistic):</p>
<p><strong><span style="color:#993300;">import groovyx.net.ws.WSClient</span></strong></p>
<p><strong><span style="color:#993300;">def proxy = new WSClient("http://ws.cdyne.com/ProfanityWS/Profanity.asmx?wsdl", this.class.classLoader)</span></strong></p>
<p><strong><span style="color:#993300;">def result = proxy.SimpleProfanityFilter("You crappy bugga!")</span><br />
<span style="color:#993300;">println(result)</span></strong></p>
<p><span style="color:#000000;">For the above script to run on 'Groovy Console', you have to copy the 'groovyws' jar file into Groovy's 'lib' directory.</span></p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Using storeXPath() in your Grails Webtest]]></title>
<link>http://svenlange.wordpress.com/?p=4</link>
<pubDate>Fri, 11 Jul 2008 16:33:44 +0000</pubDate>
<dc:creator>svenlange</dc:creator>
<guid>http://svenlange.sv.wordpress.com/2008/07/11/using-storexpath-in-your-grails-webtest/</guid>
<description><![CDATA[Today I had to figure out how to save some content from a site during a running Webtest so that I am]]></description>
<content:encoded><![CDATA[<p>Today I had to figure out how to save some content from a site during a running Webtest so that I am able to restore all changed data afterwards. Luckily Webtest provides the step <a title="storeXPath" href="http://webtest.canoo.com/webtest/manual/storeXPath.html" target="_blank">storeXPath()</a> which does the job.</p>
<p>But it was not that easy to realize my task due to the lack of good documentation and finding the correct xpath expression.</p>
<p>The following code snippet grabs the text value of a text input field with the id surname and saves it in the ant property xyz.</p>
<pre>def testSomething() {
   webtest('Some description') {

        // saving initial value
        storeXPath(xpath: "id('surname')/@value", property: "xyz")

	// restore initial value
	setInputField(name: "surname", value: "#{xyz}")

    }
}</pre>
<p>Pretty simple in the end, but it took a while till I came to this. Maybe it helps someone.</p>
<pre></pre>
]]></content:encoded>
</item>
<item>
<title><![CDATA[WebTest/HtmlUnit integration with JMeter started]]></title>
<link>http://mguillem.wordpress.com/?p=50</link>
<pubDate>Fri, 23 May 2008 12:46:37 +0000</pubDate>
<dc:creator>Marc Guillemot</dc:creator>
<guid>http://mguillem.sv.wordpress.com/2008/05/23/webtesthtmlunit-integration-with-jmeter-started/</guid>
<description><![CDATA[I couldn&#8217;t resist to show this screenshot before my holiday:

]]></description>
<content:encoded><![CDATA[<p>I couldn't resist to show this screenshot before my holiday:</p>
<p><a href="http://mguillem.wordpress.com/files/2008/05/jmeterwebtestsampler.png"><img class="alignnone size-medium wp-image-51" src="http://mguillem.wordpress.com/files/2008/05/jmeterwebtestsampler.png?w=300" alt="" width="450" height="267" /></a></p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Personlighetstest]]></title>
<link>http://frkf.wordpress.com/2008/05/08/personlighetstest/</link>
<pubDate>Thu, 08 May 2008 20:45:33 +0000</pubDate>
<dc:creator>...</dc:creator>
<guid>http://frkf.sv.wordpress.com/2008/05/08/personlighetstest/</guid>
<description><![CDATA[Hos WitchBitch hittade jag ett kuligt Personlighetstest. Witchbitch är förresten en damptant hon o]]></description>
<content:encoded><![CDATA[<p>Hos <a href="http://witchbitch.wordpress.com/2008/05/08/personlighetstest/#comment-5805" target="_blank">WitchBitch</a> hittade jag ett kuligt Personlighetstest. Witchbitch är förresten en damptant hon också. Det gör det hela ännu kuligare.  </p>
<p>&#160; </p>
<p><a href="http://web.tickle.com/personality/" target="_blank"><img style="border-right:0;border-top:0;border-left:0;border-bottom:0;" height="257" alt="Tickle - Ultimate Personality Test - Lethal Weapon" src="http://frkf.files.wordpress.com/2008/05/clip-image0011.png" width="606"/></a> </p>
<p>The Ultimate Personality Test - Tickle Personality Tests &#62; Results </p>
<p><a href="http://web.tickle.com/personality/result.jsp">http://web.tickle.com/personality/result.jsp</a> </p>
<p>Skärmurklipp gjort: 2008-05-08; 22:35 </p>
<p>&#160;</p>
<div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:78de8ef8-505f-4d00-9b6f-c2baaa4683db" style="display:inline;float:none;margin:0;padding:0;">Andra bloggar om: <a href="http://www.bloggar.se/om/damptant">damptant</a> , <a href="http://www.bloggar.se/om/WitchBitch">WitchBitch</a> , <a href="http://www.bloggar.se/om/personlighetstest">personlighetstest</a> , <a href="http://www.bloggar.se/om/test">test</a> , <a href="http://www.bloggar.se/om/webtest">webtest</a> , <a href="http://www.bloggar.se/om/Tickle">Tickle</a> , <a href="http://www.bloggar.se/om/Lethal%20Weapon">Lethal Weapon</a> </div>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Inget att fira]]></title>
<link>http://hutlost.wordpress.com/?p=146</link>
<pubDate>Mon, 07 Apr 2008 22:59:29 +0000</pubDate>
<dc:creator>Larko</dc:creator>
<guid>http://hutlost.sv.wordpress.com/2008/04/08/inget-att-fira/</guid>
<description><![CDATA[DN har ett larvigt (eller skall jag säga hut- och harmlöst) test, där svaren jämförs med vad de]]></description>
<content:encoded><![CDATA[<p>DN har ett larvigt (eller skall jag säga hut- och harmlöst) <a href="http://www.dn.se/DNet/jsp/polopoly.jsp?d=3267">test</a>, där svaren jämförs med vad de flesta stockholmarna har svarat på samma frågor. Så här gick det för mig:</p>
<p align="center"><a href="http://www.larko.org/stockholmstest.png"><img src="http://www.larko.org/stockholmstest.png" alt="" width="455" /></a></p>
<p>Helt fel, säger jag! Jag har ju inte ens besökt Stockholm i 18 år, inte heller Sverige för den delen. Då jag bodde i Stockholm i början av 1980-talet, var det närmaste till Södertälje jag någonsin hamnade i Midsommarkransen, i länet dock Västra Flemingsberg.</p>
<p>Så det så!</p>
<p>via <a href="http://schlaug.blogspot.com/2008/04/hjlp-jag-r-som-en-stockholmare.html">Birger Schlaug</a></p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Boost your WebTests: 50% faster or more!]]></title>
<link>http://mguillem.wordpress.com/?p=38</link>
<pubDate>Mon, 04 Feb 2008 18:54:00 +0000</pubDate>
<dc:creator>Marc Guillemot</dc:creator>
<guid>http://mguillem.sv.wordpress.com/2008/02/04/boost-your-webtests-50-faster-or-more/</guid>
<description><![CDATA[Tests never run fast enough!
This is particularly true for functional tests of web applications. Web]]></description>
<content:encoded><![CDATA[<h1>Tests never run fast enough!</h1>
<p>This is particularly true for functional tests of web applications. <a href="http://webtest.canoo.com">WebTest</a> is known to be <b>very fast compared to other functional test tools</b>, nevertheless when your test suite grows or simply when you want to quickly receive feedback after a commit, you often feel that tests are too slow. A new experimental feature of WebTest allows to specify the number of threads that should be used for the tests what can bring enormous speed improvements without modification of the tests.</p>
<h1>Simply configure the number of threads</h1>
<p>Rather than just calling<br />
[sourcecode language='java']<br />
ant[/sourcecode]<br />
you just specify the number of worker threads<br />
[sourcecode language='java']<br />
ant -Dwt.parallel.nbWorkers=20[/sourcecode]<br />
The optimal number of worker threads will depend from the usage.</p>
<h1>How it works: enqueue rather than execute</h1>
<p>The idea is quite simple and the implementation totally non-intrusive. In fact this is a shame that nobody has had the idea previously (including you! ;-)). This can be simply explained with a few lines of code.</p>
<p>WebTest is based on <a href="http://ant.apache.org">Ant</a> what means that the task mapped to <code>&#60;webtest&#62;</code> contains something like this:<br />
[sourcecode language='java']<br />
class WebTestTask extends Task<br />
{<br />
  void execute()<br />
  {<br />
     // do the WebTest<br />
  }<br />
}[/sourcecode]<br />
For the parallel execution we map <code>&#60;webtest&#62;</code> to a new class that looks like this:<br />
[sourcecode language='java']<br />
class WebTestTaskParallel extends WebTestTask<br />
{<br />
	void execute()<br />
	{<br />
		workQueue.add this<br />
	}</p>
<p>	void executeReally()<br />
	{<br />
		super.execute()<br />
	}<br />
}[/sourcecode]<br />
Once this is done, Ant can do its job normally. When it calls the <code>execute()</code> method of the task, the instance adds itself to a queue and the <code>execute()</code> method returns allowing Ant to continue its normal execution. A set of worker threads look at the queue, calling <code>executeReally()</code> on the WebTestTask instances to really run the tests. That's nearly everything, the rest is just synchronization glue code.</p>
<h1>Improvements from 0% to 50% and more</h1>
<p>I've seen many cases where using a few threads allows to gain over 50% execution speed. In fact this will depend from the capacity of the application under test and how it can handle the increased charge. With a server - not necessary fast - that smoothly handles the charge generated by numerous worker threads, I can imagine tests suites that execute approximatively in the time of the slowest test. On the other side I've already seen test suites that take more time to execute with many worker threads when the AUT runs on the same physical machine than the tests themselves. It's not really surprising: if the tests need more "power" to execute, then there is less for the application.</p>
<h1>Limitations</h1>
<p>With a recent WebTest build, you just have to specify the number of worker threads to start using this new feature. You many need to refactor your tests to include processing made after a <code>&#60;/webtest&#62;</code> within the test otherwise this will be done before the tests itself gets executed and may be the cause of problems. Finally current implementation of this feature doesn't contain any facility to manage dependencies between tests.</p>
<h1>Towards functional load testing?</h1>
<p>Tests with large numbers of worker threads have shown that WebTest scales quite well: both memory and CPU usage stay correct. This opens a <b>new perspective for WebTest: the usage as load testing tool</b>. In fact it should probably be bound to something like <a href="http://jakarta.apache.org/jmeter/index.html">JMeter</a> but I see great advantages in WebTest usage compared to low level http processing as usually done by load testing tools, particularly in test maintainability, AJAX testing or for the correctness of the simulated scenario.</p>
<p><b><i><font color="#ff0000">Update (Feb 6)</font></i></b>: <i>a former client told me that they just started to use a slightly modified version of this feature I prepared them for some time (allowing to manage some dependencies between tests). The results are even better as expected: <b>over 75% saved time!</b> With 8 working threads the tests complete in less than 25% of the original time.</i></p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[WebTest as universal DSL for automated web testing in Groovy thanks to its Ant roots?]]></title>
<link>http://mguillem.wordpress.com/2007/12/04/webtest-as-universal-dsl-for-automated-web-testing-in-groovy-thanks-to-its-ant-roots/</link>
<pubDate>Tue, 04 Dec 2007 10:45:47 +0000</pubDate>
<dc:creator>Marc Guillemot</dc:creator>
<guid>http://mguillem.sv.wordpress.com/2007/12/04/webtest-as-universal-dsl-for-automated-web-testing-in-groovy-thanks-to-its-ant-roots/</guid>
<description><![CDATA[What for a long title!
In the discussion in Grails-user mailing list following my previous post ]]></description>
<content:encoded><![CDATA[<p>What for a long title!</p>
<p>In the <a href="http://www.nabble.com/Canoo-WebTest-vs-Selenium-tf4710697.html#a13464598">discussion in Grails-user mailing</a> list following my previous post "<a href="http://mguillem.wordpress.com/2007/10/29/webtest-vs-selenium-webtest-wins-13-5/">WebTest vs Selenium</a>", Marc Palmer and James Page requested the creation of a kind of meta DSL in Groovy for automated functional tests of web applications.</p>
<p>The idea was to provide a DSL allowing to write functional tests in a tool agnostic way and to run them with <a href="http://webtest.canoo.com">WebTest</a> as often as needed because it is fast and for instance once each night using <a href="http://www.openqa.org/selenium/">Selenium</a> because it uses a real browser but is quite slow.</p>
<p>I'm still not fully convinced on the utility of such a feature because WebTest is so good ;-) but I think that there is no need for a new DSL: it already exists! The AntBuilder allows WebTest to have a really nice syntax in Groovy and this could be simply reused for other "target tools" thanks to Ant.</p>
<h1>Ant theory</h1>
<p>When you write something like this (the examples in this post use Groovy AntBuilder but the same would apply for "pure" Ant in XML format):<br />
<code> </code></p>
<pre>
ant.webtest(name: "a simple test)
{
  invoke "http://webtest.canoo.com"
  verifyTitle "WebTest website"
  clickLink "Manual"
  verifyXPath(xpath: "count(id('navigation-top')//li)", text: "5",
      description: "check the number of top menu elements")
  ...
}</pre>
<p>this looks like WebTest but this is not WebTest as long as you haven't configured Ant with for instance something like<br />
<code> </code></p>
<pre>
ant.project.addTaskDefinition("webtest", com.canoo.webtest.ant.WebTestTask)
ant.project.addTaskDefinition("invoke", com.canoo.webtest.steps.request.Invoke)
...</pre>
<p>This has 2 consequences:<br />
- it is possible to configure other tasks than WebTest's ones for "WebTest steps"<br />
- it is possible to inspect the "parsed" tasks tree</p>
<p>This means that it wouldn't be too difficult to run a "WebTest" test with an other automated test tool like for instance Selenium (as long as the tests don't use any WebTest feature for which no Selenium equivalent exists). Let's see how this could be done.</p>
<h1>First solution: redefine "WebTest steps"</h1>
<p>The first approach consists in redefining the "WebTest steps" to provide an alternative implementation for each WebTest step before executing the test. This could look like following for <code>verifyTitle</code>:</p>
<p><code> </code></p>
<pre>
import org.apache.tools.ant.*class SeleniumVerifyTitle extends Task
{
  String text
  void execute()
  {
    if (text != selenium.title)
      throw new BuildException("Wrong title: expected $text, got ${selenium.title}")
  }
  def getSelenium()
  {
    project.references.'selenium' // assuming that test start placed it there
  }
}
ant.project.taskDefinitions["verifyTitle"] = SeleniumVerifyTitle</pre>
<p><code>verifyTitle</code> is quite simple, for other steps it would be more tricky or even impossible (like the pdf or email steps) to write a Selenium equivalent.</p>
<h1>Generate script from Ant tree</h1>
<p>The second approach consist in the generation of a script from the Ant structure. This has the "advantage" that the<br />
generated script doesn't necessarily have to be run on the Java Virtual Machine.<br />
<code> </code></p>
<pre>
class WebTest2SeleniumRubyConverter extends WebTest
{
  File targetFile // additional attribute to Ant task: the file to write in
  private converters = [
    'invoke': { "open \"${it.attributeMap.url}\"" },
    'verifyTitle': { "assert_equal \"${it.attributeMap.text}\", @selenium.get_title" },
    'clickLink': { "@selenium.click \"link=${it.attributeMap.label}\"" },
    'verifyXPath': { "# ?? I haven't found an example" },
    'pdfVerifyTitle': { "# skipped because not supported: pdfVerifyTitle ${it.attributeMap.title}" },
    ...
  ]
  def execute()
  {
    def rubySteps = runtimeConfigurableWrapper.children.collect { converters[it.elementTag](it) }
    def scriptTemplate = """
require 'test/unit'
require 'selenium'
class ExampleTest &#60; Test::Unit::TestCase
include SeleniumHelper

def setup
@selenium = Selenium::SeleniumDriver.new("localhost", 4444, "*firefox", "http://localhost", 10000);
@selenium.start
end

def teardown
@selenium.stop
end

def test_something
&#60;% steps.each { %&#62;
$it
&#60;% }%&#62;
end

end"""

    def engine = new groovy.text.SimpleTemplateEngine()
    def template = engine.createTemplate(scriptTemplate)
    targetFile.withWriter {
      it &#60;&#60; template.make([steps: rubySteps])
    }
  }
}
ant.project.taskDefinitions["webTest"] = WebTest2SeleniumRubyConverter</pre>
<p><strong>NB</strong>: I don't have any experience in Ruby and have written the example code above only by looking at the samples on Selenium's website.</p>
<p>Naturally this is only an example and it is a bit more complicated to do it correctly (handle different combinations of task attributes, special characters, Ant macros, ...) but surely not so much.</p>
<h1>Conclusion: not very complicated but does it makes sense?</h1>
<p>These two examples shows that it wouldn't be complicated to "convert" simple WebTest tests to allow them to be executed with an other tool like Selenium (but other tools like for instance <a href="http://mguillem.wordpress.com/wp-admin/real%20browsers,%20for%20testing%20javascript%20heavy%20applications,%20and%20a%20pure%20%27in%20...%20http://code.google.com/p/webdriver">WebDriver</a> could be a target too) as long as they use the subset of WebTest features that the target tool accepts. Of course WebTest features like its particularly rich reporting wouldn't be available either.</p>
<p>Personally I'm not really convinced of the utility of such a "generic DSL" due to WebTest's excellent quality and unless a new client (you? ;-)) really wants this feature I don't plan to work on it but I'm ready to provide technical assistance if someone wants to do the job.</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[XPath Checker Y Regular Expression Tester]]></title>
<link>http://dadicy.wordpress.com/2007/12/03/xpath-checker-y-regular-expression-tester/</link>
<pubDate>Mon, 03 Dec 2007 14:32:43 +0000</pubDate>
<dc:creator>Blink</dc:creator>
<guid>http://dadicy.sv.wordpress.com/2007/12/03/xpath-checker-y-regular-expression-tester/</guid>
<description><![CDATA[XPath checker and regular expression tester are both plugins.
I know that some of you are familiar w]]></description>
<content:encoded><![CDATA[<p><a href="https://addons.mozilla.org/en-US/firefox/addon/1095">XPath checker</a> and <a href="http://www.brosinski.com/regex/">regular expression tester</a> are both plugins.</p>
<p>I know that some of you are familiar with these two things and some of you are not.  For this past month I have been using these plugins and these are also my favorites.  They are really useful in terms of time and efficiency.</p>
<p>Let me explain these things to you.</p>
<p><strong>XPath Checker</strong> is a Firefox Extension for testing XPath expressions interactively written by <a href="http://slesinsky.org/brian/">Brian Slesinsky</a>.  It is also like a regular expressions for web pages.  XPath make it easy to extract content from deeply nested markup in a web page or an XML document.   This would be useful in unit-testing code that generates XML or HTML.</p>
<p>Here are examples of xpath expressions:</p>
<p>Get the title of a page:<br />
<code>//title/text()</code></p>
<p>List all the images on a page:<br />
<code>//img</code></p>
<p>List the images that are inside a link:<br />
<code>//a//img</code></p>
<p>List the images that have alt tags:<br />
<code>//img[@alt]</code></p>
<p>List the images that <em>don't</em> have alt tags:<br />
<code>//img[not(@alt)]</code></p>
<p>Show all the alt tags:<br />
<code>//img/@alt</code></p>
<p>Show the href for every link:<br />
<code>//a/@href</code></p>
<p>Get an element with a particular CSS id:<br />
<code>//*[@id='mainContent']</code></p>
<p><strong>REGULAR EXPRESSION</strong> tester is simply a tester for regular expressions on the fly.  It is a plugin for your <a href="http://www.eclipse.org/">Eclipse </a>especially you are dealing different patterns.</p>
<p>These two are small but powerful tools in programming.  These are also my favorites and I wish you will find it useful and helpful than doing your own parsers in a weeks or in a months.</p>
<p>Features</p>
<ul>
<li>Test and search for regular expression</li>
<li>Matches are colorized, for an easy visual clue</li>
<li>Support for pattern flags (e.g. Pattern.DOTALL)</li>
<li>LiveEval evaluates your regular expression while you are       typing it, gives feedback on possible errors and shows any       matches automatically</li>
<li>LiveEval is supported for changes of the regular expression,       the search text and the pattern flags</li>
<li>         4 distinct match modes:
<ul>
<li>Find a sequence of characters</li>
<li>Match a complete text</li>
<li>Split text</li>
<li>Replace every occurence of the regex with a different           string<br />
Replacing supports back references ($1,$2,...)</li>
</ul>
</li>
<li>LiveEval for match mode changes</li>
<li>Context sensitive "Regular Expression Assist"</li>
<li>Selective evaluation of expressions</li>
<li>Bracket Matching</li>
<li>Generation of string literals based on the regexp, e.g.       "\(x\)" becomes "\\(x\\)"</li>
<li>De-escape patterns in your code, e.g. \\(x\\) becomes       \(x\)</li>
<li>Improved "Clear Menu", choose which parts of the view you    would like to get cleared every time you press the clear button</li>
<li>Easy movement through matches: Choose "Previous Match" or       "Next Match" and cycle through all matches found.</li>
<li>Polished and accessible user interface, everything is       reachable via keyboard</li>
</ul>
]]></content:encoded>
</item>
<item>
<title><![CDATA[2nd WebTest screencast: Data Driven WebTest]]></title>
<link>http://mguillem.wordpress.com/2007/11/13/2nd-webtest-screencast-data-driven-webtest/</link>
<pubDate>Tue, 13 Nov 2007 09:48:19 +0000</pubDate>
<dc:creator>Marc Guillemot</dc:creator>
<guid>http://mguillem.sv.wordpress.com/2007/11/13/2nd-webtest-screencast-data-driven-webtest/</guid>
<description><![CDATA[My colleague Tomi Schütz and I have finished our second WebTest screencast: Data driven WebTest.
Co]]></description>
<content:encoded><![CDATA[<p>My colleague <a href="http://tomionsoftware.blogspot.com/">Tomi Schütz</a> and I have finished our second WebTest screencast: <a href="http://opensource.basehaus.com/webtest/screencasts/data-driven-webtest.htm">Data driven WebTest</a>.</p>
<p>Content: (duration ~2'30'')<br />
I-   Do you know Google Calculator?<br />
II-  Do you know the dataDriven Ant task?<br />
III- Testing Google Calculator with data driven WebTest</p>
<p>It should be interesting even for experienced WebTest users: the <a href="http://webtest.canoo.com/webtest/manual/dataDriven.html">dataDriven</a> task is so simple and powerful, and <a href="http://www.google.com/help/calculator.html">Google Calculator</a> is a funny toy.</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[WebTest Monitor]]></title>
<link>http://mguillem.wordpress.com/2007/10/31/webtest-monitor/</link>
<pubDate>Wed, 31 Oct 2007 21:13:22 +0000</pubDate>
<dc:creator>Marc Guillemot</dc:creator>
<guid>http://mguillem.sv.wordpress.com/2007/10/31/webtest-monitor/</guid>
<description><![CDATA[WebTest now contains a minimal GUI showing the progression of the tests execution when started manua]]></description>
<content:encoded><![CDATA[<p><a href="http://webtest.canoo.com">WebTest</a> now contains a minimal GUI showing the progression of the tests execution when started manually:</p>
<p style="text-align:center;"><img src="http://mguillem.wordpress.com/files/2007/10/webtestmonitor.png" alt="webtestmonitor.png" /></p>
<p><strong>What does it bring? In fact nearly nothing.</strong></p>
<p>It's just a small information displayed during test execution. It becomes funny when you start a few dozen tests in parallel because you nearly don't have time to follow each single test that get started or finished: it goes too fast. But this will be the subject of a future post once this feature is integrated in WebTest builds.</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[WebTest vs Selenium: WebTest wins 13 - 5]]></title>
<link>http://queroseragil.wordpress.com/2007/10/29/webtest-vs-selenium-webtest-wins-13-5/</link>
<pubDate>Mon, 29 Oct 2007 22:01:20 +0000</pubDate>
<dc:creator>Rafael Mueller</dc:creator>
<guid>http://queroseragil.sv.wordpress.com/2007/10/29/webtest-vs-selenium-webtest-wins-13-5/</guid>
<description><![CDATA[Há mais de um ano atrás, antes de iniciarmos a fazer testes de aceitação, entre as possibilidade]]></description>
<content:encoded><![CDATA[<p>Há mais de um ano atrás, antes de iniciarmos a fazer testes de aceitação, entre as possibilidades haviam o <a href="http://www.openqa.org/selenium/">Selenium</a> e o <a href="http://webtest.canoo.com/webtest/manual/WebTestHome.html">WebTest</a>. Na época decidimos utilizar o Selenium.</p>
<p><a href="http://mguillem.wordpress.com">Marc Guillemot</a> <a href="http://mguillem.wordpress.com/2007/10/29/webtest-vs-selenium-webtest-wins-13-5/">postou uma comparação</a> entre os dois, e o seu resultado foi vitória do WebTest.</p>
<p>Particularmente,  quando fiz meus testes, achei o WebTest muito lento/chato para fazer os testes quando comparado ao <a href="http://www.openqa.org/selenium-ide/">Selenium IDE</a>.</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[WebTest vs Selenium: WebTest wins 13 - 5]]></title>
<link>http://mguillem.wordpress.com/2007/10/29/webtest-vs-selenium-webtest-wins-13-5/</link>
<pubDate>Mon, 29 Oct 2007 09:21:04 +0000</pubDate>
<dc:creator>Marc Guillemot</dc:creator>
<guid>http://mguillem.sv.wordpress.com/2007/10/29/webtest-vs-selenium-webtest-wins-13-5/</guid>
<description><![CDATA[In the last months I&#8217;ve seen a rising interest in automated testing of web applications thanks]]></description>
<content:encoded><![CDATA[<p>In the last months I've seen a rising interest in automated testing of web applications thanks to the efficient viral marketing of Selenium. However, <strong>the world is full of test automation projects that started with big hopes and lots of enthusiasm only to be abandoned shortly after facing the unpleasant reality that it needs more than a point-and-click activity to develop a suite of robust tests</strong>.</p>
<p><strong>The maintainability of automated tests depends primarily on the skills of the test authors, but different tools have different features that impact their efficiency.</strong> This blog post compares the features of two open source automated web testing tools: Canoo WebTest and Selenium.</p>
<h3><strong>A short introduction to the contenders:</strong></h3>
<p><a href="http://webtest.canoo.com">Canoo WebTest</a> is a free open source tool that has existed since 2001. It is written in pure Java and contains a set of <a href="http://ant.apache.org">Ant</a> tasks that drive a simulated, faceless browser (originally <a href="http://httpunit.sf.net">HttpUnit</a>, but for the last few years <a href="http://htmlunit.sf.net">HtmlUnit</a>).</p>
<p><a href="http://www.openqa.org/selenium/">Selenium</a> is a free open source tool as well, created in 2004. It uses injected JavaScript to work within real browsers. Different components exists under the name Selenium: <a href="http://www.openqa.org/selenium-core/">Selenium Core</a>, <a href="http://www.openqa.org/selenium-rc/">Selenium RC</a>, <a href="http://www.openqa.org/selenium-ide/">Selenium IDE</a> (!), ... In this blog post I will only consider Selenium RC used with Selenium IDE on Firefox or Selenium HTA on Internet Explorer due to the limitations of the other possibilities.</p>
<h2>Features comparison</h2>
<p>To be clear, as a WebTest (and HtmlUnit) committer I'm undoubtedly biased. On the other hand, I have experience with huge functional test suites being developed and maintained over periods of years. Trying to be objective, I may overcompensate in the other direction and give Selenium too much credit. Of course I will diligently fix errors I may have in my Selenium understanding. But please read this post until the end before starting with criticisms ;-)</p>
<ul>
<li>
<h2><strong>Browser fidelity</strong>: <font color="#999999">WebTest 0</font> - <font color="#ff0000">1 Selenium</font></h2>
</li>
</ul>
<p>This is <strong>probably the most overestimated characteristic of a web testing tool</strong>. Automated tests don't make manual testing useless because automated tests can't cover everything (at least for affordable costs). You still have to walk through your application (just think of everything you've checked just reading this: page layout, font size, font colors, ...).<br />
The consequence is that <strong>an automated web testing tool's purpose is not to ensure that an application works "well" as it is not possible, but to detect most of the failures that could happen</strong>. This is a huge difference because it means that tests don't have necessary to run in a "real" browser.<br />
Nevertheless the browser's real behaviour has to be approximated as closely as possible. HtmlUnit's JavaScript support has made impressive progress but it still doesn't (and will never) behave exactly like a normal browser.<br />
Even though Selenium modifies the normal JavaScript execution of an application, it uses the browser itself and therefore is nearer to the standard behaviour of the browser.</p>
<ul>
<li>
<h2><strong>Reports</strong>: <font color="#ff0000">WebTest 1</font> - <font color="#808080">0 Selenium</font></h2>
</li>
</ul>
<p>JUnit-like reports are far too limited for web test automation. This is probably something that you first see when you have reached a certain volume of tests. If the tests are successful, you don't need any report at all, but when some tests fail, you need the information to find as quickly as possible what is the failure cause and an error message is often not enough.<br />
<strong>With comprehensive reports like those provided by WebTest, you don't have to debug your tests, just to analyse the reports</strong>. Furthermore it allows you to understand (and fix) the worst kind of bugs: those that don't occur systematically.</p>
<ul>
<li>
<h2><strong>Speed</strong>: <font color="#ff0000">WebTest 1</font> - <font color="#999999">0 Selenium</font></h2>
</li>
</ul>
<p>Tests are never fast enough. Selenium is known not to be very fast and even slower on Internet Explorer (just read the mailing list) and seems to suffer from memory leaks. On the other side, WebTest is quite fast (see for instance <a href="http://www.nabble.com/Freaky%3A-Selenium-RC-works-within-HTMLUnit-tf4349727.html">this thread</a> in Selenium Dev mailing list for a non representative test where Selenium took ~ 10 seconds and WebTest &#60; 2s).<br />
It's not surprising due to Selenium's architecture (3 tiers involved) and all the rendering that happens in browser. Even if HtmlUnit's HTML handling algorithms are not as good as the real browsers, WebTest has simply less to do and everything happens in the JVM.</p>
<ul>
<li>
<h2><strong>Integration in development process</strong>: <font color="#ff0000">WebTest 1</font> - <font color="#999999">0 Selenium</font></h2>
</li>
</ul>
<p>WebTest is "just" Ant which means that it can directly be called from CruiseControl for instance or from each developer's workstation.<br />
On the other side for Selenium you need a real browser with an own profile, a proxy - possibly on another computer if you want to test with IE and run the tests from a non Windows system.</p>
<ul>
<li>
<h2><strong>Scalability</strong>: <font color="#ff0000">WebTest 1</font> - <font color="#999999">0 Selenium</font></h2>
</li>
</ul>
<p>For a large application (or set of applications) with a good functional test coverage your test suite(s) will rapidly grow and scalability may become an issue. WebTest scales far better than Selenium mostly because it's faster and because you can simply run many tests suites in parallel (just think of the hardware requirements and browser limitations to do that with Selenium).</p>
<ul>
<li>
<h2><strong>Capture JS errors</strong>: <font color="#ff0000">WebTest 1</font> - <font color="#999999">0 Selenium</font></h2>
</li>
</ul>
<p>This is what surprises me most about experienced developers working with Selenium: they find it acceptable to ignore JS errors.<strong> Would you accept compilation errors in your program as long as your unit test pass? Surely not! But in fact this is exactly what you do with Selenium as it doesn't detect the javascript errors contained in your application</strong> (unless they directly impact the specific tests causing them to fail).</p>
<ul>
<li>
<h2>Testing AJAX: <font color="#ff0000">WebTest 1</font> - <font color="#ff0000">1 Selenium</font></h2>
</li>
</ul>
<p>Contrary to popular belief, you don't need to run your test as JavaScript inside a browser to test AJAX functionality. HtmlUnit and thus WebTest is just as well up to the task. It can even be considered superior as it allows better control over how to schedule the in-page requests making the unpredictable browser behavior predictable (see for instance my previous <a href="http://mguillem.wordpress.com/2007/07/24/htmlunit-re-synchronize-ajax-calls-for-simple-deterministic-test-automation/">post</a>).</p>
<ul>
<li>
<h2><strong>Beginner friendly</strong>: <font color="#999999">WebTest 0</font> - <font color="#ff0000">1 Selenium</font></h2>
</li>
</ul>
<p>Beginners (as well as managers ;-)) better understand test automation of web applications, when they see what happens.</p>
<ul>
<li>
<h2><strong>Documentation</strong>: <font color="#ff0000">WebTest 1</font> - <font color="#999999">0 Selenium</font></h2>
</li>
</ul>
<p>Extensive and up-to-date documentation is very important. A quick look at both web sites will show you that WebTest manual is clearly the winner. <strong>It should even be a negative point for Selenium as advice on what makes test suites maintainable is completely missing</strong>.</p>
<ul>
<li>
<h2><strong>Predictable behaviour</strong>: <font color="#ff0000">WebTest 1</font> - <font color="#999999">0 Selenium</font></h2>
</li>
</ul>
<p>Should be a minimal requirement for a test tool, but if you look regularly at Selenium mailing lists or at different posts (like this <a href="http://www.infoq.com/news/2007/08/selenium-pain">one</a>), this is not yet fully the case for Selenium.</p>
<ul>
<li>
<h2><strong>XPath support:</strong> <font color="#ff0000">WebTest 1</font> - <font color="#999999">0 Selenium</font></h2>
</li>
</ul>
<p>WebTest currently uses <a href="http://jaxen.org/">Jaxen</a> as XPath engine which means that XPath 1.0 is covered as well as some XPath 2 functions (do you know that <em>starts-with</em> is in XPath 1 spec but <em>ends-with</em> first appears in XPath 2?).<br />
Additionally you can customize it to define your own XPath functions.<br />
Selenium uses native XPath support when it's available (like in Firefox) and evaluates XPath expressions using JavaScript libraries otherwise (like in IE). This JS library is slow and many XPath expressions aren't interpreted correctly. Even in Firefox, the support is limited to XPath 1.0.</p>
<ul>
<li>
<h2><strong>Support for badly formatted HTML code: <font color="#999999">WebTest 0</font> - <font color="#ff0000">1 Selenium</font></strong></h2>
</li>
</ul>
<p>Browsers are able to cope with really badly formed HTML code and so does Selenium as a consequence. WebTest's parser (<a href="http://people.apache.org/~andyc/neko/doc/html/">NekoHTML</a>) is able to handle some malformations but not that much. Even though <strong>it is quite questionable to see it as a feature when your goal is to write your web application as well as possible</strong>, sometimes testers do not have access to the development resource to correct the source and just want to test functionality so I'll give this point to Selenium.</p>
<ul>
<li>
<h2><strong>Extensibility</strong>: <font color="#ff0000">WebTest 1</font> - <font color="#999999">0 Selenium</font></h2>
</li>
</ul>
<p>Selenium accepts custom extensions but first this is cumbersome because the extensions have to be deployed in the target browser(s) and second interactions are limited as extension code executes in the browser and not in your test program.<br />
In WebTest you have full control over the "browser" from within your tests which you can use to simply write global extensions as well as project or test specific ones.</p>
<ul>
<li>
<h2><strong>Data driven tests:</strong><font color="#ff0000"> WebTest 1</font> - <font color="#999999">0 Selenium</font></h2>
</li>
</ul>
<p>No discussion, the <a href="http://webtest.canoo.com/webtest/manual/dataDriven.html"><em>dataDriven</em></a> Ant task used with WebTest is simple and powerful!</p>
<ul>
<li>
<h2><strong>Multi-language support: <font color="#999999">WebTest 0</font> - <font color="#ff0000">1 Selenium</font></strong></h2>
</li>
</ul>
<p>Selenium RC has bindings in different languages (Java, Ruby, PHP, ...) whereas WebTest is bound to Ant which means XML or for instance Groovy with its nice AntBuilder (in fact any of the over 200 languages for the JVM could probably be used). I think that Selenium is missing a real specification language (please don't talk about Selenese!) like Ant is in this case for WebTest, but I need to give some points to Selenium...</p>
<ul>
<li>
<h2><strong>Internationalisation support</strong>: <font color="#ff0000">WebTest 1</font> - <font color="#999999">0 Selenium</font></h2>
</li>
</ul>
<p>Using WebTest, you just need to put your language specific strings in property files and use Ant's built in <em>property</em> task to load the right resources before executing your tests.</p>
<p><em><font color="#ff0000"><strong>Update 05.11.07:</strong></font></em><br />
<em>Dan Fabulich correctly indicates that Selenium RC tests written in the same language than the AUT can directly use the application's i18n resource bundles. Therefore WebTest can't be seen as winner outside of the Java world.</em></p>
<ul>
<li>
<h2><strong>Support for non HTML content:</strong> <font color="#ff0000">WebTest 1</font> - <font color="#999999">0 Selenium</font></h2>
</li>
</ul>
<p>HTML is only one of the content types used by a web application and it's a common need to have mixed content within the same applications with for instance a PDF file containing the invoice after the checkout. Selenium is limited to HTML content (+XML and text). On the other side WebTest has built in support to work with PDF documents and Excel files as well as Applets and Emails.</p>
<h1><strong>Conclusion:</strong></h1>
<p><strong>Automated functional tests of web application should become as natural as unit tests</strong>. Some tests are better than no tests, no matter which tool is used. Selenium does a good job to introduce newcomers and has many advantages (besides the price) over its commercial model QTP. Nevertheless at least when the size of your suite grows, you should pay attention to your efficiency if you want to last and "<a href="http://www.nabble.com/Why-do-you-use-WebTest----%29-tf2693116.html#a7531644"><em>the ROI on WebTest is many orders of magnitude higher than any other tool I've used</em></a>" (Lisa Crispin, author of <a href="http://www.amazon.com/Testing-Extreme-Programming-Lisa-Crispin/dp/0321113551/ref=pd_bbs_sr_1/105-4993349-5766848?ie=UTF8&#38;s=books&#38;qid=1193646675&#38;sr=8-1"><em><strong>Testing Extreme Programming</strong></em></a>).</p>
<p>When comparing Selenium and WebTest, 3 categories of web application can be considered. First the applications that are supported both by WebTest and Selenium. This contains most of the applications. Then the ones that use browser features (mostly javascript) that are not yet supported by HtmlUnit. Due to HtmlUnit's awesome progress in JavaScript support, the size of this category continuously shrinks. The last category concerns applications that use for instance PDF documents or applets and for which Selenium has no support. <strong>In all cases where WebTest can be used it is far more efficient than Selenium to ensure the quality of web applications because it provides more feedback and takes less time</strong> (both to execute and to analyse results).</p>
<p>When I started writing this post I didn't expect that Selenium would get such a bad score. Comments are welcome to show which advantages of Selenium over WebTest I've missed!</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Thoughts on Selenium Grid]]></title>
<link>http://mguillem.wordpress.com/2007/10/04/thoughts-on-selenium-grid/</link>
<pubDate>Thu, 04 Oct 2007 14:46:04 +0000</pubDate>
<dc:creator>Marc Guillemot</dc:creator>
<guid>http://mguillem.sv.wordpress.com/2007/10/04/thoughts-on-selenium-grid/</guid>
<description><![CDATA[I&#8217;m impressed by the activity around Selenium. Not because I&#8217;m impressed by Selenium but]]></description>
<content:encoded><![CDATA[<p>I'm impressed by the activity around <a href="http://www.openqa.org/selenium/">Selenium</a>. Not because I'm impressed by Selenium but because I think that all this work could be better invested. For instance it would surely be a smaller effort to make for instance <a href="http://htmlunit.sf.net">HtmlUnit</a> able to work with its recognized speed with numerous browser configurations, simulating perfectly their JavaScript execution, and not only 2 browsers as Selenium really supports. The last Selenium related project I've discovered is <a href="http://seleniumgrid.thoughtworks.com/">Selenium Grid</a>.</p>
<p><strong>Run tests in parallel</strong></p>
<p>Selenium Grid's aims to allow running tests on multiple computer because:</p>
<ul>
<li>"<em>Selenium remote control is quite slow at driving the browser</em>".</li>
<li>"           <em>You can only run a limited number of concurrent tests on the same remote           control before seriously impacting its stability. Practically speaking,           launching more than 6 browsers on the same Selenium Remote Control is not           advisable. The limitations are even more drastic for Internet Explorer.</em>"</li>
</ul>
<p>In other words: slow and not scalable. If I correctly understand the documentation, Selenium Grid will allow to run approximatively <strong>6 x N tests in parallel</strong>, where N is the number of computers in the grid. Not really impressive.</p>
<p>An HtmlUnit user <a href="http://www.nabble.com/forum/ViewPost.jtp?post=8632035&#38;framed=y">reported</a> that he performed load testing with HtmUnit using 350 threads in the same VM and one WebClient instance per thread. For this purpose he allocated 512M of his 1Gig laptop to the VM and it worked very well. <a href="http://webtest.canoo.com">WebTest</a> surely adds some overhead to HtmlUnit "pure" but, due to the indications of this user, I could imagine that it would be possible to run <strong>500 threads of WebTest tests on one computer</strong> within a single VM. <strong>This would save just... 80 computers compared to Selenium Grid!</strong></p>
<p><strong>Parallelisation often limited</strong></p>
<p>Selenium Grid's documentation says: "<em>Selenium Grid cuts down on the time required to run a Selenium test suite to a fraction of the time that a       single instance of Selenium instance would take to run</em>". Sadly this isn't that easy. Not all tests can be run in parallel: as soon as you test the functionalities of registered users, you're often limited to a serial test execution (or a just a few parallel executions) when your application doesn't accept numerous simultaneous login of the same user and you don't have so much users available with the right settings for the tests. In this case only pure speed can help.</p>
<p>Grid computing is an exciting large area, perhaps is Selenium Grid only a side product of some more significant activity...</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[1st WebTest screencast: Creating a first Webtest Project]]></title>
<link>http://mguillem.wordpress.com/2007/08/31/1st-webtest-screencast-creating-a-first-webtest-project/</link>
<pubDate>Fri, 31 Aug 2007 14:32:34 +0000</pubDate>
<dc:creator>Marc Guillemot</dc:creator>
<guid>http://mguillem.sv.wordpress.com/2007/08/31/1st-webtest-screencast-creating-a-first-webtest-project/</guid>
<description><![CDATA[The first WebTest screencast is now (in fact since 2 weeks) available online: Creating a first WebTe]]></description>
<content:encoded><![CDATA[<p>The first <a href="http://webtest.canoo.com">WebTest</a> screencast is now (in fact since 2 weeks) available online: <a href="http://opensource.basehaus.com/webtest/screencasts/creating-a-first-webtest-project.htm">Creating a first WebTest project</a></p>
<p>Content: (duration ~4 minutes)</p>
<ol>
<li>   Download WebTest from <a href="http://webtest.canoo.com/" class="moz-txt-link-freetext">http://webtest.canoo.com</a></li>
<li>   Check download and environment</li>
<li>   Create a new WebTest project</li>
<li>   Start the demo tests</li>
<li>   Browse automatically opened reports</li>
<li>   Look at the sources</li>
<li>   Look at the documentation</li>
</ol>
<p>This is quite simple and probably not so interesting for experimented <a href="http://webtest.canoo.com">WebTest</a> users (or maybe a bit as the features of the utility <code>webtest.xml</code> are quite new).</p>
<p>My colleague <a href="http://tomionsoftware.blogspot.com/">Tomi Schütz</a> and I are working on other screencasts to show <a href="http://webtest.canoo.com">WebTest</a> features. Stay tuned, the next one should be quite impressive.</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Compute Fibonacci numbers with Google Calculator and WebTest]]></title>
<link>http://mguillem.wordpress.com/2007/08/31/compute-fibonacci-numbers-with-google-calculator-and-webtest/</link>
<pubDate>Fri, 31 Aug 2007 14:20:41 +0000</pubDate>
<dc:creator>Marc Guillemot</dc:creator>
<guid>http://mguillem.sv.wordpress.com/2007/08/31/compute-fibonacci-numbers-with-google-calculator-and-webtest/</guid>
<description><![CDATA[You&#8217;ve surely written programs to compute the Fibonacci numbers using different programming la]]></description>
<content:encoded><![CDATA[<p>You've surely written programs to compute the Fibonacci numbers using different programming languages (if not or if you've forgotten, have a look at the Wikipedia article "<a href="http://en.wikipedia.org/wiki/Fibonacci_number">Fibonacci number</a>"). Nevertheless I'm quite sure that you've never seen the following method: it's an idea of my colleague <a href="http://tomionsoftware.blogspot.com/">Tomi Schütz</a> and it uses <a href="http://webtest.canoo.com">WebTest</a> to drive <a href="http://www.google.com/help/calculator.html">Google Calculator</a> (if you don't know it, just search for instance something like <a href="http://www.google.com/search?q=48+%2B+89">"48 + 89" with Google</a>).</p>
<p>The idea is quite simple:</p>
<ul>
<li>start with the initial values F0 = 0 and F1 = 1</li>
<li>invoke Google to compute the sum of these values</li>
<li>extract the result from the html page, this is F2</li>
<li>invoke Google to compute F1 + F2</li>
<li>...</li>
</ul>
<p>Expressed as a WebTest this looks like:<br />
<code><br />
&#60;<strong>webtest</strong> name="Fibonacci"&#62;<br />
</code></p>
<blockquote><p><code> &#60;invoke url="http://www.google.com/ncr" description="Go to Google (in English)"/&#62;</code><br />
<code> &#60;verifyTitle text="Google" /&#62;</code><br />
<code> &#60;setInputField name="q" value="WebTest" /&#62;</code><br />
<code> &#60;clickButton label="Google Search" description="dummy search to cope only with one kind of submit button in the repeat"/&#62;</code><br />
<code> &#60;storeProperty name="previous" value="0" description="F0"/&#62;</code><br />
<code> &#60;storeProperty name="current" value="1" description="F1"/&#62;</code><br />
<code> &#60;repeat startCount="2" endCount="10"&#62;</code></p>
<blockquote><p><code> &#60;setInputField name="q" value="#{previous} + #{current}" /&#62;</code><br />
<code> &#60;clickButton label="Search" /&#62;</code><br />
<code> &#60;storeProperty name="previous" value="#{current}"/&#62;</code><br />
<code></code><code>&#60;storeXPath xpath="substring-after(//tr[.//img[@src='/images/calc_img.gif']]/td[3]//b/text(), '= ')" property="current" </code><code>description="Store Fibonacci #{count}"/&#62; </code> <code> &#60;!-- ugly XPath but it's Google's fault!--&#62;</code></p></blockquote>
<p><code> &#60;/repeat&#62;</code><br />
<code> &#60;verifyProperty name="current" value="55" description="10th Fibonacci number"/&#62;</code><br />
<code></code></p></blockquote>
<p><code> &#60;/<strong>webtest</strong>&#62;<br />
</code>(sorry for the formatting, WordPress.com is not the best blog hoster for code examples)</p>
<p>Running this script you get results like this: <a href="http://mguillem.wordpress.com/files/2007/08/fibonaccitestresult.png" title="WebTest Fibonacci - Test Results">WebTest Fibonacci - Test Results</a><a href="http://mguillem.wordpress.com/files/2007/08/fibonaccitestresult.png" title="WebTest Test Results"><br />
</a></p>
<p>Ok, it was just for fun because, even if WebTest and Google are very fast, computing the 10th number of the Fibonacci sequence involved getting 11 html response pages and took 2496 ms here!</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[webtest and jWebUnit: first impression]]></title>
<link>http://vegdave.wordpress.com/2007/08/03/webtest-and-jwebunit-first-impression/</link>
<pubDate>Sat, 04 Aug 2007 00:50:08 +0000</pubDate>
<dc:creator>Dave</dc:creator>
<guid>http://vegdave.sv.wordpress.com/2007/08/03/webtest-and-jwebunit-first-impression/</guid>
<description><![CDATA[I spent a little bit of time check out both webtest and jWebUnit. Here are my first impression:
webt]]></description>
<content:encoded><![CDATA[<p>I spent a little bit of time check out both webtest and jWebUnit. Here are my first impression:</p>
<p><a href="http://webtest.canoo.com/webtest/manual/WebTestHome.html">webtest</a> is declarative and XML configuration file driven. If you like configuration management more than programming, you might like this format. All you need is edit the test definition and hit the run command, no compilation necessary. If you have well formed HTML and working JavaScript, then you should not have too much trouble running this. My initial simple test case works once I commented out the non-working and irrelevant JavaScript reference in the HTML. I tried to take another mini-step forward by attempting to "configure" a click to select one of the link items in a JavaScript widget. Webtest has 3 ways to click on a link, by ID, label, or xPath. The widget's link item doesn't have an ID, so I can't use that. I tried label and that didn't work. Then I tried xPath and that didn't work for me either. So, that second mini-step didn't go very far for me. Any one know an open source xPath validation tool or web site? </p>
<p><a href="http://jwebunit.sourceforge.net/2.x/index.html">jWebUnit</a> is one of the many unit testing frameworks based on jUnit/HtmlUnit. The interesting aspect of this framework is that it supports both HtmlUnit and Selenium test cases. jWebUnit uses similar programmatic model as jUnit, so you can stay comfortable within your favorite IDE. I was able to create a new project in NetBeans and leverage it's jUnit feature, by creating an unit test and rewrite that as a jWebUnit test case, while using NetBeans to drive the test execution. jWebUnit, or the underlying HtmlUnit engine appears more picky about JavaScript than Webtest, I had to start tweaking YUI libraries in an attempt to load a page, which shouldn't be something that I supposed to be doing anyway. Perhaps YUI engineers use a different unit testing framework. The test page actually loads without a major issue in Firefox.</p>
<p>Both frameworks do share one thing in common, both do not use actual browser instances to drive the testing. And that explains why they don't work as well as some of testing frameworks that built within or on the real browser instance because of behavior differences when processing JavaScript. At the same time, both may have one advantage over browser based testing framework, which is the ability for non-interactive testing through ant and is very useful for continuous integration servers such as CruiseControl. Again, I've only looked a few testing frameworks and let me know if you know a browser based unit testing framework that works with ant. Thanks.</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[XPath Power]]></title>
<link>http://mguillem.wordpress.com/2007/07/25/xpath-power/</link>
<pubDate>Wed, 25 Jul 2007 13:01:02 +0000</pubDate>
<dc:creator>Marc Guillemot</dc:creator>
<guid>http://mguillem.sv.wordpress.com/2007/07/25/xpath-power/</guid>
<description><![CDATA[XPath support is indispensable for any serious web test automation tool because xpath expressions al]]></description>
<content:encoded><![CDATA[<p>XPath support is indispensable for any serious web test automation tool because xpath expressions allow to precisely select nearly everything in an HTML page using a concise syntax.</p>
<p>Last week I had again a case showing the power of XPath. Colleagues had to write a <a href="http://webtest.canoo.com">WebTest</a> script that should (among other steps) change the value of a select like this one:<br />
<code><br />
&#60;select name="mySelect"&#62;<br />
&#60;option value=""&#62;&#60;/option&#62;<br />
&#60;option value="1"&#62;English&#60;/option&#62;<br />
&#60;option value="2"&#62;French&#60;/option&#62;<br />
&#60;option value="3"&#62;German&#60;/option&#62;<br />
&#60;/select&#62;<br />
</code><br />
(this blog doesn't allow to "display" this select field it as it would normally appear, but you have surely enough HTML knowledge to understand it)</p>
<p>No assumption could be made on the current value of the select, the test had just to select an other valid option (meaning not the first one).</p>
<p><strong>First approach</strong><br />
The first approach could be to read the index of the selected option, increment it, perform a modulo operation and avoid the first option. More pragmatic would be to take the second one (here "English") if it is not already selected and the 3rd one (here "French") if "English" was selected.<br />
These solutions work but require some logic that can only be expressed in a script.</p>
<p><strong>More elegant solution with xpath</strong><br />
In fact you can simply formulate the test specification with an XPath like this one:</p>
<pre>
//select[@name='mySelect']/option[text() and . != ../option[@selected]]</pre>
<p>This XPath just selects all the options of select field <code>mySelect</code> that have a "content" (i.e. not the first, empty one) and that are not currently selected.</p>
<p>------<br />
<strong>NB</strong>: WebTest's <code>setSelectField</code> step takes automatically the first option when the xpath evaluation returns more than one result. For other test tools, you may need to select explicitly the first option like this <code>(//select[@name='mySelect']/option[text() and . != ../option[@selected]])[1]</code></p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[WebTest's New Motto: The Most Effective Way To Test Your Web App!]]></title>
<link>http://mguillem.wordpress.com/2007/07/23/webtests-new-motto-the-most-effective-way-to-test-your-web-app/</link>
<pubDate>Mon, 23 Jul 2007 09:47:27 +0000</pubDate>
<dc:creator>Marc Guillemot</dc:creator>
<guid>http://mguillem.sv.wordpress.com/2007/07/23/webtests-new-motto-the-most-effective-way-to-test-your-web-app/</guid>
<description><![CDATA[We&#8217;ve change WebTest&#8217;s motto (previously it was &#8220;Free open source tool for automat]]></description>
<content:encoded><![CDATA[<p>We've change <a href="http://webtest.canoo.com">WebTest</a>'s motto (previously it was "Free open source tool for automated testing of web applications") to better express what WebTest's strengths are.</p>
<p>A lot of tools for automated testing of web app are available and have different features that may appear appealing in a first time. WebTest shines in what I call "<strong>professional test automation</strong>" because it allows to simply write test scripts that are reliable, fast, easy to run, cheap to maintain, helpful to quickly find errors and it scales fine and is easy to extend. <strong>Lisa Crispin</strong>, author of <a href="http://www.amazon.com/Testing-Extreme-Programming-Lisa-Crispin/dp/0321113551/ref=pd_bbs_sr_1/104-1565087-1202333?ie=UTF8&#38;s=books&#38;qid=1185182659&#38;sr=8-1"><span class="sans">Testing Extreme Programming</span></a><span class="sans">, described this perfectly:</span><strong><span class="sans"> "</span>the ROI on WebTest is many orders of magnitude higher than any other tool I've used"</strong>.</p>
<p>This new motto is only the first step. Keep tuned!</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[iX Bessere Software! Conference 2007: WebTest Tutorial &amp; Session accepted]]></title>
<link>http://mguillem.wordpress.com/2007/07/20/ix-bessere-software-conference-2007-webtest-tutorial-session-accepted/</link>
<pubDate>Fri, 20 Jul 2007 08:36:20 +0000</pubDate>
<dc:creator>Marc Guillemot</dc:creator>
<guid>http://mguillem.sv.wordpress.com/2007/07/20/ix-bessere-software-conference-2007-webtest-tutorial-session-accepted/</guid>
<description><![CDATA[I will present a full day tutorial as well as a session about efficient test automation of web appli]]></description>
<content:encoded><![CDATA[<p>I will present a <strong>full day tutorial</strong> as well as a <strong>session</strong> about efficient test automation of web applications in general and <a href="http://webtest.canoo.com">WebTest</a> in particular <strong>together with Dierk König</strong> at the next <a href="http://www.ix-konferenz.de/konf.php?konferenzid=20">iX Bessere Software! conference</a>, 19-21 November, in Düsseldorf (Germany).</p>
<p>We've already presented a WebTest tutorial at the previous edition of this conference last year in Frankfurt. This was really nice and I think that our tutorial was the most visited one. I hope that this year's edition will be as good as the last one.</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[WebTest versus Quick Test Professional: clear advantage for WebTest!]]></title>
<link>http://mguillem.wordpress.com/2007/05/21/webtest-versus-quick-test-professional-clear-advantage-for-webtest/</link>
<pubDate>Mon, 21 May 2007 12:58:02 +0000</pubDate>
<dc:creator>Marc Guillemot</dc:creator>
<guid>http://mguillem.sv.wordpress.com/2007/05/21/webtest-versus-quick-test-professional-clear-advantage-for-webtest/</guid>
<description><![CDATA[I&#8217;ve looked quickly at Mercury&#8217;s Quick Test Professional for one year and my impression ]]></description>
<content:encoded><![CDATA[<p>I've looked quickly at <a href="http://www.mercury.com/us/products/quality-center/functional-testing/quicktest-professional/" target="_blank">Mercury's Quick Test Professional</a> for one year and my impression was that it was a tool with features allowing it to get sold to managers but not for efficient day to day test automation usage.</p>
<p>I've discussed recently with a colleague having worked 2 years with QTP and now working since nearly one year with WebTest. I was interested to hear from someone with real QTP experience how the comparison would sound.</p>
<p><strong>He misses 2 QTP features in WebTest</strong>:</p>
<ul>
<li>the possibility to combine tests of web applications with test in other Window applications (like a test starting with a host connection and going on in a browser)</li>
<li>the possibility to "see" the responses during the test execution which helps beginners</li>
</ul>
<p><strong>but considers WebTest as really superior to build reliable, easy to maintain tests of web applications</strong> mostly because:</p>
<ul>
<li>no time lost for synchronisation configuration during the creation of tests</li>
<li>native support for XPath</li>
<li>easy to integrate in continuous integration</li>
<li>reports provide comprehensive on failed tests</li>
<li>easily extendible</li>
</ul>
<p>This mainly confirms my first appreciation: QTP is a tool for people that don't test!</p>
<p>Perhaps should we go away from Open Source and change WebTest's license to sell it, let's say, just half the price of QTP ;-)</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[How good is WebTest's JS support? Quite good in fact]]></title>
<link>http://mguillem.wordpress.com/2007/05/11/how-good-is-webtests-js-support-quite-good-in-fact/</link>
<pubDate>Fri, 11 May 2007 09:43:48 +0000</pubDate>
<dc:creator>Marc Guillemot</dc:creator>
<guid>http://mguillem.sv.wordpress.com/2007/05/11/how-good-is-webtests-js-support-quite-good-in-fact/</guid>
<description><![CDATA[A JS error with WebTest
During the JAX Ballroom at last JAX conference, I wanted to show to the pers]]></description>
<content:encoded><![CDATA[<p><strong>A JS error with WebTest</strong><br />
During the JAX Ballroom at last JAX conference, I wanted to show to the persons present at the Test Automation table how to get started with WebTest. To do that I chose to write some tests for the conference web site <a href="http://www.jax.de" target="_blank">http://www.jax.de</a>. Unfortunately WebTest got following error directly at invocation of the url:</p>
<p style="overflow:auto;width:464px;"><img src="http://mguillem.files.wordpress.com/2007/05/webtest-js-error.png" /></p>
<p>The error being located in a js file with "prototype" in its name, I thought that HtmlUnit still had problems with the prototype library although I was convinced that these had been fixed.</p>
<p><strong>Exactly the same with Firefox</strong><br />
On the next day I was motivated to look at it more attentively and was motivated to get it fixed for the presentation we would have on the day after. Indeed the JAX website could be a good example to show some of WebTest features as all attendees should know it. Therefore I started to examine HtmlUnit's execution of the javascript with a debugger. Unfortunately I couldn't find anything and first after a while I've had a look at the JavaScript console of my Firefox:</p>
<p style="overflow:auto;width:464px;"> <img src="http://mguillem.files.wordpress.com/2007/05/firefox-js-console.png" alt="Firefox Javascript console for www.jax.de" /></p>
<p><strong>WebTest was correct!</strong><br />
This was the explaination: WebTest had no problem and just reacted like Firefox providing precise information concerning the js error (including the line number and file name)!<br />
The faulty line was<br />
<code>for (var i = 0; i &#60; element.childNodes.length; i++) {</code><br />
and both Firefox and WebTest gave correct message (a bit different) concerning the problem.</p>
<p>It's possible to tell WebTest to ignore JS errors but it's not recommanded as it doesn't help producing high quality Web Sites and http://www.jax.de is an example of WebSite that didn't get tested correctly (or with a tool that doesn't help discovering such failures).</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[WebTest 2.5 released!]]></title>
<link>http://mguillem.wordpress.com/2007/05/05/webtest-25-released/</link>
<pubDate>Sat, 05 May 2007 13:05:30 +0000</pubDate>
<dc:creator>Marc Guillemot</dc:creator>
<guid>http://mguillem.sv.wordpress.com/2007/05/05/webtest-25-released/</guid>
<description><![CDATA[Height months after release 2.1 we finally released version 2.5 for 2 days. In fact due to WebTest l]]></description>
<content:encoded><![CDATA[<p>Height months after release 2.1 we finally released version 2.5 for 2 days. In fact due to WebTest long tradition of continuous integration, this is "just" build 1555 which has only minor improvements over build 1554, which...  Why a release in such a case? In fact 2 reasons: first many users prefer to use a release rather than some other build and second this is the occasion to communicate about our preferred web testing tool and to tell why it is the most efficient way to test a web app.</p>
<p>Why a jump from 2.1 to 2.5?</p>
<p>This was mainly motivated by the very important changes performed in WebTest internals which have only small visible effects (smaller memory consumption, seamless integration of macros or external target calls within &#60;steps&#62;...&#60;/steps&#62;).</p>
<p>What's special in this release?</p>
<p>Besides the internal changes, the main changes are probably:</p>
<ul>
<li> the upgrade to htmlunit 1.11 allowing a far better javascript support</li>
<li>the new selectWebClient step allowing to drive more than one web client within a single test (particularly useful when you have a scenario involving users with different roles that should interact)</li>
<li>the xpath attribute for the repeat step</li>
<li>the new ready to import webtest.xml build file</li>
<li>and of course diverse improvements in the reports</li>
</ul>
<p>What's next?</p>
<p>Difficult to say as changes often come when the need arise. Many AJAX related improvements will probably come like a way to synchronize some asynchronous calls to make them testable without sleep or waitFor... Look at the mailing list to stay up to date.</p>
]]></content:encoded>
</item>

</channel>
</rss>
