<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" xml:lang="en" xml:base="http://blog.browsermob.com/wp-atom.php">
	<title type="text">The BrowserMob Blog</title>
	<subtitle type="text">All about browsers, performance testing, and load testing</subtitle>

	<updated>2010-02-22T17:02:52Z</updated>
	<generator uri="http://wordpress.org/" version="2.8.5">WordPress</generator>

	<link rel="alternate" type="text/html" href="http://blog.browsermob.com" />
	<id>http://blog.browsermob.com/feed/atom/</id>
	

			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/BrowserMob" /><feedburner:info uri="browsermob" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry>
		<author>
			<name>Patrick Lightbody</name>
						<uri>http://browsermob.com</uri>
					</author>
		<title type="html"><![CDATA[Emulating Think Time and Pacing with BrowserMob]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/BrowserMob/~3/x0nfmKt3TFk/" />
		<id>http://blog.browsermob.com/2010/02/emulating-think-time-and-pacing-with-browsermob/</id>
		<updated>2010-02-22T17:02:52Z</updated>
		<published>2010-02-22T17:02:52Z</published>
		<category scheme="http://blog.browsermob.com" term="Load Testing Tips" /><category scheme="http://blog.browsermob.com" term="Altentee" /><category scheme="http://blog.browsermob.com" term="Think Time" />		<summary type="html"><![CDATA[
Tim Koopmans, one of the partners at Altentee, a partner of ours, recently wrote up some tips on how to emulate think time and pacing of scripts in BrowserMob, specifically for load testing. Tim provides some very handy code samples, so be sure to check them out, especially if you&#8217;re concerned about pacing of transactions/sec.
 [...]]]></summary>
		<content type="html" xml:base="http://blog.browsermob.com/2010/02/emulating-think-time-and-pacing-with-browsermob/"><![CDATA[<p>
Tim Koopmans, one of the partners at <a href="http://altentee.com">Altentee</a>, a partner of ours, recently wrote up some tips on <a href="http://altentee.com/2010/emulating-think-time-and-pacing-with-browsermob/">how to emulate think time and pacing</a> of scripts in BrowserMob, specifically for load testing. Tim provides some very handy code samples, so be sure to check them out, especially if you&#8217;re concerned about pacing of transactions/sec.</p>
<p align="left"><a class="tt" href="http://twitter.com/home/?status=BrowserMob:+Emulating+Think+Time+and+Pacing+with+BrowserMob+http://3kbs8.th8.us" title="Post to Twitter"><img class="nothumb" src="http://blog.browsermob.com/wp-content/plugins/tweet-this/icons/tt-twitter.png" alt="[Post to Twitter]" border="0" /></a> <a class="tt" href="http://twitter.com/home/?status=BrowserMob:+Emulating+Think+Time+and+Pacing+with+BrowserMob+http://3kbs8.th8.us" title="Post to Twitter">Tweet This Post</a>&nbsp; </p>]]></content>
		<link rel="replies" type="text/html" href="http://blog.browsermob.com/2010/02/emulating-think-time-and-pacing-with-browsermob/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://blog.browsermob.com/2010/02/emulating-think-time-and-pacing-with-browsermob/feed/atom/" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://blog.browsermob.com/2010/02/emulating-think-time-and-pacing-with-browsermob/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Patrick Lightbody</name>
						<uri>http://browsermob.com</uri>
					</author>
		<title type="html"><![CDATA[Can I record arbitrary information with each transaction or step?]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/BrowserMob/~3/FBtAHE4bDYQ/" />
		<id>http://blog.browsermob.com/2010/02/can-i-record-arbitrary-information-with-each-transaction-or-step/</id>
		<updated>2010-02-20T21:03:01Z</updated>
		<published>2010-02-20T21:03:01Z</published>
		<category scheme="http://blog.browsermob.com" term="FAQ" /><category scheme="http://blog.browsermob.com" term="API" />		<summary type="html"><![CDATA[
For load tests, yes (we&#8217;re working to add support for this to monitoring). You can use BrowserMob API to add any name/value pair to your transactions or steps. Here&#8217;s a simple example:


var selenium = browserMob.openBrowser&#40;&#41;;
&#160;
var tx = browserMob.beginTransaction&#40;&#41;;
&#160;
var step = browserMob.beginStep&#40;&#34;Home Page&#34;&#41;;
&#160;
selenium.open&#40;&#34;http://example.com&#34;&#41;;
&#160;
// record how long it took for some text to appear
var start = new [...]]]></summary>
		<content type="html" xml:base="http://blog.browsermob.com/2010/02/can-i-record-arbitrary-information-with-each-transaction-or-step/"><![CDATA[<p>
For load tests, yes (we&#8217;re working to add support for this to monitoring). You can use <a href="http://static.browsermob.com/api/">BrowserMob API</a> to add any name/value pair to your transactions or steps. Here&#8217;s a simple example:
</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> selenium <span style="color: #339933;">=</span> browserMob.<span style="color: #660066;">openBrowser</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #003366; font-weight: bold;">var</span> tx <span style="color: #339933;">=</span> browserMob.<span style="color: #660066;">beginTransaction</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #003366; font-weight: bold;">var</span> step <span style="color: #339933;">=</span> browserMob.<span style="color: #660066;">beginStep</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;Home Page&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
selenium.<span style="color: #000066;">open</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;http://example.com&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #006600; font-style: italic;">// record how long it took for some text to appear</span>
<span style="color: #003366; font-weight: bold;">var</span> start <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> Date<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">getTime</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
selenium.<span style="color: #660066;">waitForTextPresent</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;dynamic text&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #003366; font-weight: bold;">var</span> end <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> Date<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">getTime</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #006600; font-style: italic;">// get a special cookie out and store it</span>
<span style="color: #003366; font-weight: bold;">var</span> cookie <span style="color: #339933;">=</span> selenium.<span style="color: #660066;">getCookieByName</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;myCookie&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
tx.<span style="color: #660066;">put</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;cookie_value&quot;</span><span style="color: #339933;">,</span> cookie<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #006600; font-style: italic;">// and store the &quot;text&quot; timing, associated with the step</span>
step.<span style="color: #660066;">put</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;text_timing&quot;</span><span style="color: #339933;">,</span> end <span style="color: #339933;">-</span> start<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
browserMob.<span style="color: #660066;">endStep</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
browserMob.<span style="color: #660066;">endTransaction</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>
The important things to notice here are that both beginTransaction() and beginStep() actually return objects that represent the transaction or step, respectively. You can then call put() on those objects to associate arbitrary data, such as custom timings or cookie values, with them.
</p>
<p>
Then when the transaction is stored in the load test database, you&#8217;ll be able to look them up in the name_value_pairs table. For more information on the test database schema, consult the <a href="http://blog.browsermob.com/help/viewing-test-results/ad-hoc-sql-queries/">documentation</a>.</p>
<p align="left"><a class="tt" href="http://twitter.com/home/?status=BrowserMob:+Can+I+record+arbitrary+information+with+each+transaction+or+step%3F+http://b2hin.th8.us" title="Post to Twitter"><img class="nothumb" src="http://blog.browsermob.com/wp-content/plugins/tweet-this/icons/tt-twitter.png" alt="[Post to Twitter]" border="0" /></a> <a class="tt" href="http://twitter.com/home/?status=BrowserMob:+Can+I+record+arbitrary+information+with+each+transaction+or+step%3F+http://b2hin.th8.us" title="Post to Twitter">Tweet This Post</a>&nbsp; </p>]]></content>
		<link rel="replies" type="text/html" href="http://blog.browsermob.com/2010/02/can-i-record-arbitrary-information-with-each-transaction-or-step/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://blog.browsermob.com/2010/02/can-i-record-arbitrary-information-with-each-transaction-or-step/feed/atom/" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://blog.browsermob.com/2010/02/can-i-record-arbitrary-information-with-each-transaction-or-step/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Patrick Lightbody</name>
						<uri>http://browsermob.com</uri>
					</author>
		<title type="html"><![CDATA[Case Study with SignalFive for Al Gore&#8217;s Alliance for Climate Protection]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/BrowserMob/~3/_JAd2oKjKew/" />
		<id>http://blog.browsermob.com/2010/02/case-study-with-signalfive-for-al-gores-alliance-for-climate-protection/</id>
		<updated>2010-02-17T22:07:25Z</updated>
		<published>2010-02-17T16:44:06Z</published>
		<category scheme="http://blog.browsermob.com" term="Industry News" /><category scheme="http://blog.browsermob.com" term="Case Study" /><category scheme="http://blog.browsermob.com" term="Load Testing" />		<summary type="html"><![CDATA[
One of our customers, SignalFive, recently published a case study about a project they did with Al Gore&#8217;s Alliance for Climate Protection.


The project, called the Repower America Wall, involved a massive, Flash-based interface in which thousands of user-created images and videos could be scanned through at high speed.


In the case study, they describe how they [...]]]></summary>
		<content type="html" xml:base="http://blog.browsermob.com/2010/02/case-study-with-signalfive-for-al-gores-alliance-for-climate-protection/"><![CDATA[<p>
One of our customers, SignalFive, recently published a <a href="http://signalfive.com/casestudies/repoweramericawall">case study</a> about a project they did with Al Gore&#8217;s Alliance for Climate Protection.
</p>
<p>
The project, called the <a href="http://www.repoweramerica.org/wall/">Repower America Wall</a>, involved a massive, Flash-based interface in which thousands of user-created images and videos could be scanned through at high speed.
</p>
<p>
In the case study, they describe how they calculated the estimated site traffic and decided to use cloud services, such as Amazon and YouTube, to help the site scale. However, before launch they still needed to prove to the customer that the site was ready:
</p>
<blockquote><p>
While this stress-testing was valuable, and optimizations were made based on them, none of these techniques truly simulated real-world use. Typically, a testing environment such as Selenium IDE might be used. But since the UI of the wall was built in Flash, things got tricky.
</p></blockquote>
<p>
Because of the rich Flash interface, traditional load testing services based on simple HTTP protocol simulation weren&#8217;t well-suited. For that reason, they came to BrowserMob. Using our real browser technology, we were able to load the entire UI, allow the background AJAX and AMF calls to take place, and even stream the various videos:
</p>
<blockquote><p>
BrowserMob&#8217;s team helped us craft some tests which we ran on the dev and production servers. The information was invaluable — based on the test results, we decided to upgrade the production server, and doubled its memory.
</p></blockquote>
<p>
Below is some of the load test charts SignalFive generated using our software:
</p>
<p><img src="http://blog.browsermob.com/wp-content/uploads/2010/02/pub_img_v3_casestudies_Picture15.png" width="480" height="461" alt="_pub_img_v3_casestudies_Picture15.png" /></p>
<p><img src="http://blog.browsermob.com/wp-content/uploads/2010/02/pub_img_v3_casestudies_Picture16.png" width="480" height="303" alt="_pub_img_v3_casestudies_Picture16.png" /></p>
<p align="left"><a class="tt" href="http://twitter.com/home/?status=BrowserMob:+Case+Study+with+SignalFive+for+Al+Gore%27s+Alliance+for+Climate+Protection+http://r46z8.th8.us" title="Post to Twitter"><img class="nothumb" src="http://blog.browsermob.com/wp-content/plugins/tweet-this/icons/tt-twitter.png" alt="[Post to Twitter]" border="0" /></a> <a class="tt" href="http://twitter.com/home/?status=BrowserMob:+Case+Study+with+SignalFive+for+Al+Gore%27s+Alliance+for+Climate+Protection+http://r46z8.th8.us" title="Post to Twitter">Tweet This Post</a>&nbsp; </p>]]></content>
		<link rel="replies" type="text/html" href="http://blog.browsermob.com/2010/02/case-study-with-signalfive-for-al-gores-alliance-for-climate-protection/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://blog.browsermob.com/2010/02/case-study-with-signalfive-for-al-gores-alliance-for-climate-protection/feed/atom/" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://blog.browsermob.com/2010/02/case-study-with-signalfive-for-al-gores-alliance-for-climate-protection/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Patrick Lightbody</name>
						<uri>http://browsermob.com</uri>
					</author>
		<title type="html"><![CDATA[A Super Bowl experience: How third party scripts can hurt your website]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/BrowserMob/~3/d5pt_q2dFSk/" />
		<id>http://blog.browsermob.com/2010/02/a-super-bowl-experience-how-third-party-scripts-can-hurt-your-website/</id>
		<updated>2010-02-16T02:37:38Z</updated>
		<published>2010-02-16T14:34:56Z</published>
		<category scheme="http://blog.browsermob.com" term="Load Testing Tips" /><category scheme="http://blog.browsermob.com" term="3rd party widgets" /><category scheme="http://blog.browsermob.com" term="Performance" />		<summary type="html"><![CDATA[
I just recently came across a great article titled How tracking scripts affect page loads… can Google Analytics kill my web app?:


This post explains script blocking, and then shows how to safely setup a tracking script or any external script, such as Google Analytics or Quantcast, to not block page loads or other javascript handlers [...]]]></summary>
		<content type="html" xml:base="http://blog.browsermob.com/2010/02/a-super-bowl-experience-how-third-party-scripts-can-hurt-your-website/"><![CDATA[<p>
I just recently came across a great article titled <a href="http://mrcoles.com/blog/how-tracking-scripts-affect-page-loads/">How tracking scripts affect page loads… can Google Analytics kill my web app?</a>:
</p>
<blockquote><p>
This post explains script blocking, and then shows how to safely setup a tracking script or any external script, such as Google Analytics or Quantcast, to not block page loads or other javascript handlers on your site.
</p></blockquote>
<p>
It&#8217;s a great read and provides a clear explanation on how third party components (everything from advertisements to analytics to content widgets) can slow your site down. JavaScript includes have been commonly used in websites for coming on a decade, but there are still many people who don&#8217;t understand the destruction a <strong>rogue script</strong> can cause to user experience.
</p>
<p>
One such example of that kind of destruction recently happened to customer of ours who ran an advertisement during the Super Bowl. In the weeks and months leading to the event, they had done massive amounts of tests and verified that their data center could easily handle <strong>2.5 gigabits per second</strong> or more.
</p>
<p>
They were more than prepared and, overall, the event went off without a hitch. However, there was one minor problem that did plague their launch: a third party that served a component on their site <strong>couldn&#8217;t keep up with the load</strong>.
</p>
<p>
It turns out that one page (unfortunately, an important one that allowed visitors to search for their products) included an inline JavaScript file hosted externally. This included file was added at the <strong>last minute</strong> and didn&#8217;t get subject to the intensive testing that the rest of the site had gone through.
</p>
<p>
When the external site went down, visitors&#8217; browsers would timeout after 1-2 minutes of trying to fetch that content before finally firing the important <strong>onload event</strong> in the browser. Nothing hosted by the company had a problem, but yet it still affected the user experience.
</p>
<p>
To make matters worse, the customer did have certain JavaScript that fired on the onload event. This JavaScript added rich functionality, such as making a calendar pop up when clicking on a date field. Because of the 1-2 minute delay, this functionality wasn&#8217;t available immediately, causing the experience to <strong>deteriorate</strong>.
</p>
<p>
In addition to all the guidance given in the aforementioned article, there are two things they can do to avoid this next time:
</p>
<ul>
<li><strong>Remove the third party reference entirely</strong>. In this case the reference was to some JavaScript that in turn produced a &#8220;Follow me on Twitter&#8221; image. That image could have easily been hosted in their own data center, which had been tested thoroughly.</li>
<li><strong>Take advantage of the &#8220;on content ready&#8221; psuedo event</strong>. Most modern JavaScript frameworks support a non-standard event that will fire before onload. Most of the time, this is much more desirable as it means that the JavaScript will fire closer to when the user sees content in their browser &#8211; not just when all images and JavaScript has been downloaded.</li>
</ul>
<p>
The &#8220;on content ready&#8221; psuedo-event doesn&#8217;t have an official name, but a lot of people also refer to it as &#8220;on DOM ready&#8221;. YUI, Dojo, Prototype, jQuery, and many others support it, so be on the lookout.</p>
<p align="left"><a class="tt" href="http://twitter.com/home/?status=BrowserMob:+A+Super+Bowl+experience%3A+How+third+party+scripts+can+hurt+your+website+http://ryrci.th8.us" title="Post to Twitter"><img class="nothumb" src="http://blog.browsermob.com/wp-content/plugins/tweet-this/icons/tt-twitter.png" alt="[Post to Twitter]" border="0" /></a> <a class="tt" href="http://twitter.com/home/?status=BrowserMob:+A+Super+Bowl+experience%3A+How+third+party+scripts+can+hurt+your+website+http://ryrci.th8.us" title="Post to Twitter">Tweet This Post</a>&nbsp; </p>]]></content>
		<link rel="replies" type="text/html" href="http://blog.browsermob.com/2010/02/a-super-bowl-experience-how-third-party-scripts-can-hurt-your-website/#comments" thr:count="1" />
		<link rel="replies" type="application/atom+xml" href="http://blog.browsermob.com/2010/02/a-super-bowl-experience-how-third-party-scripts-can-hurt-your-website/feed/atom/" thr:count="1" />
		<thr:total>1</thr:total>
	<feedburner:origLink>http://blog.browsermob.com/2010/02/a-super-bowl-experience-how-third-party-scripts-can-hurt-your-website/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Patrick Lightbody</name>
						<uri>http://browsermob.com</uri>
					</author>
		<title type="html"><![CDATA[Handling page timeout errors in BrowserMob]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/BrowserMob/~3/WO4Q6I51Eh0/" />
		<id>http://blog.browsermob.com/2010/02/handling-page-timeout-errors-in-browsermob/</id>
		<updated>2010-02-15T23:55:50Z</updated>
		<published>2010-02-15T23:55:50Z</published>
		<category scheme="http://blog.browsermob.com" term="Load Testing Tips" /><category scheme="http://blog.browsermob.com" term="Timeouts" />		<summary type="html"><![CDATA[
Our use of a real web browsers makes it really easy to do website load testing and monitoring. By default a page is considered to have timed out if the page &#8220;onload event&#8221; can&#8217;t fire within 30 seconds. However, sometimes the page appears to be fully loaded to a typical user and shouldn&#8217;t be counted [...]]]></summary>
		<content type="html" xml:base="http://blog.browsermob.com/2010/02/handling-page-timeout-errors-in-browsermob/"><![CDATA[<p>
Our use of a real web browsers makes it really easy to do website load testing and monitoring. By default a page is considered to have timed out if the page &#8220;onload event&#8221; can&#8217;t fire within 30 seconds. However, sometimes the page appears to be fully loaded to a typical user and shouldn&#8217;t be counted as a timeout error in your tests.
</p>
<p>
We call these errors &#8220;soft timeouts&#8221;, and they require a little bit of code to ignore them:
</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> selenium <span style="color: #339933;">=</span> browserMob.<span style="color: #660066;">openBrowser</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
selenium.<span style="color: #660066;">setTimeout</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">2500</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #003366; font-weight: bold;">function</span> ignoreIfSafeTimeout<span style="color: #009900;">&#40;</span>e<span style="color: #339933;">,</span> step<span style="color: #339933;">,</span> minObjects<span style="color: #339933;">,</span> acceptableThreshold<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>e.<span style="color: #660066;">message</span>.<span style="color: #660066;">indexOf</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;Timed out after &quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #339933;">-</span><span style="color: #CC0000;">1</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000066; font-weight: bold;">throw</span> e<span style="color: #339933;">;</span> <span style="color: #006600; font-style: italic;">// this isn't a timeout, so throw it</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #003366; font-weight: bold;">var</span> objects <span style="color: #339933;">=</span> step.<span style="color: #660066;">getObjects</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #003366; font-weight: bold;">var</span> objectCount <span style="color: #339933;">=</span> objects.<span style="color: #660066;">size</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>objectCount <span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;</span> minObjects<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000066; font-weight: bold;">throw</span> <span style="color: #3366CC;">&quot;Expected at least &quot;</span> <span style="color: #339933;">+</span> minObjects <span style="color: #339933;">+</span> 
              <span style="color: #3366CC;">&quot; objects but only saw &quot;</span> <span style="color: #339933;">+</span> objectCount<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #003366; font-weight: bold;">var</span> errors <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">;</span>
    <span style="color: #000066; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">var</span> i <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;</span> objectCount<span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #003366; font-weight: bold;">var</span> object <span style="color: #339933;">=</span> objects.<span style="color: #660066;">get</span><span style="color: #009900;">&#40;</span>i<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #003366; font-weight: bold;">var</span> code <span style="color: #339933;">=</span> object.<span style="color: #660066;">getStatusCode</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>code <span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;</span> <span style="color: #CC0000;">200</span> <span style="color: #339933;">||</span> code <span style="color: #339933;">&amp;</span>gt<span style="color: #339933;">;=</span> <span style="color: #CC0000;">400</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            errors<span style="color: #339933;">++;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #003366; font-weight: bold;">var</span> errorRatio <span style="color: #339933;">=</span> errors <span style="color: #339933;">/</span> objectCount<span style="color: #339933;">;</span>
    <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>errorRatio <span style="color: #339933;">&gt;</span> acceptableThreshold<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000066; font-weight: bold;">throw</span> <span style="color: #3366CC;">&quot;Expected no more than &quot;</span> <span style="color: #339933;">+</span> acceptableThreshold <span style="color: #339933;">+</span> 
              <span style="color: #3366CC;">&quot; error ratio but saw &quot;</span> <span style="color: #339933;">+</span> errorRatio<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
browserMob.<span style="color: #660066;">beginTransaction</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #003366; font-weight: bold;">var</span> step1 <span style="color: #339933;">=</span> browserMob.<span style="color: #660066;">beginStep</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;Home Page&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000066; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
    selenium.<span style="color: #000066;">open</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;http://marketwatch.com&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> <span style="color: #000066; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span>e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    ignoreIfSafeTimeout<span style="color: #009900;">&#40;</span>e<span style="color: #339933;">,</span> step1<span style="color: #339933;">,</span> <span style="color: #CC0000;">130</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">0.1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
browserMob.<span style="color: #660066;">endStep</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
browserMob.<span style="color: #660066;">endTransaction</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>
What this code does is catch the automatic timeout exception thrown when visiting a website (in this case http://marketwatch.com) and decide whether it ignore it or not enough of the page content had loaded. There are a few things to note:
</p>
<ul>
<li>The timeout for the page load is set to 2.5 seconds. This is set artificially low to simulate a page timeout, which is bound to happen on a heavy page like MarketWatch where there are 100+ objects.</li>
<li>A custom function, ignoreIfSafeTimeout , is defined that takes several arguments:
<ul>
<li>e &#8211; the exception that gets thrown when opening the page</li>
<li>step &#8211; the step that holds a list of all objects requested</li>
<li>minObjects &#8211; the minimum number of objects that should be associated with the step</li>
<li>acceptableThreshold &#8211; an acceptable ratio of errors-to-successes in the objects downloaded</li>
</ul>
</li>
<li>When browserMob.beginStep() is called, we save a reference to it (&#8221;step1&#8243;) that gets used to call ignoreIfSafeTimeout if an exception is thrown.</li>
<li>The selenium.open() command is wrapped with a try/catch block.</li>
</ul>
<p>
The most important thing in here is the call to ignoreIfSafeTimeout() in the catch block. When called, we pass in the exception that we just caught along with the step object. The last two arguments are the important ones.
</p>
<p>
The third argument, 130, means that if there is a timeout and less than 130 objects have been requested, an error will be thrown. The fourth argument, 0.1, means that if more than 10% of the requests are error codes, then an error will be thrown.
</p>
<p>
Feel free to use this code as a starting point for reducing the number of &#8220;soft timeouts&#8221; in your load tests and monitoring jobs.</p>
<p align="left"><a class="tt" href="http://twitter.com/home/?status=BrowserMob:+Handling+page+timeout+errors+in+BrowserMob+http://6qqf2.th8.us" title="Post to Twitter"><img class="nothumb" src="http://blog.browsermob.com/wp-content/plugins/tweet-this/icons/tt-twitter.png" alt="[Post to Twitter]" border="0" /></a> <a class="tt" href="http://twitter.com/home/?status=BrowserMob:+Handling+page+timeout+errors+in+BrowserMob+http://6qqf2.th8.us" title="Post to Twitter">Tweet This Post</a>&nbsp; </p>]]></content>
		<link rel="replies" type="text/html" href="http://blog.browsermob.com/2010/02/handling-page-timeout-errors-in-browsermob/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://blog.browsermob.com/2010/02/handling-page-timeout-errors-in-browsermob/feed/atom/" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://blog.browsermob.com/2010/02/handling-page-timeout-errors-in-browsermob/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Patrick Lightbody</name>
						<uri>http://browsermob.com</uri>
					</author>
		<title type="html"><![CDATA[New pricing FAQ for existing customers]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/BrowserMob/~3/Y3BNFLR2gkk/" />
		<id>http://blog.browsermob.com/2010/02/new-pricing-faq-for-existing-customers/</id>
		<updated>2010-02-11T23:31:57Z</updated>
		<published>2010-02-11T23:30:33Z</published>
		<category scheme="http://blog.browsermob.com" term="FAQ" /><category scheme="http://blog.browsermob.com" term="Monitoring" /><category scheme="http://blog.browsermob.com" term="Load Testing" /><category scheme="http://blog.browsermob.com" term="Pricing" />		<summary type="html"><![CDATA[
A couple days ago we announced a brand new pricing system that lowered our pricing across the board. For our existing customers, this pricing is quite a bit different than what they were used to, so we wanted to put together a list Frequently Asked Questions about the new plans.

Is this new pricing more or [...]]]></summary>
		<content type="html" xml:base="http://blog.browsermob.com/2010/02/new-pricing-faq-for-existing-customers/"><![CDATA[<p>
A couple days ago <a href="http://blog.browsermob.com/2010/02/announcement-new-free-plans-and-lower-pricing/">we announced a brand new pricing system that lowered our pricing across the board</a>. For our existing customers, this pricing is quite a bit different than what they were used to, so we wanted to put together a list Frequently Asked Questions about the new plans.
</p>
<h2>Is this new pricing more or less expensive?</h2>
<p>
By any metric, <strong>this a price reduction</strong>. We&#8217;re extremely excited to have found a model that controls costs for our customers while actually making the revenue flow for our company healthier.
</p>
<p>
Not only did we reduce the overall pricing for monitoring and/or give a better value for the price, we created a new way to buy load testing from us that is significantly less expensive for most projects.
</p>
<p>
But even if you stick with the old model of paying for load tests, we&#8217;ve reduced the price because the first 25 RBUs or 100 VUs are always sold &#8220;at cost&#8221;. This means that a 100 RBU test that used to cost $300 now costs $15 under the new plan and $228.75 when using the old plan. To understand how you can choose between either plan, please see the <em> Can I still use my old pay-as-you-go plan?</em> question.
</p>
<h2>How has pricing for monitoring changed?</h2>
<p>
The old pricing model for monitoring used a complex formula in which the time of the script being used to monitor your site heavily influenced the overall cost. For example, a job that averaged 3 seconds per run might cost half of that of a script that took 7 seconds to run. The problem with this model was that if your site slowed down, your costs would go up, making your monitoring budget unpredictable.
</p>
<p>
<strong>The new pricing model eliminates that unpredictability.</strong> Instead, there is a constant number of monthly page views that you&#8217;ll used, based entirely on your script, number of locations you check from, and frequency at which you check. No matter how fast or how slow your site is, the price will remain constant.
</p>
<p>
For example, if you wanted to test a script that hit your home page, visited the login page by clicking the login link, and then logged in, that would be <strong>3 page views</strong>. If your monitoring job ran that script every 15 minutes from two locations, you&#8217;d use 17,280 page views per month:
</p>

<div class="wp_syntax"><div class="code"><pre class="plain" style="font-family:monospace;">17,280 = 3 page views x 60 mins / 15 min freq. 
           x 24 hours x 30 days x 2 locations</pre></div></div>

<p>
Our <a href="http://browsermob.com/monitoring-prices">pricing packages</a> start at 3,000 monthly page views per month (FREE) and go all the way up to 350K monthly page views.
</p>
<h2>What happens to my current monitoring jobs?</h2>
<p>
If you were paying for a monthly, recurring plan, then you have already been converted over to the new model and are now <strong>paying less than you were before</strong>. That&#8217;s because we&#8217;ve lowered our pricing for all monitoring packages. For example, what was $300/mo is now $249/mo, and what was $175/mo is now $149/mo.
</p>
<p>
However, if you were <strong>not</strong> using a monthly credit package to pay for your monitoring, you may need to take some action. Your monitoring jobs have not been disabled, but they are currently running free of charge. Over the next few weeks, we will be contacting each customer who is in this situation and work with them on finding a monitoring package that fits their needs.
</p>
<p>
In some cases, a customer may want to transfer credits previously purchased and apply them toward a monitoring job. We are more than happy to convert purchases over this way and will work with each customer that is interested in doing this.
</p>
<h2>How has pricing for load testing changed?</h2>
<p>
In our previous pricing model, each concurrent RBU cost 10 credits/hour while each concurrent VU cost 1 credit/hour. Customers could buy credits at various rates ranging from 30 cents/credit down to 7.5 cents/credit, depending on the size of the purchase. Purchases of $5,000 or larger were eligible to purchase additional credits of any amount at the original price (usually 7.5 or 10 cents).
</p>
<p>
Under the new model, there are no more credits. Rather, we have converted them all to &#8220;cloud dollars&#8221; by multiplying the remaining credits in your account by the price paid for the credits. For example, if you purchased 1000 credits for $300 and had 300 at the time of the switch, you would be left with $90 in cloud dollars.
</p>
<p>
These cloud dollars can be used to pay for load tests. The price for each load test will be quoted at the bottom of the &#8220;schedule load test&#8221; page. If the test is larger than the <a href="http://browsermob.com/load-testing-prices">load test package</a> that you currently have, we will quote a higher price that is based on the old pay-as-you-go pricing plan.
</p>
<h2>How do &#8220;cloud dollars&#8221; compare to credits?</h2>
<p>
If you&#8217;re used to the old credit system, the easiest way to think of cloud dollars is that they reflect a credit price of just 1.5 cents &#8211; <strong>a 20X reduction</strong> from the 30 cent price most of our customers were using.
</p>
<p>
This means that a 100 RBU test that used to cost $300 now costs only $15 when you are subscribed to a qualifying load test package. For customers who purchased a larger credit package and therefore bought in to a smaller credit price (ie: 15 or 10 cents/credit), the savings are not as large but are still very significant (ie: 10X or 6.67X, respectively.)
</p>
<h2>Can I still use my old pay-as-you-go plan?</h2>
<p>
Absolutely.
</p>
<p>
Simply keep buying cloud dollars just like if they were the old credit system. When you schedule a test, you&#8217;ll be quoted a price to run the test. You may be presented with a note explaining that the per-test fee would be lower if you were using a load test package, but you are under <strong>no obligation</strong> to sign up for such a package. This is especially ideal for anyone who does infrequent load testing.
</p>
<p>
The price of test will be based on what your original credit price was. This means that a 100 RBU test might cost $228.75 for one customer at the 30 cent price point and $78.75 for another customer at the 10 cent price point. However, both would only pay $15 if they were subscribed to a load test package.
</p>
<h2>Can I upgrade to the new pricing?</h2>
<p>
Yes. We can apply any unused cloud dollars towards load testing or monitoring packages. Just <a href="http://browsermob.com/load-testing-support">contact us</a> and we can get the process started.
</p>
<h2>What is the threshold for the free BrowserMob services?</h2>
<p>
For monitoring, you can do up to 3,000 page views per month for free.
</p>
<p>
For load testing, you can run up to 25 RBUs and 100 VUs at any time without paying for a load testing package. However, you will have to pay the raw cloud fees for each test. These fees are 15 cents per RBU hour and 1.5 cents per VU hour (ie: 25 RBUs = $3.75 and 100 VUs = $1.50). Each account comes with 10 cloud dollars to get you started, but you can purchase more at any time.</p>
<p align="left"><a class="tt" href="http://twitter.com/home/?status=BrowserMob:+New+pricing+FAQ+for+existing+customers+http://fwx7r.th8.us" title="Post to Twitter"><img class="nothumb" src="http://blog.browsermob.com/wp-content/plugins/tweet-this/icons/tt-twitter.png" alt="[Post to Twitter]" border="0" /></a> <a class="tt" href="http://twitter.com/home/?status=BrowserMob:+New+pricing+FAQ+for+existing+customers+http://fwx7r.th8.us" title="Post to Twitter">Tweet This Post</a>&nbsp; </p>]]></content>
		<link rel="replies" type="text/html" href="http://blog.browsermob.com/2010/02/new-pricing-faq-for-existing-customers/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://blog.browsermob.com/2010/02/new-pricing-faq-for-existing-customers/feed/atom/" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://blog.browsermob.com/2010/02/new-pricing-faq-for-existing-customers/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Patrick Lightbody</name>
						<uri>http://browsermob.com</uri>
					</author>
		<title type="html"><![CDATA[Announcement: New free plans and lower pricing]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/BrowserMob/~3/dVeDty7I93I/" />
		<id>http://blog.browsermob.com/2010/02/announcement-new-free-plans-and-lower-pricing/</id>
		<updated>2010-02-11T23:45:57Z</updated>
		<published>2010-02-09T23:49:55Z</published>
		<category scheme="http://blog.browsermob.com" term="Monitoring" /><category scheme="http://blog.browsermob.com" term="Uncategorized" /><category scheme="http://blog.browsermob.com" term="Load Testing" /><category scheme="http://blog.browsermob.com" term="Non-profit" /><category scheme="http://blog.browsermob.com" term="Opensource" /><category scheme="http://blog.browsermob.com" term="Pricing" />		<summary type="html"><![CDATA[
Today we launched a brand new pricing structure for both our website load testing and website monitoring service. When coming up with new pricing for both our products, we set out do to four things:


Make it simpler and easier for anyone to quickly understand.
Make our advanced products (ie: our real browser services) more affordable.
Give a [...]]]></summary>
		<content type="html" xml:base="http://blog.browsermob.com/2010/02/announcement-new-free-plans-and-lower-pricing/"><![CDATA[<p>
Today we launched a brand new pricing structure for both our <a href="http://browsermob.com/load-testing">website load testing</a> and <a href="http://browsermob.com/monitoring">website monitoring</a> service. When coming up with new pricing for both our products, we set out do to four things:
</p>
<ol>
<li>Make it simpler and easier for anyone to quickly understand.</li>
<li>Make our advanced products (ie: our real browser services) more affordable.</li>
<li>Give a better value by reducing our pricing across the board.</li>
<li>Provide a <em>free offering</em> that never expires.</li>
</ol>
<h2>Load Testing Pricing</h2>
<p>
Our load testing service now has two types of fees:
</p>
<ul>
<li>A base fee to use the software.</li>
<li>A &#8220;cloud fee&#8221; for each test that gets run.</li>
</ul>
<p>
The base fee is where BrowserMob makes money as a company. We offer a weekly, monthly, or annual price &#8211; with significant discounts for annual purchases. We also offer three levels of service: Basic, Advanced, and Professional. Each package includes enough &#8220;cloud dollars&#8221; (see below) to complete most testing projects.
</p>
<p>
The cloud fee represents our raw costs to run in the cloud. This means after you pay the base fee, you are free to run as many tests as you&#8217;d like with no extra markup. For example, $15 in &#8220;cloud dollars&#8221; gets you a 100 browser test or a 1,000 virtual user test.
</p>
<p>
The most exciting thing about this model is that if your tests require no more than 25 browsers or 100 virtual users, <em>there is no base fee</em>. This means that after you use up the complementary 10 cloud dollars with each signup, you can keep using the service by simply covering the raw fees incurred with each test.
</p>
<p>
We&#8217;re also excited to offer any of our Basic, Advanced, or Professional packages to non-profits and open source organizations <em>free of charge</em>.
</p>
<p>
You can review all the load testing packages <a href="http://browsermob.com/load-testing">here</a>.
</p>
<h2>Monitoring Pricing</h2>
<p>
Our monitoring pricing is now based on a very predictable number of &#8220;monthly page views&#8221;. For example, if you want to check a page every 15 minutes from one location, you would require 2,880 page views:
</p>

<div class="wp_syntax"><div class="code"><pre class="none" style="font-family:monospace;">2,880 = 1 page view x 60 min / 15 min x 24 hrs x 30 days</pre></div></div>

<p>
The best part about this new model is that if you need 3,000 or fewer monthly page views, the service is 100% free. For more frequent monitoring, our monthly plans start at $49. You can review the monitoring pricing <a href="http://browsermob.com/pricing">here</a>.
</p>
<h2>Existing Customers</h2>
<p>
We will be posting a follow-up Q&amp;A for all of our existing customers shortly. It will explain the transition process and what options are available. At a high level, we expect 99% of our customers to immediately get a better value. However, if any existing customer prefers to stick with the old model, we will gladly honor it.
</p>
<p>
<strong>Update:</strong> Please see our <a href="http://blog.browsermob.com/2010/02/new-pricing-faq-for-existing-customers/">FAQ entry</a> that discusses the changes for existing customers.</p>
<p align="left"><a class="tt" href="http://twitter.com/home/?status=BrowserMob:+Announcement%3A+New+free+plans+and+lower+pricing+http://ai6pm.th8.us" title="Post to Twitter"><img class="nothumb" src="http://blog.browsermob.com/wp-content/plugins/tweet-this/icons/tt-twitter.png" alt="[Post to Twitter]" border="0" /></a> <a class="tt" href="http://twitter.com/home/?status=BrowserMob:+Announcement%3A+New+free+plans+and+lower+pricing+http://ai6pm.th8.us" title="Post to Twitter">Tweet This Post</a>&nbsp; </p>]]></content>
		<link rel="replies" type="text/html" href="http://blog.browsermob.com/2010/02/announcement-new-free-plans-and-lower-pricing/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://blog.browsermob.com/2010/02/announcement-new-free-plans-and-lower-pricing/feed/atom/" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://blog.browsermob.com/2010/02/announcement-new-free-plans-and-lower-pricing/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Patrick Lightbody</name>
						<uri>http://browsermob.com</uri>
					</author>
		<title type="html"><![CDATA[Selenium IDE 1.0.4 Released]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/BrowserMob/~3/6_j3Ed3lVJ8/" />
		<id>http://blog.browsermob.com/2010/01/selenium-ide-1-0-4-released/</id>
		<updated>2010-01-22T17:45:56Z</updated>
		<published>2010-01-22T17:45:56Z</published>
		<category scheme="http://blog.browsermob.com" term="Announcements" /><category scheme="http://blog.browsermob.com" term="Industry News" /><category scheme="http://blog.browsermob.com" term="Selenium" /><category scheme="http://blog.browsermob.com" term="Selenium IDE" />		<summary type="html"><![CDATA[
We&#8217;re happy to report that Selenium IDE 1.0.4 has been released. You can download it here and you can find the release notes here.


While this release doesn&#8217;t have many new user-facing features, it does clean up several bugs. More importantly, however, is that Adam Goucher and Jérémy Hérault did some amazing work to lay the [...]]]></summary>
		<content type="html" xml:base="http://blog.browsermob.com/2010/01/selenium-ide-1-0-4-released/"><![CDATA[<p>
We&#8217;re happy to report that Selenium IDE 1.0.4 has been released. You can download it <a href="http://seleniumhq.org/download/">here</a> and you can find the release notes <a href="http://code.google.com/p/selenium/wiki/SeIDEReleaseNotes">here</a>.
</p>
<p>
While this release doesn&#8217;t have many new user-facing features, it does clean up several bugs. More importantly, however, is that Adam Goucher and Jérémy Hérault did some amazing work to lay the foundation for a plugin framework. This means that soon you&#8217;ll see Selenium IDE plugins that further expand the Selenium IDE capability.
</p>
<p>
Jérémy is working on one such plugin, called Helenium (<a href="http://www.youtube.com/watch?v=1jvjcax155o">see proof of concept in action</a>), that will allow you to do text matching against images and PDF files using optical character recognition (OCR). We&#8217;re also working on a plugin that will make it easier to upload scripts from the IDE to BrowserMob.
</p>
<p>
If you&#8217;re interested in how to build your own plugin, I recommend reading <a href="http://adam.goucher.ca/">Adam&#8217;s blog</a>, which has a series of recent posts on how the plugin framework works.</p>
<p align="left"><a class="tt" href="http://twitter.com/home/?status=BrowserMob:+Selenium+IDE+1.0.4+Released+http://soa7b.th8.us" title="Post to Twitter"><img class="nothumb" src="http://blog.browsermob.com/wp-content/plugins/tweet-this/icons/tt-twitter.png" alt="[Post to Twitter]" border="0" /></a> <a class="tt" href="http://twitter.com/home/?status=BrowserMob:+Selenium+IDE+1.0.4+Released+http://soa7b.th8.us" title="Post to Twitter">Tweet This Post</a>&nbsp; </p>]]></content>
		<link rel="replies" type="text/html" href="http://blog.browsermob.com/2010/01/selenium-ide-1-0-4-released/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://blog.browsermob.com/2010/01/selenium-ide-1-0-4-released/feed/atom/" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://blog.browsermob.com/2010/01/selenium-ide-1-0-4-released/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Patrick Lightbody</name>
						<uri>http://browsermob.com</uri>
					</author>
		<title type="html"><![CDATA[New Features: A new cloud location, Selenium 2 support, UI improvements, and new APIs]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/BrowserMob/~3/91_xu2U7EsE/" />
		<id>http://blog.browsermob.com/2010/01/new-features-a-new-cloud-location-selenium-2-support-ui-improvements-and-new-apis/</id>
		<updated>2010-01-20T19:13:55Z</updated>
		<published>2010-01-20T19:12:45Z</published>
		<category scheme="http://blog.browsermob.com" term="Announcements" /><category scheme="http://blog.browsermob.com" term="API" /><category scheme="http://blog.browsermob.com" term="Bespin" /><category scheme="http://blog.browsermob.com" term="Flot" /><category scheme="http://blog.browsermob.com" term="Release Notes" /><category scheme="http://blog.browsermob.com" term="Selenium" /><category scheme="http://blog.browsermob.com" term="Selenium 2" /><category scheme="http://blog.browsermob.com" term="YUI Charts" />		<summary type="html"><![CDATA[
We&#8217;re always working hard to improve our BrowserMob monitoring and load testing services. Over the last few weeks, we&#8217;ve pushed pushed out a bunch of improvements:

New Monitoring and Load Testing Location

Hot off the heels of Amazon&#8217;s announcement of a new US West Coast cloud data center, we are happy to report that you can now [...]]]></summary>
		<content type="html" xml:base="http://blog.browsermob.com/2010/01/new-features-a-new-cloud-location-selenium-2-support-ui-improvements-and-new-apis/"><![CDATA[<p>
We&#8217;re always working hard to improve our BrowserMob <a href="http://browsermob.com/monitoring">monitoring</a> and <a href="http://browsermob.com/load-testing">load testing services</a>. Over the last few weeks, we&#8217;ve pushed pushed out a bunch of improvements:
</p>
<h2>New Monitoring and Load Testing Location</h2>
<p>
Hot off the heels of Amazon&#8217;s <a href="http://aws.typepad.com/aws/2009/12/expanding-the-aws-footprint.html">announcement</a> of a new US West Coast cloud data center, we are happy to report that you can now schedule load tests and monitoring jobs from this new location. Simply select the &#8220;San Jose, CA&#8221; location when scheduling tests.
</p>
<h2>Selenium 2.0 Support</h2>
<p>
In December, <a href="http://code.google.com/p/selenium/">Selenium 2.0</a> alpha 1 was released. This release dramatically improves the realism and reliability of Selenium scripts. We&#8217;re proud to say that you can try out Selenium 2.0 support (but keep in mind it&#8217;s still in alpha) by simply changing your selenium script from this:
</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> selenium <span style="color: #339933;">=</span> browserMob.<span style="color: #660066;">openBrowser</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>
To this:
</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> selenium <span style="color: #339933;">=</span> browserMob.<span style="color: #660066;">openBrowser</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>
We will continue to keep BrowserMob up-to-date with all the latest happenings in the Selenium world, as well as donate our time and code back to the Selenium project. We also upgraded all the BrowserMob browsers to have the latest version of Firefox (3.5.7) and Flash.
</p>
<h2>Schedule Load Test UI Improvements</h2>
<p>
We&#8217;ve also made scheduling a load test a lot easier. We now give you a realtime estimate of what the test will cost you, changing dynamically based on your test configuration. We also display tooltips explaining things like &#8220;location&#8221;, &#8220;ramp&#8221;, and &#8220;constant&#8221;. Finally, we&#8217;re really excited to have rolled out a &#8220;Run ASAP&#8221; option that will kick off the test as quickly as it can, usually within 10 minutes.
</p>
<p><img src="http://blog.browsermob.com/wp-content/uploads/2010/01/201001201005.jpg" width="480" height="382" alt="201001201005.jpg" /></p>
<h2>New Script Editor</h2>
<p>
Our users love that they can write their scripts using JavaScript, so we decided to make working on that JavaScript code even easier. By utilizing the <a href="https://bespin.mozilla.com/">Bespin open source project from Mozilla</a>, you now will see a rich text editor with code syntax highlighting. If for some reason you&#8217;re having trouble with it, you can always switch back to the plain text editor.
</p>
<p><img src="http://blog.browsermob.com/wp-content/uploads/2010/01/201001201011.jpg" width="480" height="382" alt="201001201011.jpg" /></p>
<h2>New Load Test Charts</h2>
<p>
We&#8217;ve always been proud of our realtime load test charts, but some users had recently complained that they were too heavy-weight and were slowing down their browser. Of course, this is a perfect example of why performance <strong>in the browser</strong> is starting to matter just as much as performance on the server.
</p>
<p>
Responding to this complaint, we rewrote the charts from scratch, moving from <a href="http://developer.yahoo.com/yui/charts/">YUI Charts</a> (Flash-based) to <a href="http://code.google.com/p/flot/">Flot</a> (Canvas-based). We hope you like them!
</p>
<p><img src="http://blog.browsermob.com/wp-content/uploads/2010/01/201001201019.jpg" width="480" height="262" alt="201001201019.jpg" /></p>
<h2>New Scripting API Improvements</h2>
<p>
If you do advanced scripting, especially with virtual users, you&#8217;ll definitely want to take a look out the <a href="http://static.browsermob.com/api/">BrowserMob scripting API</a>. We added a whole bunch of useful functions, including:
</p>
<ul>
<li>setFollowRedirect(true) now logs all intermediate HTTP requests</li>
<li>You can now automatically verify response codes</li>
<li>If a 3xx response code is returned when you expected something else, the Location header is logged</li>
<li>You can tie in &#8220;interceptors&#8221; for both HTTP requests and HTTP responses, allowing very advanced scripting techniques</li>
</ul>
<p align="left"><a class="tt" href="http://twitter.com/home/?status=BrowserMob:+New+Features%3A+A+new+cloud+location%2C+Selenium+2+support%2C+UI+improvements%2C+and+new+APIs+http://sh9fn.th8.us" title="Post to Twitter"><img class="nothumb" src="http://blog.browsermob.com/wp-content/plugins/tweet-this/icons/tt-twitter.png" alt="[Post to Twitter]" border="0" /></a> <a class="tt" href="http://twitter.com/home/?status=BrowserMob:+New+Features%3A+A+new+cloud+location%2C+Selenium+2+support%2C+UI+improvements%2C+and+new+APIs+http://sh9fn.th8.us" title="Post to Twitter">Tweet This Post</a>&nbsp; </p>]]></content>
		<link rel="replies" type="text/html" href="http://blog.browsermob.com/2010/01/new-features-a-new-cloud-location-selenium-2-support-ui-improvements-and-new-apis/#comments" thr:count="1" />
		<link rel="replies" type="application/atom+xml" href="http://blog.browsermob.com/2010/01/new-features-a-new-cloud-location-selenium-2-support-ui-improvements-and-new-apis/feed/atom/" thr:count="1" />
		<thr:total>1</thr:total>
	<feedburner:origLink>http://blog.browsermob.com/2010/01/new-features-a-new-cloud-location-selenium-2-support-ui-improvements-and-new-apis/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Patrick Lightbody</name>
						<uri>http://browsermob.com</uri>
					</author>
		<title type="html"><![CDATA[Google search results to favor sites with better performance?]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/BrowserMob/~3/JkxoeE98L-s/" />
		<id>http://blog.browsermob.com/2010/01/google-search-results-to-favor-sites-with-better-performance/</id>
		<updated>2010-01-19T18:07:31Z</updated>
		<published>2010-01-19T18:07:31Z</published>
		<category scheme="http://blog.browsermob.com" term="Uncategorized" /><category scheme="http://blog.browsermob.com" term="Firebug" /><category scheme="http://blog.browsermob.com" term="Google" /><category scheme="http://blog.browsermob.com" term="Google Public DNS" /><category scheme="http://blog.browsermob.com" term="Page Speed" /><category scheme="http://blog.browsermob.com" term="Performance" /><category scheme="http://blog.browsermob.com" term="YSlow" />		<summary type="html"><![CDATA[
Over the last few months Google has continued to focus on performance as a key message to developers. From their &#8220;Let&#8217;s make the web faster&#8221; initiative on Google Code, to their public DNS service, to the constant focus on performance by their Chief Performance guru, Steve Souders, it&#8217;s clear that Google wants people to have [...]]]></summary>
		<content type="html" xml:base="http://blog.browsermob.com/2010/01/google-search-results-to-favor-sites-with-better-performance/"><![CDATA[<p>
Over the last few months Google has continued to focus on performance as a key message to developers. From their <a href="http://code.google.com/speed/">&#8220;Let&#8217;s make the web faster&#8221;</a> initiative on Google Code, to their <a href="http://blog.browsermob.com/2009/12/google-public-dns-vs-opendns-vs-your-isps-dns-measuring-performance/">public DNS service</a>, to the constant focus on performance by their Chief Performance guru, <a href="http://www.stevesouders.com/blog/2010/01/15/jquery-14-performance/">Steve Souders</a>, it&#8217;s clear that Google wants people to have a faster experience on the web.
</p>
<p>
This makes sense: the faster the web, the more people will use it and be more likely to search and click on ads. In fact, in an <a href="http://videos.webpronews.com/2009/11/13/matt-cutts-interview/">interview with Web Pro News</a> in November last year, Matt Cutts (head of Google&#8217;s webspam team) casually mentioned that in 2010 Google may give search ranking preference to sites that load faster. <a href="http://gigaom.com/2009/11/22/should-web-page-speed-influence-google-pagerank/">Om Malik</a> went on to discuss whether this was a good idea or not.
</p>
<p>
More recently, Google opened up a new &#8220;Labs&#8221; feature in their <a href="https://www.google.com/webmasters/tools/">Google Webmaster Tools</a> that actually shows you the performance of your site as measured by the Googlebot. This move is further evidence that Google is indeed going to shift to making performance part of it&#8217;s ranking routine if it hasn&#8217;t already. See a screenshot of what you can expect to see:
</p>
<p><img src="http://blog.browsermob.com/wp-content/uploads/2010/01/201001190952.jpg" width="480" height="194" alt="201001190952.jpg" /></p>
<p>
In addition to the above chart, there is also some basic analysis and recommendations on how to improve performance, similar to what <a href="http://code.google.com/speed/page-speed/">Page Speed</a> and <a href="http://developer.yahoo.com/yslow/">YSlow</a> recommend. While it is a good start and provides the clearest view of how Google perceives your site&#8217;s performance, the data is still rather basic.
</p>
<p>
As such, when measuring and optimizing page load times we&#8217;d still recommend you work with a more in-depth tool such as <a href="http://code.google.com/speed/page-speed/">Page Speed</a> and <a href="http://developer.yahoo.com/yslow/">YSlow</a>. And, of course, for <a href="http://browsermob.com/monitoring">website monitoring</a> and <a href="http://browsermob.com/load-testing">website load testing</a>, we&#8217;d have to recommend BrowserMob <img src='http://blog.browsermob.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /></p>
<p align="left"><a class="tt" href="http://twitter.com/home/?status=BrowserMob:+Google+search+results+to+favor+sites+with+better+performance%3F+http://wg8fy.th8.us" title="Post to Twitter"><img class="nothumb" src="http://blog.browsermob.com/wp-content/plugins/tweet-this/icons/tt-twitter.png" alt="[Post to Twitter]" border="0" /></a> <a class="tt" href="http://twitter.com/home/?status=BrowserMob:+Google+search+results+to+favor+sites+with+better+performance%3F+http://wg8fy.th8.us" title="Post to Twitter">Tweet This Post</a>&nbsp; </p>]]></content>
		<link rel="replies" type="text/html" href="http://blog.browsermob.com/2010/01/google-search-results-to-favor-sites-with-better-performance/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://blog.browsermob.com/2010/01/google-search-results-to-favor-sites-with-better-performance/feed/atom/" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://blog.browsermob.com/2010/01/google-search-results-to-favor-sites-with-better-performance/</feedburner:origLink></entry>
	</feed><!-- Dynamic Page Served (once) in 3.497 seconds --><!-- Cached page generated by WP-Super-Cache on 2010-03-10 08:51:49 -->
