<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Altentee » Performance &#38; Test Automation Experts &#187; watir</title>
	<atom:link href="http://altentee.com/blogs/tag/watir/feed/" rel="self" type="application/rss+xml" />
	<link>http://altentee.com</link>
	<description>Performance and Test Automation Experts</description>
	<lastBuildDate>Fri, 04 Nov 2011 03:17:30 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.3</generator>
		<item>
		<title>Watirgrid and Gridinit on Watir Podcast</title>
		<link>http://altentee.com/blogs/2011/watirgrid-and-gridinit-on-watir-podcast/</link>
		<comments>http://altentee.com/blogs/2011/watirgrid-and-gridinit-on-watir-podcast/#comments</comments>
		<pubDate>Wed, 04 May 2011 21:53:56 +0000</pubDate>
		<dc:creator>Tim Koopmans</dc:creator>
				<category><![CDATA[Altentee]]></category>
		<category><![CDATA[Gridinit]]></category>
		<category><![CDATA[gridinit]]></category>
		<category><![CDATA[watir]]></category>
		<category><![CDATA[watirgrid]]></category>

		<guid isPermaLink="false">http://altentee.com/?p=1286</guid>
		<description><![CDATA[As the title implies, I get to spend 15 minutes talking about Watirgrid and Gridinit on the Watir podcast. This family of tools lets you easily distribute watir test cases onto a grid network, the latter being a commercial implementation on EC2 of the former. I&#8217;ll be posting more about Gridinit soon as we enter [...]]]></description>
			<content:encoded><![CDATA[<p>As the title implies, I get to spend 15 minutes talking about <a href="http://watirgrid.info">Watirgrid</a> and <a href="http://gridinit.com">Gridinit</a> on the <a href="http://watirpodcast.com/44-tim-koopmans-on-watirgrid-and-gridinit/">Watir podcast</a>.</p>
<p>This family of tools lets you easily distribute watir test cases onto a grid network, the latter being a commercial implementation on EC2 of the former. I&#8217;ll be posting more about Gridinit soon as we enter into our beta!</p>
<p>http://watirpodcast.com/44-tim-koopmans-on-watirgrid-and-gridinit/</p>
]]></content:encoded>
			<wfw:commentRss>http://altentee.com/blogs/2011/watirgrid-and-gridinit-on-watir-podcast/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Watir-Webdriver-Performance gem released</title>
		<link>http://altentee.com/blogs/2011/watir-webdriver-performance-gem-released/</link>
		<comments>http://altentee.com/blogs/2011/watir-webdriver-performance-gem-released/#comments</comments>
		<pubDate>Tue, 19 Apr 2011 04:09:59 +0000</pubDate>
		<dc:creator>Tim Koopmans</dc:creator>
				<category><![CDATA[Altentee]]></category>
		<category><![CDATA[watir]]></category>
		<category><![CDATA[webdriver]]></category>

		<guid isPermaLink="false">http://altentee.com/?p=1277</guid>
		<description><![CDATA[Today I added a simple watir-webdriver-performance gem whose purpose is to collect performance metrics specified for web applications to access timing information related to navigation and elements. User latency is an important quality benchmark for Web Applications. While JavaScript-based mechanisms can provide comprehensive instrumentation for user latency measurements within an application, in many cases, they [...]]]></description>
			<content:encoded><![CDATA[<p>Today I added a simple watir-webdriver-performance gem whose purpose is to collect performance metrics specified for web applications to access timing information related to navigation and elements.</p>
<blockquote><p>User latency is an important quality benchmark for Web Applications. While JavaScript-based mechanisms can provide comprehensive instrumentation for user latency measurements within an application, in many cases, they are unable to provide a complete end-to-end latency picture.</p>
<p>To address the need for complete information on user experience, this document introduces the <a href="http://w3c-test.org/webperf/specs/NavigationTiming/#nt-navigation-timing-interface">PerformanceTiming</a> interfaces. This interface allows JavaScript mechanisms to provide complete client-side latency measurements within applications. With the proposed interface, the previous example can be modified to measure a user&#8217;s perceived page load time.</p></blockquote>
<p><span id="more-1277"></span>You can read more about the PerformanceTiming <a href="http://w3c-test.org/webperf/specs/NavigationTiming/">specification here</a>. Essentially this gem collects all available metrics from the browser and summarises them in a format similar to the following diagram:</p>
<p style="text-align: center;"><img class="aligncenter" title="timing-overview" src="http://w3c-test.org/webperf/specs/NavigationTiming/timing-overview.png" alt="timing-overview" width="884" height="527" /></p>
<p>To use this gem simply install:</p>
<pre> gem install watir-webdriver-performance</pre>
<p>And use the browser.performance helper method to access the metrics.</p>
<pre>&gt;&gt; require 'watir-webdriver'
&gt;&gt; require 'watir-webdriver-performance'
&gt;&gt; b = Watir::Browser.new :chrome
&gt;&gt; b.goto "watirgrid.com"
=&gt; "https://github.com/90kts/watirgrid"
&gt;&gt; # End user response time was
?&gt; b.performance.summary[:response_time]/1000
=&gt; 8
&gt;&gt; #seconds ...
?&gt; # Time to first byte i.e. "server time" was
?&gt; b.performance.summary[:time_to_first_byte]
=&gt; 3341
&gt;&gt; #milliseconds ...
?&gt; # Summary timings available
{
    :summary => {
                   :redirect=>0,
                  :app_cache=>0,
                        :dns=>0,
            :tcp_connection=>982,
     :tcp_connection_secure=>721,
                  :request=>1222,
                    :response=>4,
           :dom_processing=>4293,
            :response_time=>7298,
       :time_to_first_byte=>2205,
        :time_to_last_byte=>2209
    },
    :navigation => {
                     :type => 0,
        :type_back_forward => 2,
           :redirect_count => 0,
            :type_reserved => 255,
            :type_navigate => 0,
              :type_reload => 1
    },
        :memory => {
        :total_js_heap_size => 0,
        :js_heap_size_limit => 0,
         :used_js_heap_size => 0
    },
        :timing => {
                   :domain_lookup_start => 1303180421599,
                        :load_event_end => 0,
                           :connect_end => 1303180421642,
                          :response_end => 1303180421853,
                           :dom_loading => 1303180421840,
                      :navigation_start => 0,
                          :redirect_end => 0,
                    :unload_event_start => 0,
               :secure_connection_start => 0,
                         :connect_start => 1303180421600,
          :dom_content_loaded_event_end => 1303180421934,
                     :domain_lookup_end => 1303180421600,
                       :dom_interactive => 1303180421934,
                      :load_event_start => 0,
                         :request_start => 1303180421642,
                        :response_start => 1303180421838,
                          :dom_complete => 0,
                           :fetch_start => 1303180421598,
        :dom_content_loaded_event_start => 1303180421934,
                        :redirect_start => 0,
                      :unload_event_end => 0
    }
  }</pre>
]]></content:encoded>
			<wfw:commentRss>http://altentee.com/blogs/2011/watir-webdriver-performance-gem-released/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>WatirGrid 1.0.6 released &#8230; can haz Selenium?</title>
		<link>http://altentee.com/blogs/2011/watirgrid-1-0-6-released-can-haz-selenium/</link>
		<comments>http://altentee.com/blogs/2011/watirgrid-1-0-6-released-can-haz-selenium/#comments</comments>
		<pubDate>Mon, 18 Apr 2011 20:54:42 +0000</pubDate>
		<dc:creator>Tim Koopmans</dc:creator>
				<category><![CDATA[Altentee]]></category>
		<category><![CDATA[grid]]></category>
		<category><![CDATA[seconf]]></category>
		<category><![CDATA[selenium]]></category>
		<category><![CDATA[watir]]></category>

		<guid isPermaLink="false">http://altentee.com/?p=1271</guid>
		<description><![CDATA[I&#8217;ve just released WatirGrid 1.0.6 which now includes support for Selenium WebDriver&#8230; So can I really call it WatirGrid anymore? Realistically the Watir and Selenium projects are headed in the same direction courtesy of WebDriver, so it makes sense to give Watir users (I like to think of them as Ruby users ) the option [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve just released WatirGrid 1.0.6 which now <strong>includes support for Selenium WebDriver</strong>&#8230; So can I really call it WatirGrid anymore? Realistically the Watir and Selenium projects are headed in the same direction courtesy of WebDriver, so it makes sense to give Watir users (I like to think of them as Ruby users <img src='http://altentee.com/blogs/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> ) the option to use Selenium where it best fits.</p>
<p><span id="more-1271"></span></p>
<p>To use Selenium via WatirGrid &#8230;</p>
<p>Get it</p>
<pre>&lt;sudo&gt; gem install watirgrid</pre>
<p>Start a <strong>controller</strong> &#8230;</p>
<pre>controller
I, INFO -- : Controller started on : druby://10.0.1.3:11235</pre>
<p>Start a <strong>provider</strong> with -b selenium &#8230;</p>
<pre>provider -b selenium
I, INFO -- : Provider started on   : druby://10.0.1.3:11236
I, INFO -- : Controller found on   : druby://10.0.1.3:12358
I, INFO -- : Provider registered   : druby://10.0.1.3:12358</pre>
<p>Execute your Selenium code in Ruby!</p>
<pre>&gt;&gt; require 'watirgrid'
=&gt; true
&gt;&gt; Watir::Grid.control(
&gt;&gt;   :controller_uri=&gt;'druby://10.0.1.3:11235') do |driver, id|
&gt;&gt;   driver.navigate.to "http://google.com"
&gt;&gt;   element = driver.find_element(:name, 'q')
&gt;&gt;   element.send_keys "Hello WebDriver!"
&gt;&gt;   element.submit
&gt;&gt;   driver.quit
&gt;&gt; end</pre>
<p>So what&#8217;s the difference between <strong>WatirGrid</strong> and <strong>SeleniumGrid</strong>?</p>
<p>They have radically different architectures in terms of establishing a Grid network. WatirGrid is built on distributed programming paradigms such as Linda and is a pure Ruby implementation. <a href="http://selenium-grid.seleniumhq.org/run_the_demo.html">SeleniumGrid</a> is perhaps a more heavy weight Java implementation (you can still write your tests in most languages) and packs a lot more features for grid control into its design. Both have their own merits, you be the judge!</p>
<p>Next steps for WatirGrid is to look at implementing some type of Capybara adapter, since this tool (and WebRat) appear to dominate the Ruby test automation space. I&#8217;m also working on Gridinit, a commercial implementation on EC2 which is available for beta testing. <a href="http://gridinit.com">Sign up</a> and give it a try!</p>
]]></content:encoded>
			<wfw:commentRss>http://altentee.com/blogs/2011/watirgrid-1-0-6-released-can-haz-selenium/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Watir Day and Selenium Conference .. w00t</title>
		<link>http://altentee.com/blogs/2011/watir-day-and-selenium-conference-w00t/</link>
		<comments>http://altentee.com/blogs/2011/watir-day-and-selenium-conference-w00t/#comments</comments>
		<pubDate>Fri, 08 Apr 2011 02:34:30 +0000</pubDate>
		<dc:creator>Tim Koopmans</dc:creator>
				<category><![CDATA[Altentee]]></category>
		<category><![CDATA[selenium]]></category>
		<category><![CDATA[watir]]></category>

		<guid isPermaLink="false">http://altentee.com/?p=1269</guid>
		<description><![CDATA[Wow, What an awesome experience. Despite spending most of it jet-lagged, travelling to San Francisco was such a great experience for me, and helped reaffirm just how strong the Watir and Selenium community is. Without dropping names, some of the experiences I got to enjoy were: Sharing late night beers and early morning burgers with [...]]]></description>
			<content:encoded><![CDATA[<p>Wow,</p>
<p>What an awesome experience. Despite spending most of it jet-lagged, travelling to San Francisco was such a great experience for me, and helped reaffirm just how strong the Watir and Selenium community is. Without dropping names, some of the experiences I got to enjoy were:</p>
<ol>
<li>Sharing late night beers and early morning burgers with the <a href="http://twitter.com/#!/charley_baker">leader of Watir development</a></li>
<li><a href="http://twitter.com/#!/charley_baker"></a>Pair coding on watir-webdriver performance extensions with the <a href="https://github.com/jarib">smartest kid in Norway</a></li>
<li>Finally meeting perhaps the <a href="http://watirmelon.com">leader of Australian based Watir testing</a></li>
<li><a href="http://watirmelon.com"></a>Eating chinese with the <a href="http://pettichord.com/">god-father of Watir</a> and hearing some great anecdotes on the origins of Selenium</li>
<li>Shown the light on page objects, opera and superbad with a <a href="http://www.slideshare.net/testrus">Polish born American</a></li>
<li>Hearing about the inner workings of &#8216;that other browser&#8217; from a <a href="http://home.e-tjenesten.org/~ato/">genius at Opera</a></li>
<li>Learning more about the Watir community and getting a t<a href="http://zeljkofilipin.com/">hirst for Croatian micro breweries</a></li>
<li>Meeting my <a href="http://lightbody.net/blog/">role model in person</a> and perhaps feeling a bit shied by his awesomeness!</li>
<li>Getting <a href="http://www.linkedin.com/in/bramhaghosh">some great advice</a> and tips for my own startup</li>
<li>Being awed and perhaps jealous (in a slightly convict vs. colonial way) of the <a href="http://www.google.com.au/search?q=steel+cage+knife+fight">greatest mind behind webdriver</a></li>
</ol>
<p>I met many other people whilst there, did tons of late night coding and got to experience public speaking for the first time. A big thank you to all the organisers of #watirday and #seconf. Looking forward to the next!</p>
]]></content:encoded>
			<wfw:commentRss>http://altentee.com/blogs/2011/watir-day-and-selenium-conference-w00t/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Watir Day, WatirGrid and the GRIDinit.iative!</title>
		<link>http://altentee.com/blogs/2011/watir-day-watirgrid-and-the-gridinit-iative/</link>
		<comments>http://altentee.com/blogs/2011/watir-day-watirgrid-and-the-gridinit-iative/#comments</comments>
		<pubDate>Tue, 05 Apr 2011 08:54:24 +0000</pubDate>
		<dc:creator>Tim Koopmans</dc:creator>
				<category><![CDATA[Altentee]]></category>
		<category><![CDATA[seconf]]></category>
		<category><![CDATA[watir]]></category>
		<category><![CDATA[watirday]]></category>
		<category><![CDATA[watirgrid]]></category>

		<guid isPermaLink="false">http://altentee.com/?p=1249</guid>
		<description><![CDATA[The last few days have been busy for me as I had the privilege to present WatirGrid at the Watirday conference in San Francisco. You can catch the slide deck here in case you couldn&#8217;t make it. WatirGrid lets you test Watir in parallel, why not give it a shot yourself? &#60;sudo&#62; gem install watirgrid [...]]]></description>
			<content:encoded><![CDATA[<p>The last few days have been busy for me as I had the privilege to present <strong><a href="http://watirgrid.com">WatirGrid</a></strong> at the Watirday conference in San Francisco. You can catch the <strong><a href="http://www.slideshare.net/90kts/watirgrid">slide deck here</a></strong> in case you couldn&#8217;t make it. WatirGrid lets you test Watir in parallel, why not give it a shot yourself?</p>
<pre>&lt;sudo&gt; gem install watirgrid</pre>
<p>I&#8217;m also attending the Selenium Conference which is giving me lots of great ideas and inspiration in the performance &amp; automation space. It&#8217;s great to see a greater shift to open source testing tools and some may argue that QTP and the like perhaps <a href="http://paulhammant.com/blog/die-qtp-die.html"><strong>could die a graceful death</strong></a>. It&#8217;s also been fun meeting <strong><a href="http://pettichord.com/">the god-father</a></strong> of Selenium and confirming that his choice of product-name really was intended as an antidote to Mercury!<br />
<span id="more-1249"></span><br />
Recently I decided to lighten the load with my commercial contract work and contribute / commit more to the open source space. Part of that effort involves further strengthening and stabilising the WatirGrid project, which I&#8217;ll definitely keep open source. I&#8217;d also like to get more into watir-webdriver as I see this as the future for the Watir project.</p>
<p>The other part (half?) of my time involves getting my own startup <strong><a href="http://gridinit.com">GRIDinit.com</a> </strong>up and running. The GRID is a commercial implementation of WatirGrid, which simplifies management of a GRID network across different cloud providers. Basically it&#8217;s a RESTful API for WatirGrid. I&#8217;m presently running a private alpha on EC2 with 50 instances but I hope to open the doors for a public beta with both International (US, EU, Tokyo and Singapore) and Domestic (Australia) cloud providers in May/June! If you&#8217;d like to participate send an email to <a href="mailto:support@gridinit.com"><strong>support@gridinit.com</strong></a></p>
<p><strong><a rel="attachment wp-att-1250" href="http://altentee.com/blogs/2011/watir-day-watirgrid-and-the-gridinit-iative/screen-shot-2011-04-05-at-1-46-32-am/"><img class="alignnone size-full wp-image-1250" title="GRIDinit Alpha" src="http://altentee.com/blogs/wp-content/uploads/Screen-shot-2011-04-05-at-1.46.32-AM.png" alt="" width="288" height="312" /></a></strong></p>
<p>Having a commercial implementation will help pay the bills and let me channel necessary improvements back into WatirGrid itself. If you&#8217;re keen you can keep track of the pre-release gems via:</p>
<pre>&lt;sudo&gt; gem install watirgrid --pre</pre>
<p>A recent improvement is the addition of a GRID control method, to take the somewhat confusing (for first timers) Thread calls out of the picture. For example:</p>
<p>1. Start a controller (from a command line)</p>
<pre>controller</pre>
<p>2. Start your providers (from a command line) on remote machines (typically same LAN as the controller). It supports all major browsers/platforms including webdriver. I hope to add Opera soon as well.</p>
<pre>provider -b webdriver|safari|ie|firefox</pre>
<p>3. Control your GRID from your code (the pre-release let&#8217;s us contact our controller direct via the controller_uri, no need to broadcast via UDP anymore)</p>
<pre>Watir::Grid.control({
  :controller_uri =&gt; 'druby://127.0.0.1:12357'}) do |browser, id|
  3.times do |iteration| # because we love to iterate right!?
    browser.goto "http://your.awesome.test.environment"
    sleep 2
  end
  browser.close
end
=&gt;
DRb server started on : druby://127.0.0.1:61325
Controller found on   : druby://127.0.0.1:12357
Found 2 tuples.
Grid size                         : 2
Grid rampup                       : 0.5 secs
Browser 1#2171119800 start         : Tue Apr 05 01:39:03 -0700 2011
Browser 1#2171119800 architecture  : universal-darwin10.0
Browser 1#2171119800 type          : webdriver
Browser 1#2171119800 hostname      : air.local
Browser 2#2172047580 start         : Tue Apr 05 01:39:04 -0700 2011
Browser 2#2172047580 architecture  : universal-darwin10.0
Browser 2#2172047580 type          : webdriver
Browser 2#2172047580 hostname      : air.local
Browser 1#2171119800 stop          : Tue Apr 05 01:39:18 -0700 2011
Browser 1#2171119800 elapsed       : 15 secs
Browser 2#2172047580 stop          : Tue Apr 05 01:39:20 -0700 2011
Browser 2#2172047580 elapsed       : 16 secs</pre>
<p>In other words, I&#8217;ll be abstracting a lot of the WatirGrid&#8217;isms and making it easier for you to wrap in your own test frameworks be they rspec, cukes, plain old ruby or whatever. This is my philosophy when designing GRIDinit. I won&#8217;t be dictating how you should run your tests or what you should monitor, I&#8217;ll leave that to your control with as few lines as possible required from GRIDinit. Good times ahead!</p>
<p>Still a couple more days left at Selenium Conference, so if you&#8217;d like to catch up send us a hoy on Twitter @90kts.</p>
<p>Cheers,<br />
Tim</p>
]]></content:encoded>
			<wfw:commentRss>http://altentee.com/blogs/2011/watir-day-watirgrid-and-the-gridinit-iative/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Watirgrid Handshake</title>
		<link>http://altentee.com/blogs/2011/watirgrid-handshake/</link>
		<comments>http://altentee.com/blogs/2011/watirgrid-handshake/#comments</comments>
		<pubDate>Mon, 17 Jan 2011 08:25:19 +0000</pubDate>
		<dc:creator>Tim Koopmans</dc:creator>
				<category><![CDATA[Altentee]]></category>
		<category><![CDATA[watir]]></category>

		<guid isPermaLink="false">http://altentee.com/blogs/?p=1167</guid>
		<description><![CDATA[For some time now I&#8217;ve been working in the background on watirgrid which allows for distributed testing across a grid network using Watir. The engine (gem) itself is open source and you can get it as follows: gem install watirgrid One of the questions I often get asked (via email) are what ports / network [...]]]></description>
			<content:encoded><![CDATA[<p>For some time now I&#8217;ve been working in the background on <a href="http://altentee.com/blogs/blogs/2009/going-parallel-distributed-testing-across-a-grid-network-using-watir/">watirgrid</a> which allows for distributed testing across a grid network using  Watir. The engine (gem) itself is open source and you can get it as  follows:</p>
<div>
<div>
<pre>gem install watirgrid</pre>
</div>
</div>
<p>One of the questions I often get asked (via email) are what ports / network communications are required by Watirgrid, especially in the setup and establishment of a grid. Watirgrid uses both UDP and TCP to establish comms between the providers and a controller as such. Consider the following bounce diagram.</p>
<p><a rel="attachment wp-att-1178" href="http://altentee.com/blogs/2011/watirgrid-handshake/watirgrid_handshake/"><img class="alignnone size-full wp-image-1178" title="watirgrid_handshake" src="http://altentee.com/blogs/wp-content/uploads/watirgrid_handshake.jpg" alt="" width="613" height="237" /></a></p>
<ol>
<li>First we set up a controller listening on a public WAN IP of 150.133.123.51. We tell the controller that the ring server should listen on this IP with the -h flag. We also tell the controller to start its DRb server on the same IP with the -H flag. If we don&#8217;t specify a port for the ring server or the DRb server (using -r and -d flags) then the controller will use the defaults; 12358 and 11235 respectively.</li>
<li>Next we start up a provider and point it to the Ring server IP of 150.133.123.51 with the -h flag. We also tell the provider to start its DRb server on its own public IP with the -H flag, which in this case is 150.133.123.8</li>
<li>When the provider starts in the previous step, it will broadcast using UDP to all hosts on the controller&#8217;s subnet, on port 12358 asking if there are any Ring servers available.</li>
<li>The controller will subsequently respond, letting the provider know which port its own DRb server can be be contacted on using TCP. In this case it will send a TCP packet to the provider&#8217;s port 11236 after which the provider will respond back via TCP to the controller&#8217;s port of 11235.</li>
</ol>
<p>Essentially the ports you need open on the controller, are UDP (default 12358) which is the Ring server and TCP (default 11235) which is the controller&#8217;s DRb server. The ports you need open on the provider are TCP (default 11236) which is the provider&#8217;s DRb server.</p>
<p>All communications between controller and provider are first marshalled via the Ring server (using UDP) and then directed between controller and provider(s) via the DRb servers (using TCP). If you have established a grid out in the wild, or on your own intranet, you should be using the external WAN or LAN IP of your host machines (not local / loopback addresses).</p>
<p>I&#8217;ll be posting more information on using watirgrid, including how to execute tests via different testing frameworks such as cucumber in the near future. I&#8217;ll also make an effort to monitor watir-general for any questions related to watirgrid.</p>
<p>Happy bot&#8217;netting!</p>
]]></content:encoded>
			<wfw:commentRss>http://altentee.com/blogs/2011/watirgrid-handshake/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A year in review and a consolidated approach</title>
		<link>http://altentee.com/blogs/2010/a-year-in-review-and-a-consolidated-approach/</link>
		<comments>http://altentee.com/blogs/2010/a-year-in-review-and-a-consolidated-approach/#comments</comments>
		<pubDate>Thu, 30 Dec 2010 21:53:02 +0000</pubDate>
		<dc:creator>Tim Koopmans</dc:creator>
				<category><![CDATA[Altentee]]></category>
		<category><![CDATA[jmeter]]></category>
		<category><![CDATA[loadrunner]]></category>
		<category><![CDATA[management]]></category>
		<category><![CDATA[monitoring]]></category>
		<category><![CDATA[testing]]></category>
		<category><![CDATA[watir]]></category>

		<guid isPermaLink="false">http://altentee.com/blogs/?p=1144</guid>
		<description><![CDATA[Wow, wasn&#8217;t that long ago when I was promising things that were harder, better, faster and stronger. I think I got part of the way there. The core reason I set up Altentee was to provide reliable (and potentially cheaper) alternatives to traditional licensed performance testing tool sets. There&#8217;s no doubt Altentee can test at [...]]]></description>
			<content:encoded><![CDATA[<p>Wow, wasn&#8217;t that long ago when I was promising things that were <a href="http://altentee.com/blogs/blogs/2010/harder-better-faster-stronger-and-cheaper/">harder, better, faster and stronger</a>. I think I got part of the way there. The core reason I set up Altentee was to provide reliable (and potentially cheaper) alternatives to traditional licensed performance testing tool sets. There&#8217;s no doubt Altentee can test at the limits of your typical web app using tools that cost zilch. The bigger challenge I&#8217;ve found this year is convincing potential clients that they really don&#8217;t need to spend that much. I&#8217;ve even offered a <a href="http://altentee.com">free load test on our homepage</a> to help illustrate this point.</p>
<p>We were lucky to be selected by the development team at <a href="http://www.cordelta.com/">Cordelta</a> to help them automate and performance test a high profile public website called <a href="http://www.myhospitals.gov.au/">MyHospitals</a>. We were able to test millions of hits per hour from domestic and international locations in a wide variety of load scenarios. The success of this approach was underpinned by the following:</p>
<ol>
<li>An open minded project / development team not coupled to a &#8216;must-have-most-expensive-toolset-to-do-job&#8217; mentality</li>
<li>An open minded performance test analyst (me!) who believes Excel really is the grandpa of charting, R is the grandma of stats, Sparklines are the only way to present time series data to management, ANY tool can simulate load via HTTP/S and that there is no real distinction between good software testers or developers (only hard work separates the best from the worst).</li>
<li>That 2010 come-no-doubt 2011 buzz word&#8230; Cloud</li>
</ol>
<p>As I sit here pluggin&#8217; our alternative approach at Altentee, I can see the rise of other more <a href="http://browsermob.com">successful</a> <a href="http://loadstorm.com">punters</a> taking on the <a href="http://loadstorm.com/2010/price-right-loadrunner">big kids</a>. I sit and [continue to] chuckle at the reaction to LR pricing and LR zealots who will fall on their swords over LR itself. I have come to realise one thing though, it is not about the tool, or even the alternate tool like perhaps I first thought. It is more about the <span style="color: #008000;"><strong>freedom of choice</strong></span>.</p>
<p>To tackle MyHospitals I was free to choose and implement the following tools:</p>
<ol>
<li><a href="https://github.com/90kts/watirgrid">WatirGrid</a> to orchestrate a small flotilla of IE and FireFox based browsers based on <a href="http://watir.com">Watir</a></li>
<li><a href="http://jakarta.apache.org/jmeter/index.html">JMeter</a> to add more at the protocol level of performance testing</li>
<li><a href="http://www.hpl.hp.com/research/linux/httperf/">httperf</a> to do some basic benchmarking, similar to my front page</li>
<li><a href="https://github.com/90kts/numbrcrunchr">numbrcrunchr</a> to pull together system metrics and make for easier analysis</li>
<li>A <a href="https://www.zettagrid.com/index.php/about-news/157-altentee-benchmark-comparisons-between-australian-cloud-providers">variety of Australian cloud providers </a>and of course <a href="http://aws.amazon.com/ec2/pricing/">Amazon EC2</a> to host the test environment</li>
</ol>
<p>It has been a great year. I&#8217;m not entirely free of the commercial chains just yet and am still needing the LR type work to prop up this approach, but I hope 2011 brings about some fresh thinking in performance and test automation with hopefully me somewhere amidst that space.</p>
]]></content:encoded>
			<wfw:commentRss>http://altentee.com/blogs/2010/a-year-in-review-and-a-consolidated-approach/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Watirgrid Support for Watir-Webdriver</title>
		<link>http://altentee.com/blogs/2010/watirgrid-support-for-watir-webdriver/</link>
		<comments>http://altentee.com/blogs/2010/watirgrid-support-for-watir-webdriver/#comments</comments>
		<pubDate>Sun, 10 Oct 2010 23:11:40 +0000</pubDate>
		<dc:creator>Tim Koopmans</dc:creator>
				<category><![CDATA[Altentee]]></category>
		<category><![CDATA[watir]]></category>
		<category><![CDATA[webdriver]]></category>

		<guid isPermaLink="false">http://altentee.com/?p=937</guid>
		<description><![CDATA[With the growing popularity of watir-webdriver I&#8217;ve decided to uplift watirgrid to support this newer approach. For installation instructions of Watir on top of WebDriver there is a good post on the topic by Željko Filipin. There&#8217;s also some musings on the &#8216;why&#8217; of watir-webdriver at Alister Scott&#8217;s blog, WatirMelon. If you want to get [...]]]></description>
			<content:encoded><![CDATA[<p>With the growing popularity of watir-webdriver I&#8217;ve decided to uplift watirgrid to support this newer approach. For installation instructions of Watir on top of WebDriver <a href="http://zeljkofilipin.com/2010/01/12/watir-on-webdriver/">there is a good post</a> on the topic by Željko Filipin. There&#8217;s also some musings on the &#8216;why&#8217; of watir-webdriver at Alister Scott&#8217;s blog, <a href="http://watirmelon.com/2010/04/10/watir-selenium-webdriver/">WatirMelon</a>.</p>
<p>If you want to get on with the <a href="http://altentee.com/2009/going-parallel-distributed-testing-across-a-grid-network-using-watir/">business of parallel testing across a grid network</a> with Watir or Watir-WebDriver then have a look at the following code:</p>
<p>Firstly, update your gem installation if it&#8217;s been a while <img src='http://altentee.com/blogs/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p><code><sudo> gem update --system</code></p>
<p>Now install the prerelease version of Watirgrid</p>
<p><code><sudo> gem install watirgrid --prerelease</code></p>
<p>At this stage I haven&#8217;t updated my gemspec with dependencies, so you&#8217;ll also need uuid</p>
<p><code><sudo> gem install uuid</code></p>
<p>To test a simple 1 controller / 1 provider scenario using IE</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
</pre></td><td class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'rubygems'</span>
<span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'watirgrid'</span>
&nbsp;
<span style="color:#008000; font-style:italic;"># setup a controller on port 12351 for your new grid</span>
controller = Controller.<span style="color:#9900CC;">new</span><span style="color:#006600; font-weight:bold;">&#40;</span>
        <span style="color:#ff3333; font-weight:bold;">:ring_server_port</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006666;">12351</span>,
  <span style="color:#ff3333; font-weight:bold;">:loglevel</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#6666ff; font-weight:bold;">Logger::ERROR</span><span style="color:#006600; font-weight:bold;">&#41;</span>
controller.<span style="color:#9900CC;">start</span>
&nbsp;
<span style="color:#008000; font-style:italic;"># add a provider to your grid</span>
<span style="color:#008000; font-style:italic;"># :browser_type =&gt; 'webdriver' if using webdriver or</span>
<span style="color:#008000; font-style:italic;"># :browser_type =&gt; 'ie' if using watir...</span>
provider = Provider.<span style="color:#9900CC;">new</span><span style="color:#006600; font-weight:bold;">&#40;</span>
        <span style="color:#ff3333; font-weight:bold;">:ring_server_port</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006666;">12351</span>,
  <span style="color:#ff3333; font-weight:bold;">:loglevel</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#6666ff; font-weight:bold;">Logger::ERROR</span>, <span style="color:#ff3333; font-weight:bold;">:browser_type</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">'webdriver'</span><span style="color:#006600; font-weight:bold;">&#41;</span>
provider.<span style="color:#9900CC;">start</span>
&nbsp;
<span style="color:#008000; font-style:italic;"># connect to the grid and take all providers from it (this time only one)</span>
grid = <span style="color:#6666ff; font-weight:bold;">Watir::Grid</span>.<span style="color:#9900CC;">new</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:ring_server_port</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006666;">12351</span>,
    <span style="color:#ff3333; font-weight:bold;">:ring_server_host</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">'127.0.0.1'</span><span style="color:#006600; font-weight:bold;">&#41;</span>
&nbsp;
grid.<span style="color:#9900CC;">start</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:take_all</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#0000FF; font-weight:bold;">true</span><span style="color:#006600; font-weight:bold;">&#41;</span>
&nbsp;
<span style="color:#008000; font-style:italic;"># for each provider on the grid, launch a new thread to start multiple browsers</span>
threads = <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006600; font-weight:bold;">&#93;</span>
grid.<span style="color:#9900CC;">browsers</span>.<span style="color:#9900CC;">each</span> <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>browser<span style="color:#006600; font-weight:bold;">|</span>
        threads <span style="color:#006600; font-weight:bold;">&lt;&lt;</span> <span style="color:#CC00FF; font-weight:bold;">Thread</span>.<span style="color:#9900CC;">new</span> <span style="color:#9966CC; font-weight:bold;">do</span>
                <span style="color:#CC0066; font-weight:bold;">p</span> browser<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:hostname</span><span style="color:#006600; font-weight:bold;">&#93;</span>
                <span style="color:#CC0066; font-weight:bold;">p</span> browser<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:architecture</span><span style="color:#006600; font-weight:bold;">&#93;</span>
                <span style="color:#CC0066; font-weight:bold;">p</span> browser<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:browser_type</span><span style="color:#006600; font-weight:bold;">&#93;</span>
                <span style="color:#008000; font-style:italic;"># in this case we are starting a new IE browser</span>
                b = browser<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:object</span><span style="color:#006600; font-weight:bold;">&#93;</span>.<span style="color:#9900CC;">new_browser</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:ie</span><span style="color:#006600; font-weight:bold;">&#41;</span>
                b.<span style="color:#9900CC;">goto</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;http://www.google.com&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
                b.<span style="color:#9900CC;">text_field</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:name</span>, <span style="color:#996600;">'q'</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color:#9900CC;">set</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;watirgrid&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
                b.<span style="color:#9900CC;">button</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:name</span>, <span style="color:#996600;">&quot;btnI&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color:#9900CC;">click</span>
        <span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#9966CC; font-weight:bold;">end</span>
threads.<span style="color:#9900CC;">each</span> <span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#006600; font-weight:bold;">|</span>thread<span style="color:#006600; font-weight:bold;">|</span> thread.<span style="color:#9900CC;">join</span><span style="color:#006600; font-weight:bold;">&#125;</span></pre></td></tr></table></div>

<p>There&#8217;s some <a href="http://github.com/90kts/watirgrid/blob/master/spec/webdriver_spec.rb">more examples of using watirgrid with watir-webdriver here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://altentee.com/blogs/2010/watirgrid-support-for-watir-webdriver/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Authenticating Proxy with Webdriver and Watir</title>
		<link>http://altentee.com/blogs/2010/authenticating-proxy-with-webdriver-and-watir/</link>
		<comments>http://altentee.com/blogs/2010/authenticating-proxy-with-webdriver-and-watir/#comments</comments>
		<pubDate>Sat, 12 Jun 2010 00:31:43 +0000</pubDate>
		<dc:creator>Tim Koopmans</dc:creator>
				<category><![CDATA[Altentee]]></category>
		<category><![CDATA[watir]]></category>
		<category><![CDATA[webdriver]]></category>

		<guid isPermaLink="false">http://altentee.com/?p=927</guid>
		<description><![CDATA[A question came up on stack overflow about how to route Watir through an authenticating proxy within your script. The problem here is that you cannot auto authenticate to a proxy server using Chrome &#8211;proxy-server=my.proxy.com:3128 or using Firefox. Chrome will always prompt you for a user name and password on an authenticating proxy when it [...]]]></description>
			<content:encoded><![CDATA[<p>A question came up on stack overflow about how to <a href="http://stackoverflow.com/questions/2970777/how-do-i-route-watir-through-a-proxy-pragmatically">route Watir through an authenticating proxy within your script</a>.</p>
<p>The problem here is that you cannot auto authenticate to a proxy server using Chrome &#8211;proxy-server=my.proxy.com:3128 or using Firefox.</p>
<p>Chrome will always prompt you for a user name and password on an authenticating proxy when it starts up (via Webdriver or manually). Firefox will not prompt (when launched via WebDriver) and will silently fail.</p>
<p>I *almost* got this to work by modifying headers on the fly with a Firefox add on (<a href="https://addons.mozilla.org/en-US/firefox/addon/967/">Modify Headers</a>). Basic authentication is just base-64 encoded so you can force each request to authorize itself by modifying the Proxy-Authorization request header e.g.:<br />
<code>Proxy-Authorization	Basic asHJksaKHs87akhkjah7</code></p>
<p>However whilst this works for manually launched instances of Firefox, Webdriver launched instances would complain that the add on is not compatible with FF3.6.3 and so once again would fail. The other problem with this approach is that I couldn&#8217;t find a similar plugin for Chrome.</p>
<p>Eventually I gave in and went with a slightly more complicated workaround. That is, chaining an authenticated proxy (with squid) running on localhost with a cache_peer relationship to the authenticated proxy running out there  on the &#8216;tubes&#8217;. I had thought about using Webrick as a proxy (<a href="http://90kts.com/2008/httpwatch-a-free-alternative-using-ruby/">as per previous posts</a>) but lack of SSL support is a gotcha for me. Squid seemed most appropriate in this case:</p>
<p>To install squid from source:<br />
<code>cd /opt/src<br />
sudo curl -O http://www.squid-cache.org/Versions/v2/2.7/squid-2.7.STABLE9.tar.gz<br />
sudo tar xjf squid-2.7.STABLE9.tar.gz<br />
cd squid-2.7.STABLE9<br />
# I wanted SSL support for this<br />
./configure --enable-ssl<br />
make<br />
sudo make install</code></p>
<p>Edit the squid.conf (location is normally /etc/squid/squid.conf on linux):<br />
<code>sudo vim /usr/local/squid/etc/squid.conf</code></p>
<p><code># Don't want to run squid as root<br />
#  TAG: cache_effective_user<br />
cache_effective_user nobody<br />
#  TAG: cache_effective_group<br />
cache_effective_group wheel<br />
# Point this proxy to a peer cache, and provide the logon credentials<br />
#  TAG: cache_peer<br />
cache_peer proxy.altentee.com parent 3128 0 default no-query login=username:mypassword<br />
never_direct allow all<br />
# Allow access from my local private network<br />
#  TAG: cache_peer<br />
acl localnet src 10.0.0.0/0</code></p>
<p>Save changes and change ownership as appropriate:<br />
<code>sudo chown -R nobody:wheel /usr/local/squid</code></p>
<p>Initialize the cache and startup squid:<br />
<code>sudo /usr/local/squid/sbin/squid -z<br />
sudo /usr/local/squid/sbin/squid -D</code></p>
<p>Now you can configure firefox (using -ProfileManager) or chrome (using &#8211;proxy-server=127.0.0.1) to point to your local proxy server. This proxy will then authenticate on your behalf and peer all requests via the original parent.</p>
<p>A little long winded but achieves the outcome. Added side benefit is you&#8217;ve now got a local proxy (with access logs) that you can start doing interesting things with in your automation / performance tests like modifying headers and so forth.</p>
<p>Hope this helps!</p>
]]></content:encoded>
			<wfw:commentRss>http://altentee.com/blogs/2010/authenticating-proxy-with-webdriver-and-watir/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Going Parallel &#8230;  distributed testing across a grid network using Watir</title>
		<link>http://altentee.com/blogs/2009/going-parallel-distributed-testing-across-a-grid-network-using-watir/</link>
		<comments>http://altentee.com/blogs/2009/going-parallel-distributed-testing-across-a-grid-network-using-watir/#comments</comments>
		<pubDate>Sun, 20 Dec 2009 20:28:08 +0000</pubDate>
		<dc:creator>Tim Koopmans</dc:creator>
				<category><![CDATA[Altentee]]></category>
		<category><![CDATA[watir]]></category>

		<guid isPermaLink="false">http://90kts.com/blog/2009/going-parallel-distributed-testing-across-a-grid-network-using-watir/</guid>
		<description><![CDATA[In my last post I made a tongue-in-cheek observation that load testing really doesn&#8217;t work by today&#8217;s perceived standards for web automation and testing. Part of my grievance for that was based on frustration in dealing with different load testing platforms. Not frustration born out of incompetence, more the frustration born out writing tests for [...]]]></description>
			<content:encoded><![CDATA[<p>In my last <a href="http://90kts.com/blog/2009/why-load-testing-does-not-work-for-the-web-datetoday-36/"><strong>post</strong></a> I made a tongue-in-cheek observation that load testing really doesn&#8217;t work by today&#8217;s perceived standards for web automation and testing.</p>
<p>Part of my grievance for that was based on frustration in dealing with different load testing platforms. Not frustration born out of incompetence, more the frustration born out writing tests for increasingly complex browsers with an antiquated toolset.</p>
<p>That&#8217;s not to say that protocol based application load testing (or the languages they sit on) aren&#8217;t powerful in their own right. LoadRunner, JMeter et al. has their place in the load testing world. But I would like to relegate them to the background as useful, sometimes expensive tools to spin up the wheels so to speak. Nothing like a bit of JMeter infused fun to get the wheels smoking on your system under test. But for the real part,  measuring user experience on the web platform?<br />
<span id="more-292"></span><br />
<em>If you can&#8217;t wait to get started then I&#8217;d like to introduce <a href="http://browsermob.com"><strong>BrowserMob.com</strong></a>. Been around since mid 2008 and offers real browser testing using Selenium scripts distributed across a grid of EC2 computers. Reasonably priced, well documented and supported by the legendary Patrick Lightbody, founder of things like OpenQA and Selenium Remote Control.</em></p>
<p>But hang on a second, you don&#8217;t like Selenium right? Have zero budget? <strong>Love <a href="http://watir.com">Watir</a>?</strong> Well I&#8217;m working on a similar construct aptly called WatirGrid which also allows for distributed testing across a grid network using Watir. The engine (gem) itself is open source and you can get it as follows:</p>

<div class="wp_syntax"><div class="code"><pre class="shell" style="font-family:monospace;">gem install watirgrid</pre></div></div>

<p>If you&#8217;d like to contribute please follow the <a href="http://github.com/90kts/watirgrid"><strong>WatirGrid</strong></a> project on github.</p>
<p><strong>The Basics</strong><br />
WatirGrid is built on Rinda which implements the Linda distributed computing paradigm in Ruby. According to Wikipedia: â€œLinda is a model of coordination and communication among several parallel processes operating upon objects stored in and retrieved from shared, virtual, associative memory.â€</p>
<p>In other words, WatirGrid allows multiple parallel processes to provide remote Watir objects in the form of tuple spaces across a grid network. This grid network is controlled by a ring server and looks a bit like this:</p>
<p><a href="http://altentee.com/blogs/wp-content/uploads/2009/12/watirgrid_overview.png"><img class="alignnone size-full wp-image-543" title="watirgrid_overview" src="http://altentee.com/blogs/wp-content/uploads/2009/12/watirgrid_overview.png" alt="" width="788" height="507" /></a></p>
<p><strong>Key Terminology</strong><br />
The <strong>controller</strong> implements a repository of tuples (tuple space) that can be accessed concurrently. The controller hosts the ring server which advertises these tuples across a grid network. Typically you will host one controller on a central machine.</p>
<p>The <strong>providers</strong> make remote Watir objects available to the tuple space hosted by the ring server. Typically you will host one or many providers on your grid network, for example, each PC may become a single provider of a Watir tuple in the form of an Internet Explorer, Firefox or Safari browser object.</p>
<p><strong>Simple Example</strong><br />
Pick a server to host the <em>controller</em> for the ring server and execute the following:</p>

<div class="wp_syntax"><div class="code"><pre class="shell" style="font-family:monospace;">  $ controller</pre></div></div>

<p>This should find your external facing IP and start the corresponding DRb and Ring Servers:</p>

<div class="wp_syntax"><div class="code"><pre class="shell" style="font-family:monospace;">  DRb server started on : druby://143.238.105.61:11235
  Ring server started on: druby://143.238.105.61:12358</pre></div></div>

<p>On each client PC, host the <em>provider</em> for the distributed (DRb) Watir objects</p>

<div class="wp_syntax"><div class="code"><pre class="shell" style="font-family:monospace;">  $  provider</pre></div></div>

<p>This should find the recently started Ring Server and register a tuple for the Watir object:</p>

<div class="wp_syntax"><div class="code"><pre class="shell" style="font-family:monospace;">  DRb server started on : druby://143.238.105.61:11236
  Ring server found on  : druby://143.238.105.61:12358
  New tuple registered  : druby://143.238.105.61:12358</pre></div></div>

<p>You will now be able to execute commands across remote browsers on your grid network.<br />
e.g.</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">  grid = <span style="color:#6666ff; font-weight:bold;">Watir::Grid</span>.<span style="color:#9900CC;">new</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:ring_server_port</span> =<span style="color:#006600; font-weight:bold;">&amp;</span>gt; <span style="color:#006666;">12358</span><span style="color:#006600; font-weight:bold;">&#41;</span>
  grid.<span style="color:#9900CC;">start</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:quantity</span> =<span style="color:#006600; font-weight:bold;">&amp;</span>gt; <span style="color:#006666;">1</span>, <span style="color:#ff3333; font-weight:bold;">:read_all</span> =<span style="color:#006600; font-weight:bold;">&amp;</span>gt; <span style="color:#0000FF; font-weight:bold;">true</span><span style="color:#006600; font-weight:bold;">&#41;</span>
  threads = <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006600; font-weight:bold;">&#93;</span>
  grid.<span style="color:#9900CC;">browsers</span>.<span style="color:#9900CC;">each</span> <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>browser<span style="color:#006600; font-weight:bold;">|</span>
    threads <span style="color:#006600; font-weight:bold;">&amp;</span>lt;<span style="color:#006600; font-weight:bold;">&amp;</span>lt; <span style="color:#CC00FF; font-weight:bold;">Thread</span>.<span style="color:#9900CC;">new</span> <span style="color:#9966CC; font-weight:bold;">do</span>
      b = browser<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:object</span><span style="color:#006600; font-weight:bold;">&#93;</span>.<span style="color:#9900CC;">new_browser</span>
      b.<span style="color:#9900CC;">goto</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;http://www.google.com&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
      b.<span style="color:#9900CC;">text_field</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:name</span>, <span style="color:#996600;">'q'</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color:#9900CC;">set</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;watirgrid&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
      b.<span style="color:#9900CC;">button</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:name</span>, <span style="color:#996600;">&quot;btnI&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color:#9900CC;">click</span>
    <span style="color:#9966CC; font-weight:bold;">end</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
  threads.<span style="color:#9900CC;">each</span> <span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#006600; font-weight:bold;">|</span>thread<span style="color:#006600; font-weight:bold;">|</span> thread.<span style="color:#9900CC;">join</span><span style="color:#006600; font-weight:bold;">&#125;</span></pre></div></div>

<p>You may wish to host the controller and providers on different machines in a real scenario. You can specify things like server hostnames, ports and access control lists for each of the different types of servers. For more help see:</p>

<div class="wp_syntax"><div class="code"><pre class="shell" style="font-family:monospace;">  $  controller --help
  Usage: controller [options]
  Specific options:
      -H, --drb-server-host HOST       Specify DRb Server interface to host on
      -d, --drb-server-port PORT       Specify DRb Server port to listen on
      -h, --ring-server-host HOST      Specify Ring Server interface to host on
      -r, --ring-server-port PORT      Specify Ring Server port to listen on
      -a, --access-control-list ACLS   Specify a comma separated Access Control List
      -l, --log-level LEVEL            Specify log level {DEBUG|INFO|ERROR}
          --help                       Show this message
&nbsp;
  $  provider --help
  Usage: provider [options]
  Specific options:
      -H, --drb-server-host HOST       Specify DRb Server interface to host on
      -d, --drb-server-port PORT       Specify DRb Server port to listen on
      -h, --ring-server-host HOST      Specify Ring Server host to connect to
      -r, --ring-server-port PORT      Specify Ring Server port to broadcast on
      -b, --browser-type TYPE          Specify browser type to register {ie|firefox|safari}
      -a, --access-control-list ACLS   Specify a comma separated Access Control List
      -l, --log-level LEVEL            Specify log level {DEBUG|INFO|ERROR}
          --help                       Show this message</pre></div></div>

<p>Need more help?</p>
<p>Keep an eye on the <a href="http://wiki.github.com/90kts/watirgrid"><strong>wiki</strong></a> and the <a href="http://github.com/90kts/watirgrid/tree/master/spec/"><strong>rspec</strong></a> test cases!</p>
]]></content:encoded>
			<wfw:commentRss>http://altentee.com/blogs/2009/going-parallel-distributed-testing-across-a-grid-network-using-watir/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
	</channel>
</rss>

