<?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>Blargon7</title>
	<atom:link href="http://blargon7.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://blargon7.com</link>
	<description>An abundant source of alternative fuel</description>
	<lastBuildDate>Fri, 24 Feb 2012 19:51:20 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Test day + Meetup = Success!</title>
		<link>http://blargon7.com/2012/02/test-day-meetup-success/</link>
		<comments>http://blargon7.com/2012/02/test-day-meetup-success/#comments</comments>
		<pubDate>Fri, 24 Feb 2012 19:51:20 +0000</pubDate>
		<dc:creator>Dave</dc:creator>
				<category><![CDATA[Mozilla]]></category>
		<category><![CDATA[QMO]]></category>

		<guid isPermaLink="false">http://blargon7.com/?p=87</guid>
		<description><![CDATA[Yesterday WebQA held a combined test day and meetup event in San Francisco. The idea was to bring everyone together to hack on our QA projects alongside us, and in return we would be able to share our own knowledge &#8230; <a href="http://blargon7.com/2012/02/test-day-meetup-success/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Yesterday <a href="https://quality.mozilla.org/teams/web-qa/">WebQA</a> held a <a href="http://www.meetup.com/The-Mountain-View-Mozilla-Meetup-Group/events/51230852/">combined test day and meetup event</a> in San Francisco. The idea was to bring everyone together to hack on our QA projects alongside us, and in return we would be able to share our own knowledge and experiences, and demonstrate how we test.</p>
<p><a href="http://blargon7.com/wp-content/uploads/2012/02/IMG_5138.jpg"><img src="http://blargon7.com/wp-content/uploads/2012/02/IMG_5138-300x200.jpg" alt="" title="WebQA Test Day Live" width="300" height="200" class="aligncenter size-medium wp-image-88" /></a></p>
<p>The team had managed to pull together over 50 tasks for the evening, ranging from simple beginner level to a few advanced ones, and using a variety of technologies and projects. As people arrived we encouraged them to slap on a name tag and grab a task.</p>
<p>Once we had everyone in the room (I think there were 18 of us in total) we gave a brief introduction from the team over some beer and pizza, and then the fun really started! Of course it didn&#8217;t all go smoothly, and we quickly realised that the entire <a href="http://python.org">python.org</a> domain was unavailable, which meant that nobody could download the required Python packages, such as Selenium and pytest! Fortunately we found after a little scrambling that we could use the &#8211;use-mirrors command line argument to get us unstuck. In fact, we&#8217;ve now even added this to our test jobs running on Jenkins to hopefully make them a little more resilient to <a href="http://pypi.python.org/pypi">PyPI</a> downtime, so in a way I&#8217;m glad we had the issues.</p>
<p>Not everyone was working on new tests, in fact Zac set up a mini grid of Android devices (tablets and mobile), and was giving demonstrations on running web tests on mobile. If you&#8217;ve not tried this yet then you should as it&#8217;s great fun &#8211; and the future is mobile, right?</p>
<p><a href="http://blargon7.com/wp-content/uploads/2012/02/IMG_5134.jpg"><img src="http://blargon7.com/wp-content/uploads/2012/02/IMG_5134-300x200.jpg" alt="" title="IMG_5134" width="300" height="200" class="aligncenter size-medium wp-image-89" /></a></p>
<p>We also had some great feedback on our documentation, which will soon lead to some further improvements and simplifications. I was really impressed when one of the attendees told me there were some issues with the documentation on our wiki, and then told me they just logged in and fixed it themselves. That&#8217;s totally the kind of involvement we&#8217;re encouraging and it&#8217;s so great to see if happening.</p>
<p>By the end of the evening we had three pull requests submitted (all for different projects), and I&#8217;m almost certain that number will increase as some of the other tasks were near completion. We&#8217;ll now work on reviewing those pulls and merging them in, and look forward to any more that come our way!</p>
<p><a href="http://blargon7.com/wp-content/uploads/2012/02/IMG_5130.jpg"><img src="http://blargon7.com/wp-content/uploads/2012/02/IMG_5130-300x200.jpg" alt="" title="IMG_5130" width="300" height="200" class="aligncenter size-medium wp-image-90" /></a></p>
<p>Finally, I want to say a huge thanks to everyone that was able to attend for making it such a great event. We all hope you enjoyed it as much as we did, and look forward to seeing you at future events (and on #mozwebqa on irc.mozilla.org). Oh and thanks to Kedo for the Ctrl+W keyboard shortcut for Terminal!</p>
]]></content:encoded>
			<wfw:commentRss>http://blargon7.com/2012/02/test-day-meetup-success/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Automating BrowserID with Selenium</title>
		<link>http://blargon7.com/2012/02/automating-browserid-with-selenium/</link>
		<comments>http://blargon7.com/2012/02/automating-browserid-with-selenium/#comments</comments>
		<pubDate>Mon, 06 Feb 2012 12:48:45 +0000</pubDate>
		<dc:creator>Dave</dc:creator>
				<category><![CDATA[Mozilla]]></category>
		<category><![CDATA[Selenium]]></category>
		<category><![CDATA[browserid]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[mozilla]]></category>
		<category><![CDATA[selenium]]></category>
		<category><![CDATA[selenium rc]]></category>
		<category><![CDATA[submodule]]></category>
		<category><![CDATA[webdriver]]></category>

		<guid isPermaLink="false">http://blargon7.com/?p=85</guid>
		<description><![CDATA[BrowserID is an awesome new approach to handling online identity. If you haven&#8217;t heard of it then I highly recommend reading this article, which explains what it is and how it works. Several Mozilla projects have already integrated with BrowserID, &#8230; <a href="http://blargon7.com/2012/02/automating-browserid-with-selenium/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>BrowserID is an awesome new approach to handling online identity. If you haven&#8217;t heard of it then I highly recommend reading <a href="https://support.mozilla.org/en-US/kb/what-browserid-and-how-does-it-work">this article</a>, which explains what it is and how it works. Several Mozilla projects have already integrated with BrowserID, including <a href="https://mozillians.org/">Mozillians</a>, <a href="https://affiliates.mozilla.org/">Affiliates</a>, and the <a href="https://developer.mozilla.org/">Mozilla Developer Network</a>.</p>
<p>With all of these sites now integrating with BrowserID (and more on their way) we needed to add support to our test automation to handle the new sign in process. Initially we started to do this independently in our projects, but the thought of updating all of our projects whenever a tweak was made to BrowserID was daunting to say the least! For this reason I have created a project that contains a page object model for BrowserID. This can be included in other projects as a submodule and then updated and maintained centrally.</p>
<p>The new project is called &#8216;BIDPOM&#8217; (<strong>B</strong>rowser<strong>ID</strong> <strong>P</strong>age <strong>O</strong>bject <strong>M</strong>odel) and can be found <a href="https://github.com/davehunt/bidpom">here</a>. It currently only contains a page object for the Sign In page, however this currently meets the needs of the automation for projects that have integrated with BrowserID. As we have a mix of projects using Selenium&#8217;s two APIs (RC and WebDriver), it was necessary for BIDPOM to support both.</p>
<p>By adding BIDPOM as a submodule, we can easily pull the BrowserID page objects into our automation projects and reference them in a very similar way to the main project&#8217;s page objects. We can also update the version of BIDPOM simply by updating the git link and updating the submodule. What&#8217;s even better is that our continuous test builds running in <a href="http://jenkins-ci.org/">Jenkins</a> automatically initialise and update the submodule for us!</p>
<p>I hope that in addition to being a dependency for our own automation projects, this page object model can be utilised by others wanting to create or maintain automated tests using Selenium against sites that adopt BrowserID. If you would like to start using BIDPOM then I have provided below a guide to adding the project as a submodule to an existing git repository.</p>
<p>From within your project, add the BIDPOM project as a git submodule:</p>

<div class="wp_syntax"><div class="code"><pre class="none" style="font-family:monospace;">cd ~/workspace/automationproject
git submodule add git://github.com/davehunt/bidpom.git browserid</pre></div></div>

<p>This will add an entry to <em>.gitmodules</em> and clone the BIDPOM project to the <em>browserid</em> subdirectory. It will also stage the new gitlink and <em>.gitmodules</em> items for commit.</p>
<p>You can now commit these changes to your project&#8217;s repository:</p>

<div class="wp_syntax"><div class="code"><pre class="none" style="font-family:monospace;">git commit -m 'Added BrowserID page object model as submodule.'</pre></div></div>

<p>Before you can test the new submodule you will need to run the following command to copy the contents of <em>.gitmodules</em> into your <em>.git/config</em> file.</p>

<div class="wp_syntax"><div class="code"><pre class="none" style="font-family:monospace;">git submodule init</pre></div></div>

<p>Now you can test the submodule by deleting the <em>browserid</em> directory and allowing it to be recreated:</p>

<div class="wp_syntax"><div class="code"><pre class="none" style="font-family:monospace;">rm -rf browserid
git submodule update</pre></div></div>

<p>The BIDPOM project should be cloned to the <em>browserid</em> directory.</p>
<p>You will now be able to integrate your project with BrowserID! Here follow a few examples of how to integrate your project.</p>
<h3>Example: Short sign-in using Selenium&#8217;s RC API</h3>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code"><pre class="python" style="font-family:monospace;">...
<span style="color: black;">selenium</span>.<span style="color: black;">click</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'id=login'</span><span style="color: black;">&#41;</span>
<span style="color: #ff7700;font-weight:bold;">from</span> browserid <span style="color: #ff7700;font-weight:bold;">import</span> BrowserID
browser_id = BrowserID<span style="color: black;">&#40;</span>selenium<span style="color: black;">&#41;</span>
browser_id.<span style="color: black;">sign_in</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'testaccount@example.com'</span>, <span style="color: #483d8b;">'password'</span><span style="color: black;">&#41;</span>
<span style="color: #ff7700;font-weight:bold;">assert</span> selenium.<span style="color: black;">is_visible</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'id=logout'</span><span style="color: black;">&#41;</span></pre></td></tr></table></div>

<h3>Example: Long sign-in using Selenium&#8217;s RC API</h3>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
</pre></td><td class="code"><pre class="python" style="font-family:monospace;">...
<span style="color: black;">selenium</span>.<span style="color: black;">click</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'id=login'</span><span style="color: black;">&#41;</span>
<span style="color: #ff7700;font-weight:bold;">from</span> browserid.<span style="color: black;">pages</span>.<span style="color: black;">rc</span>.<span style="color: black;">sign_in</span> <span style="color: #ff7700;font-weight:bold;">import</span> SignIn
signin = SignIn<span style="color: black;">&#40;</span><span style="color: #008000;">self</span>.<span style="color: black;">selenium</span>, <span style="color: #008000;">self</span>.<span style="color: black;">timeout</span><span style="color: black;">&#41;</span>
signin.<span style="color: #dc143c;">email</span> = <span style="color: #483d8b;">'testaccount@example.com'</span>
signin.<span style="color: black;">click_next</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
signin.<span style="color: black;">password</span> = <span style="color: #483d8b;">'password'</span>
signin.<span style="color: black;">click_select_email</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
signin.<span style="color: black;">click_sign_in</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
<span style="color: #ff7700;font-weight:bold;">assert</span> selenium.<span style="color: black;">is_visible</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'id=logout'</span><span style="color: black;">&#41;</span></pre></td></tr></table></div>

<h3>Example: Short sign-in using Selenium&#8217;s WebDriver API</h3>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code"><pre class="python" style="font-family:monospace;">...
<span style="color: black;">selenium</span>.<span style="color: black;">find_element_by_id</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'login'</span><span style="color: black;">&#41;</span>.<span style="color: black;">click</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
<span style="color: #ff7700;font-weight:bold;">from</span> browserid <span style="color: #ff7700;font-weight:bold;">import</span> BrowserID
browser_id = BrowserID<span style="color: black;">&#40;</span>selenium<span style="color: black;">&#41;</span>
browser_id.<span style="color: black;">sign_in</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'testaccount@example.com'</span>, <span style="color: #483d8b;">'password'</span><span style="color: black;">&#41;</span>
<span style="color: #ff7700;font-weight:bold;">assert</span> selenium.<span style="color: black;">find_element_by_id</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'logout'</span><span style="color: black;">&#41;</span>.<span style="color: black;">is_displayed</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span></pre></td></tr></table></div>

<h3>Example: Long sign-in using Selenium&#8217;s WebDriver API</h3>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
</pre></td><td class="code"><pre class="python" style="font-family:monospace;">...
<span style="color: black;">selenium</span>.<span style="color: black;">find_element_by_id</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'login'</span><span style="color: black;">&#41;</span>.<span style="color: black;">click</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
<span style="color: #ff7700;font-weight:bold;">from</span> browserid.<span style="color: black;">pages</span>.<span style="color: black;">webdriver</span>.<span style="color: black;">sign_in</span> <span style="color: #ff7700;font-weight:bold;">import</span> SignIn
signin = SignIn<span style="color: black;">&#40;</span><span style="color: #008000;">self</span>.<span style="color: black;">selenium</span>, <span style="color: #008000;">self</span>.<span style="color: black;">timeout</span><span style="color: black;">&#41;</span>
signin.<span style="color: #dc143c;">email</span> = <span style="color: #483d8b;">'testaccount@example.com'</span>
signin.<span style="color: black;">click_next</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
signin.<span style="color: black;">password</span> = <span style="color: #483d8b;">'password'</span>
signin.<span style="color: black;">click_select_email</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
signin.<span style="color: black;">click_sign_in</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
<span style="color: #ff7700;font-weight:bold;">assert</span> selenium.<span style="color: black;">find_element_by_id</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'logout'</span><span style="color: black;">&#41;</span>.<span style="color: black;">is_displayed</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span></pre></td></tr></table></div>

<p>For the latest documentation on the BIDPOM project refer to the <a href="https://github.com/davehunt/bidpom/wiki">github wiki</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blargon7.com/2012/02/automating-browserid-with-selenium/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Case Conductor pytest plugin proposal</title>
		<link>http://blargon7.com/2012/01/case-conductor-pytest-plugin-proposal/</link>
		<comments>http://blargon7.com/2012/01/case-conductor-pytest-plugin-proposal/#comments</comments>
		<pubDate>Wed, 11 Jan 2012 18:03:16 +0000</pubDate>
		<dc:creator>Dave</dc:creator>
				<category><![CDATA[Mozilla]]></category>
		<category><![CDATA[QMO]]></category>
		<category><![CDATA[case conductor]]></category>
		<category><![CDATA[litmus]]></category>
		<category><![CDATA[mozilla]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[pytest]]></category>
		<category><![CDATA[webqa]]></category>

		<guid isPermaLink="false">http://blargon7.com/?p=82</guid>
		<description><![CDATA[Case Conductor is the new test case management tool being developed by Mozilla to replace Litmus. I&#8217;ve recently been thinking about how we can improve the relationship between our automated tests and our test case management, and want to sare &#8230; <a href="http://blargon7.com/2012/01/case-conductor-pytest-plugin-proposal/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Case Conductor is the new test case management tool being developed by Mozilla to replace Litmus. I&#8217;ve recently been thinking about how we can improve the relationship between our automated tests and our test case management, and want to sare my thoughts on how a plugin could help our WebQA team do just that.</p>
<h2>Annotating tests</h2>
<p>Currently our automated tests include a docstring referencing the Litmus ID. This is inconsistent (some even include a full URL to the test case) and hard to do anything with. It&#8217;s important to reference the test case, but I see this as the bare minimum.</p>
<p><strong>Current method</strong></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code"><pre class="python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">def</span> test_empty_search<span style="color: black;">&#40;</span><span style="color: #008000;">self</span>, mozwebqa<span style="color: black;">&#41;</span>:
    <span style="color: #483d8b;">&quot;&quot;&quot;Litmus 13847&quot;&quot;&quot;</span>
    feedback_pg = FeedbackPage<span style="color: black;">&#40;</span>mozwebqa<span style="color: black;">&#41;</span>
    feedback_pg.<span style="color: black;">go_to_feedback_page</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
    feedback_pg.<span style="color: black;">search_for</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">''</span><span style="color: black;">&#41;</span>
    Assert.<span style="color: black;">greater</span><span style="color: black;">&#40;</span><span style="color: #008000;">len</span><span style="color: black;">&#40;</span>feedback_pg.<span style="color: black;">messages</span><span style="color: black;">&#41;</span>, <span style="color: #ff4500;">0</span><span style="color: black;">&#41;</span></pre></td></tr></table></div>

<p>I would prefer to use a custom pytest mark, which would accept a single ID or a list. By doing this we can cleanly use the IDs without having to write a regex or conform to a strict docstring format.</p>
<p><strong>Proposed method</strong></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code"><pre class="python" style="font-family:monospace;">@pytest.<span style="color: black;">mark</span>.<span style="color: black;">cc</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">12345</span><span style="color: black;">&#41;</span>
<span style="color: #ff7700;font-weight:bold;">def</span> test_empty_search<span style="color: black;">&#40;</span><span style="color: #008000;">self</span>, mozwebqa<span style="color: black;">&#41;</span>:
    feedback_pg = FeedbackPage<span style="color: black;">&#40;</span>mozwebqa<span style="color: black;">&#41;</span>
    feedback_pg.<span style="color: black;">go_to_feedback_page</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
    feedback_pg.<span style="color: black;">search_for</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">''</span><span style="color: black;">&#41;</span>
    Assert.<span style="color: black;">greater</span><span style="color: black;">&#40;</span><span style="color: #008000;">len</span><span style="color: black;">&#40;</span>feedback_pg.<span style="color: black;">messages</span><span style="color: black;">&#41;</span>, <span style="color: #ff4500;">0</span><span style="color: black;">&#41;</span></pre></td></tr></table></div>

<h2>Submitting results</h2>
<p>There&#8217;s already <a href="https://github.com/camd/caseconductor-connect" title="Case Conductor API">an API</a> in development for Case Conductor, so it would be great to interface directly with it during automated test runs. We could, for example prompt the user for the product, test cycle, and either a test run or a collection of test suites. With these details it should be possible for every automated run to create a new test run in Case Conductor and mark the linked test cases as passed/failed depending on the result. In addition to the existing reports, we can then also offer a link to the Case Conductor report for the relevant test run.</p>
<h2>Result reports</h2>
<p>We could also use the Case Conductor plugin to enhance the existing HTML report generated by the plugin already in use by WebQA. For example, we could link to the Case Conductor report for the test run, and provide a link for each test case. In the following mockup the new details are highlighted.</p>
<p><a href="http://blargon7.com/wp-content/uploads/2012/01/case-conductor-html-report.png"><img src="http://blargon7.com/wp-content/uploads/2012/01/case-conductor-html-report.png" alt="" title="Mockup of a WebQA HTML report with Case Conductor links" width="613" height="245" class="aligncenter size-full wp-image-84" /></a></p>
<h2>Coverage reports</h2>
<p>By knowing all test cases in the specified product/cycle/run/suites we can report on the automated coverage. This could be used to set goals such as &#8216;automate 75% of product A&#8217;s tests&#8217;, which suddenly become a lot easier to measure. Here&#8217;s another mockup of how this command line report may look.</p>

<div class="wp_syntax"><div class="code"><pre class="none" style="font-family:monospace;">========================================= CASE CONDUCTOR =========================================
------------------------------------- test cases covered (2) -------------------------------------
Entering future date in start date field (test_feedback_custom_date_filter_with_future_start_date)
Entering future date in end date field (test_feedback_custom_date_filter_with_future_end_date)
----------------------------------- test cases not covered (2) -----------------------------------
Filtering by mobile versions
Filtering by desktop versions
----------------------------------------- coverage (50%) -----------------------------------------</pre></div></div>

<p>We could also use tags to indicate test cases that aren&#8217;t worth automating so the coverage is more realistic.</p>
<h2>Command options</h2>
<p>I would propose several command line options in order to cover the above mentioned functionality. In the form of output from &#8211;help, here are my suggestions:</p>

<div class="wp_syntax"><div class="code"><pre class="none" style="font-family:monospace;">Options:
  case conductor:
    -cc-url=str       url of the case conductor instance
    -cc-username=str  case conductor username
    -cc-password=str  case conductor password
    -cc-product=str   product identifier
    -cc-cycle=str     test cycle identifier
    -cc-run=str       test run identifier
    -cc-suite=str     test suite identifiers (comma separated)
    -cc-coverage      show the coverage report</pre></div></div>

<p>Some of these would be mandatory but could fail with useful messages if omitted. For example, if the product was not provided then a list of available products could be returned. The same could be done for test cycles and test runs.</p>
]]></content:encoded>
			<wfw:commentRss>http://blargon7.com/2012/01/case-conductor-pytest-plugin-proposal/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hooking Android up to the (Selenium) Grid</title>
		<link>http://blargon7.com/2011/12/hooking-android-up-to-the-selenium-grid/</link>
		<comments>http://blargon7.com/2011/12/hooking-android-up-to-the-selenium-grid/#comments</comments>
		<pubDate>Fri, 16 Dec 2011 00:41:34 +0000</pubDate>
		<dc:creator>Dave</dc:creator>
				<category><![CDATA[Mozilla]]></category>
		<category><![CDATA[QMO]]></category>
		<category><![CDATA[Selenium]]></category>

		<guid isPermaLink="false">http://blargon7.com/?p=80</guid>
		<description><![CDATA[When I set myself a Q4 goal of getting a small suite of Mozilla&#8217;s WebQA tests running on Android I didn&#8217;t think it would be much work. The AndroidDriver has been around for some time, and from what I understood &#8230; <a href="http://blargon7.com/2011/12/hooking-android-up-to-the-selenium-grid/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>When I set myself a Q4 goal of getting a small suite of Mozilla&#8217;s WebQA tests running on Android I didn&#8217;t think it would be much work. The AndroidDriver has been around for some time, and from what I understood it was pretty mature &#8211; I had even run a couple of tests locally against it and they worked well. What I found was there were a couple of important gotchas&#8230;</p>
<p>The first was that the port forwarding that&#8217;s necessary to run tests on an Android emulator or device binds to localhost. This isn&#8217;t a problem so long as the test commands originate from the same machine as the emulator/device is attached to, however that doesn&#8217;t make it very useful for Selenium Grid, where we want to run several emulators/devices remotely.</p>
<p>I was suprised that this issue had not come up before&#8230; I didn&#8217;t think I could possibly be the first person to want to hook up an AndroidDriver to Selenium Grid..! After searching around for a solution I decided to leave things for a while to take care of other priorities. I was then pulled back into the problem when my fellow Mozillian <a href="http://agbeame.org">Raymond Etornam</a> came across the same issue and was looking for a solution.</p>
<p>Raymond and I approached <a href="https://twitter.com/#!/dounerose">Dounia Berrada</a>, who heads up the AndroidDriver efforts at Google, and as a result of this discussion, Raymond <a href="http://code.google.com/p/selenium/issues/detail?id=3022">raised an issue in the Selenium project</a>. Dounia got to the bottom of the issue and found a very simple solution, using socat to listen on another port on all interfaces and forward traffic to the localhost bound port forward configured by ADB. The Selenium project&#8217;s wiki has been updated with <a href="http://code.google.com/p/selenium/wiki/AndroidDriver#Can%27t_access_the_Android_server_from_another_machine">the solution</a>.</p>
<p>The second issue I had was registering the AndroidDriver with Selenium Grid. This is simply a case of posting the correct JSON to the server, and is something that&#8217;s done for you when launching a Selenium server. The quick solution would have been to just start a Selenium server with the details for the Android node. This feels like too much of a hack, plus I didn&#8217;t really want the server running constantly when it&#8217;s not really doing anything other than consuming resources.</p>
<p>I decided to write a very simple Python package that would take a few arguments, construct the necessary JSON and post it to the Selenium Grid. I&#8217;ve released this as FlynnID (there&#8217;s a reference to &#8216;The Grid&#8217; if you look hard enough) and it&#8217;s available <a href="http://pypi.python.org/pypi/FlynnID">on PyPI</a>, with the source code <a href="https://github.com/davehunt/flynnid">on github</a>.</p>
<p>A more long term solution will be to have the AndroidDriver register with a Selenium Grid when it&#8217;s started. If anyone is keen to look into this please get in touch!</p>
<p>So with these issues resolved, I was able to finally put together the first mobile test suite. I migrated the <a href="https://github.com/mozilla/input-tests">Input tests</a> to WebDriver, did a lot of cleaning up, and split them into <a href="https://github.com/mozilla/input-tests/tree/master/tests/desktop">desktop</a>/<a href="https://github.com/mozilla/input-tests/tree/master/tests/mobile">mobile</a> tests. There&#8217;s only one mobile test there at the moment, but now we have everything in place we can go full speed into test development! If you&#8217;re interested in helping us out to write more tests or improve our frameworks/infrastructure then the <a href="https://quality.mozilla.org/teams/web-qa/">WebQA page</a> on <a href="https://quality.mozilla.org">QMO</a> is a great place to start.</p>
<p>Oh, I&#8217;ve also added a cute Android icon <a href="http://blargon7.com/wp-content/uploads/2011/12/android.png"><img class="alignnone size-full wp-image-81" title="Android robot icon" src="http://blargon7.com/wp-content/uploads/2011/12/android.png" alt="" width="16" height="16" /></a> to Selenium Grid, which will be available from version 2.16.0.</p>
]]></content:encoded>
			<wfw:commentRss>http://blargon7.com/2011/12/hooking-android-up-to-the-selenium-grid/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Q3/2011 in review</title>
		<link>http://blargon7.com/2011/10/q32011-in-review/</link>
		<comments>http://blargon7.com/2011/10/q32011-in-review/#comments</comments>
		<pubDate>Fri, 07 Oct 2011 16:02:09 +0000</pubDate>
		<dc:creator>Dave</dc:creator>
				<category><![CDATA[Mozilla]]></category>
		<category><![CDATA[QMO]]></category>
		<category><![CDATA[addons]]></category>
		<category><![CDATA[continuous integration]]></category>
		<category><![CDATA[endurance tests]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[mozilla]]></category>
		<category><![CDATA[mozmill]]></category>
		<category><![CDATA[qa]]></category>
		<category><![CDATA[review]]></category>
		<category><![CDATA[selenium]]></category>
		<category><![CDATA[selenium ide]]></category>
		<category><![CDATA[tests]]></category>

		<guid isPermaLink="false">http://blargon7.com/?p=77</guid>
		<description><![CDATA[In the hope that I might inspire others to do the same, I&#8217;ve created a few screencasts showing some of the cool things I worked on in the last quarter. I&#8217;ve tried to keep them all short, and they&#8217;re all &#8230; <a href="http://blargon7.com/2011/10/q32011-in-review/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>In the hope that I might inspire others to do the same, I&#8217;ve created a few screencasts showing some of the cool things I worked on in the last quarter. I&#8217;ve tried to keep them all short, and they&#8217;re all available in HD so no need to squint to see details.</p>
<h2>pytest plugin for WebQA</h2>
<p><iframe width="640" height="360" src="http://www.youtube.com/embed/5zTISvm-GNA?rel=0&amp;hd=1" frameborder="0" allowfullscreen></iframe></p>
<h2>Endurance tests daily results</h2>
<p><iframe width="640" height="360" src="http://www.youtube.com/embed/-pY_9hbNlxc?rel=0&amp;hd=1" frameborder="0" allowfullscreen></iframe></p>
<h2>System graphics details in endurance reports</h2>
<p><iframe width="640" height="360" src="http://www.youtube.com/embed/Or1rAv12Ygk?rel=0&amp;hd=1" frameborder="0" allowfullscreen></iframe></p>
<h2>Running the Mozmill tests in Jenkins</h2>
<p><iframe width="640" height="360" src="http://www.youtube.com/embed/z_YiIiJJyeo?rel=0&amp;hd=1" frameborder="0" allowfullscreen></iframe></p>
<h2>Running the Selenium IDE Mozmill tests in Bamboo</h2>
<p><iframe width="640" height="360" src="http://www.youtube.com/embed/Ctb9fpV5-KE?rel=0&amp;hd=1" frameborder="0" allowfullscreen></iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://blargon7.com/2011/10/q32011-in-review/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Adding Mozmill tests to the Selenium IDE build system</title>
		<link>http://blargon7.com/2011/09/adding-mozmill-tests-to-the-selenium-ide-build-system/</link>
		<comments>http://blargon7.com/2011/09/adding-mozmill-tests-to-the-selenium-ide-build-system/#comments</comments>
		<pubDate>Wed, 28 Sep 2011 14:53:11 +0000</pubDate>
		<dc:creator>Dave</dc:creator>
				<category><![CDATA[Mozilla]]></category>
		<category><![CDATA[QMO]]></category>
		<category><![CDATA[Selenium]]></category>
		<category><![CDATA[addons]]></category>
		<category><![CDATA[continuous integration]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[mozilla]]></category>
		<category><![CDATA[mozmill]]></category>
		<category><![CDATA[selenium]]></category>
		<category><![CDATA[selenium ide]]></category>

		<guid isPermaLink="false">http://blargon7.com/?p=73</guid>
		<description><![CDATA[Back in April I blogged about the Mozmill tests I&#8217;d written to test Selenium IDE. I followed up in June with a blog post covering how to run these tests. The natural progression is to add these tests into the &#8230; <a href="http://blargon7.com/2011/09/adding-mozmill-tests-to-the-selenium-ide-build-system/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Back in April I blogged about the <a href="http://blargon7.com/2011/04/testing-selenium-ide-with-mozmill/" title="Testing Selenium IDE with Mozmill">Mozmill tests I&#8217;d written to test Selenium IDE</a>. I followed up in June with a blog post covering <a href="http://blargon7.com/2011/06/running-the-selenium-ide-mozmill-tests/" title="Running the Selenium IDE Mozmill tests">how to run these tests</a>. The natural progression is to add these tests into the existing Selenium IDE build environment, which is run using Atlassian&#8217;s continuous integration server, <a href="http://www.atlassian.com/software/bamboo/">Bamboo</a>.</p>
<p>At Mozilla, we want to run the Mozmill tests for the released versions of add-ons against the latest builds of Firefox. This is to determine any regressions in Firefox that will potentially cause issues for the add-on authors. It also gives the add-on authors an early warning if there is a potential compatibility issue with an upcoming release of Firefox. We currently run these tests on a schedule, but will soon be looking to move to a continuous integration solution ourselves. You can see the results of these daily tests <a href="http://mozmill-release.brasstacks.mozilla.com/#/addons/reports">on our dashboard</a>.</p>
<p>The add-on authors (Selenium in this case) are typically more interested to know if the latest build of their add-on is functioning in the current version of Firefox, to give them confidence to release bug fixes and new features without regressions. As the Selenium project already uses continuous integration, adding the Mozmill test step to this is a great step towards achieving the same within Mozilla, and immediately benefits the add-on author.</p>
<p>The Selenium IDE project plan in Bamboo has three stages: Build, Test, and Package. I&#8217;m going to focus on the Test stage in this blog post, as the other stages are very specific to Selenium. If you&#8217;re reading this and you develop a Firefox add-on then you should be able to apply the following to your project without too much tweaking.</p>
<h2>Prerequisites</h2>
<p>There are just two prerequisites for running these tests:</p>
<ul>
<li><strong>Python</strong>: The automation scripts are written in Python, so this is required.</li>
<li><strong>Mercurial</strong>: You must have the Python modules for Mercurial installed, as this is the source code management tool that the automation scripts and tests are using.</li>
</ul>
<h2>Tasks</h2>
<p>There are several tasks to complete for the Tests build. Below I list these tasks, with an explanation and configuration steps for each.</p>
<h3>Clone mozmill-tests</h3>
<p>Because we&#8217;re wanting to run the tests against a specific build of the add-on rather than the latest release, we need to clone the mozmill-tests repository and override the addons.ini file with the location of our target add-on. This is simply a Mercurial task, as follows:</p>
<p><tt>hg clone http://hg.mozilla.org/qa/mozmill-tests</tt></p>
<p>Note that if you have Mercurial set up as an executable in your continuous integration server then you may not need the &#8216;hg&#8217; part of this command, as it will be substituted based on the agent running the command.</p>
<h3>Switch branch</h3>
<p>By default the mozmill-tests repository will be set to the <tt>default</tt> branch. This is paired with the <tt>mozilla-central</tt> branch of Firefox, and therefore is relevant only when running tests against the very latest nightly builds of Firefox. As we&#8217;re interested in testing against the latest release, we switch to the <tt>mozmill-release</tt> branch.</p>
<p><tt>hg checkout mozilla-release</tt></p>
<p>You will need to make sure this command is run within the directory of the cloned mozmill-tests repository, which by default will be simply <tt>mozmill-tests</tt>.</p>
<h3>Create addon.ini</h3>
<p>The addon.ini file tells the script where to download/install the add-on from. If you didn&#8217;t create your own then it would likely be downloaded from addons.mozilla.org or the add-on author&#8217;s preferred download location for the latest release. The file is essentially an ini file, with locations for linux, mac, and windows. If your continuous integration server provides a link to latest artifacts then you can add this, or you can use some sort of artifact sharing such <a href="http://confluence.atlassian.com/display/BAMBOO/Configuring+Artifact+Sharing+between+Jobs">as there is in Bamboo</a>. The following commands create a suitable addon.ini for Selenium IDE.</p>
<p><tt>echo "[download]" > tests/addons/ide@seleniumhq.org/addon.ini<br />
echo "linux=file://${bamboo.build.working.directory}/selenium-ide.xpi" >> tests/addons/ide@seleniumhq.org/addon.ini<br />
echo "mac=file://${bamboo.build.working.directory}/selenium-ide.xpi" >> tests/addons/ide@seleniumhq.org/addon.ini<br />
echo "win=file://${bamboo.build.working.directory}/selenium-ide.xpi" >> tests/addons/ide@seleniumhq.org/addon.ini</tt></p>
<p>If you&#8217;re using Jenkins, then the <a href="https://wiki.jenkins-ci.org/display/JENKINS/Copy+Artifact+Plugin">Copy Artifact Plugin</a> could be useful for sharing artifacts between builds.</p>
<h3>Commit addon.ini</h3>
<p>It&#8217;s necessary to commit the replacement addon.ini file so that it is included when the local repository is cloned when running the tests.</p>
<p><tt>hg commit -m 'Specify latest build of addon.'</tt></p>
<p>Note: It really doesn&#8217;t matter what you put for the commit message here as this commit is not preserved between builds.</p>
<h3>Download latest Firefox release</h3>
<p>Rather than having to make sure your build agent always has the latest version of Firefox installed, there&#8217;s a handy script that can download this for you. This is a Python script, and therefore needs to be set up to use the Python executable.</p>
<p><tt>./download.py --directory=latest-release --platform=mac --type=release --version=latest</tt></p>
<p>Substitute the value of the platform for whatever platform your build agent is running. The latest release of Firefox will be downloaded to the <tt>latest-release</tt> directory. Note that the version value of &#8216;latest&#8217; is relying on a symlink on Mozilla&#8217;s FTP server, that points to the directory of the latest released version number.</p>
<h3>Run Mozmill tests</h3>
<p>You can now run the script that executes the Mozmill tests.</p>
<p><tt>./testrun_addons.py --junit=results.xml --logfile=results.log --repository=mozmill-tests --target-addons=ide@seleniumhq.org --with-untrusted latest-release</tt></p>
<p>Here&#8217;s an explanation of the command line options:</p>
<ul>
<li>The <tt>junit</tt> command line option determines where the results will be stored. The JUnit report format is one supported by many continuous integration servers, and often provides some nice reporting and visualizations of the results. This destination filename is substituted with a counter for each file created, for example <tt>results.xml</tt> will be <tt>results_0.xml</tt>.</li>
<li>Adding the <tt>logfile</tt> is optional, however this can be a useful build artifact if you have failures.</li>
<li>As we&#8217;re using a locally modified repository, we need to specify the location of this using the <tt>repository</tt> command line option. The default location will be <tt>mozmill-tests</tt>.</li>
<li>We need to set the target add-on using the <tt>target-addon</tt> option. This must match the directory beneath <tt>tests/addons</tt>, which in the case of Selenium IDE is <tt>ide@seleniumhq.org</tt>.</li>
<li>The <tt>with-untrusted</tt> flag is necessary if the add-on is not hosted at <a href="http://addons.mozilla.org">addons.mozilla.org</a>. Any add-on hosted by Mozilla will be implicitly trusted. As Selenium IDE is not currently hosted by Mozilla, this flag is necessary.</li>
<li>Finally, the path to the Firefox binary is needed. It&#8217;s possible to simply point to a directory that contains a downloaded copy of Firefox, so we just use <tt>latest-release</tt> as that&#8217;s where our download task was told to put Firefox.</li>
</ul>
<h3>Parse test results</h3>
<p>As mentioned above, a lot of continuous integration servers support results in JUnit report format, so your final task may be to specify the location of these files. If you used the example given above, then you will specify these using <tt>results*.xml</tt>.</p>
<p>The Bamboo instance for Selenium is publically viewable, so you can see the <a href="http://xserve.openqa.org:8085/browse/IDE-EDITOR-MOZMILL">results of recent builds for Selenium IDE</a>, and the <a href="http://xserve.openqa.org:8085/browse/IDE-EDITOR-MOZMILL/latest">report for the latest build</a>. You can also see the results on the <a href="http://mozmill-archive.brasstacks.mozilla.com/#/addons/reports">Mozmill archive dashboard</a>. The Selenium IDE project is built whenever a change is committed to the core or dependent code sections of the repository. It can also be triggered manually.</p>
<p>Unfortunately the Selenium build hardware is experiencing stability issues at the time of writing this, meaning that there is not always a suitable build agent for the Mozmill tests.</p>
<h2>Known issues</h2>
<p>Currently there is an issue with the Mozmill automation script, in that it will exit without an error code even when tests have failed. Fortunately, the continuous integration servers that I&#8217;ve been working with update the build success based on the JUnit reports. If this wasn&#8217;t the case then builds with failing tests would be incorrectly reported as successful. We have a <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=626712">bug 626712 on file</a> for this issue, and it will hopefully be resolved soon.</p>
]]></content:encoded>
			<wfw:commentRss>http://blargon7.com/2011/09/adding-mozmill-tests-to-the-selenium-ide-build-system/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Running the &#8216;Mem Buster&#8217; endurance test</title>
		<link>http://blargon7.com/2011/08/running-the-mem-buster-endurance-test/</link>
		<comments>http://blargon7.com/2011/08/running-the-mem-buster-endurance-test/#comments</comments>
		<pubDate>Tue, 23 Aug 2011 15:19:49 +0000</pubDate>
		<dc:creator>Dave</dc:creator>
				<category><![CDATA[Mozilla]]></category>
		<category><![CDATA[QMO]]></category>
		<category><![CDATA[endurance tests]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[membuster]]></category>
		<category><![CDATA[memory]]></category>
		<category><![CDATA[memshrink]]></category>
		<category><![CDATA[mozmill]]></category>
		<category><![CDATA[performance]]></category>

		<guid isPermaLink="false">http://blargon7.com/?p=68</guid>
		<description><![CDATA[I blogged a few weeks ago about how I was able to demonstrate improvements to the memory usage of Firefox using endurance tests. The test I was using was inspired by Stuart Parmenter&#8217;s Mem Buster test, and it has now &#8230; <a href="http://blargon7.com/2011/08/running-the-mem-buster-endurance-test/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I <a href="http://blargon7.com/2011/07/endurance-tests-demonstrate-firefoxs-memory-usage-improvements/">blogged</a> a few weeks ago about how I was able to demonstrate improvements to the memory usage of Firefox using endurance tests. The test I was using was inspired by Stuart Parmenter&#8217;s <a href="http://random.pavlov.net/membuster/index.html">Mem Buster</a> test, and it has now been checked into the repository and available for anyone to run.</p>
<p>At the moment it&#8217;s only possible to run the Mem Buster test from the command line (hopefully Mozmill Crowd support won&#8217;t be too far off). The first thing you&#8217;ll need is the mozmill-automation repository checked out. If you already have this then you&#8217;ll need to do a <tt>pull</tt> and <tt>update</tt> to make sure you have the latest changes.</p>
<p><code>hg clone http://hg.mozilla.org/qa/mozmill-automation</code></p>
<p>Then, from the <tt>mozmill-automation</tt> directory, run the following command:</p>
<p><code>./testrun_endurance.py --reserved=membuster --delay=3 --iterations=2 --entities=100 --report=http://mozmill-crowd.brasstacks.mozilla.com/db/ /Applications/Firefox.app</code></p>
<p>The <tt>reserved</tt> argument test the script to only run the Mem Buster test and not the general endurance tests. The test opens a site for each entity, so by specifying 100 entities and 2 iterations it will open a total of 200 sites. The delay of 3 seconds is from the original Mem Buster test. I would recommend including the report argument as this shares your results and allows you to see the visualisation of memory usage during the test. The final argument is the location of the version of Firefox you want to run the tests against.</p>
<p>Below is a screencast demonstrating the Mem Buster endurance test on Windows 7:</p>
<p><iframe width="640" height="390" src="http://www.youtube.com/embed/B53giBQpbok?rel=0&amp;hd=1" frameborder="0" allowfullscreen></iframe></p>
<p>If you’re interested in following the progress of the endurance tests project, check out the <a href="https://wiki.mozilla.org/QA/Mozmill_Test_Automation/Endurance_Tests">project page</a>. For further help you can find the documentation <a href="https://wiki.mozilla.org/QA/Mozmill_Test_Automation/Endurance_Tests/Documentation">here</a>, post a comment to this entry, or ask a question in the <a href="http://quality.mozilla.org/forums">QMO forums</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blargon7.com/2011/08/running-the-mem-buster-endurance-test/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Goodbye micro-iterations. Hello entities</title>
		<link>http://blargon7.com/2011/08/goodbye-micro-iterations-hello-entities/</link>
		<comments>http://blargon7.com/2011/08/goodbye-micro-iterations-hello-entities/#comments</comments>
		<pubDate>Wed, 17 Aug 2011 20:44:30 +0000</pubDate>
		<dc:creator>Dave</dc:creator>
				<category><![CDATA[Mozilla]]></category>
		<category><![CDATA[endurance tests]]></category>
		<category><![CDATA[mozmill]]></category>

		<guid isPermaLink="false">http://blargon7.com/?p=66</guid>
		<description><![CDATA[Last month I blogged about the addition of micro-iterations in endurance tests. I was never 100% happy with the name for these, and although &#8216;micro-iteration&#8217; is a good description of what&#8217;s happening (it&#8217;s a loop within a loop) it&#8217;s difficult &#8230; <a href="http://blargon7.com/2011/08/goodbye-micro-iterations-hello-entities/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Last month I blogged about the addition of <a href="http://blargon7.com/2011/07/micro-iterations-in-endurance-tests/">micro-iterations in endurance tests</a>. I was never 100% happy with the name for these, and although &#8216;micro-iteration&#8217; is a good description of what&#8217;s happening (it&#8217;s a loop within a loop) it&#8217;s difficult to say, and can be difficult to clearly identify when you&#8217;d use them.</p>
<p>During a between session chat with <a href="http://quality.mozilla.org/members/geo/">Geo Mealer</a> during the recent <a href="http://quality.mozilla.org/teams/automation/">QA Automation Services</a> work week, he suggested calling these &#8216;entities&#8217;. This is perfect, because the purpose of these inner loops is to allow an endurance test to interact with multiple entities rather than just one.</p>
<p>The simple example is the new tab test, which opens multiple new tabs. In this case, the tab is the entity. A more involved example is the in-progress <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=670721">app tab test</a>, where a tab is still an entity but we interact with it in multiple ways. First, we open the specified number of tabs, then we pin them all, then we unpin them all.</p>
<p>The rename has now landed, and documentation has been updated. From the perspective of writing tests nothing has changed, the only changes are the name of the command line argument and the method names in the <tt>endurance.js</tt> shared module.</p>
]]></content:encoded>
			<wfw:commentRss>http://blargon7.com/2011/08/goodbye-micro-iterations-hello-entities/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>QA Automation Services Work Week 2011 &#8211; Day 1</title>
		<link>http://blargon7.com/2011/07/qa-automation-services-work-week-2011-day-1/</link>
		<comments>http://blargon7.com/2011/07/qa-automation-services-work-week-2011-day-1/#comments</comments>
		<pubDate>Tue, 26 Jul 2011 07:58:40 +0000</pubDate>
		<dc:creator>Dave</dc:creator>
				<category><![CDATA[Events]]></category>
		<category><![CDATA[Mozilla]]></category>
		<category><![CDATA[QMO]]></category>
		<category><![CDATA[automation services]]></category>
		<category><![CDATA[events]]></category>
		<category><![CDATA[mozilla]]></category>
		<category><![CDATA[qa]]></category>
		<category><![CDATA[work week]]></category>

		<guid isPermaLink="false">http://blargon7.com/?p=64</guid>
		<description><![CDATA[QAASWW11 kicked off yesterday with a day of planning at IdeaSpace in Cambridge, UK. We had a meeting room for the day &#8211; kindly offered up by our new friends at Springboard &#8211; and plenty of instant whiteboard! As with &#8230; <a href="http://blargon7.com/2011/07/qa-automation-services-work-week-2011-day-1/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>QAASWW11 kicked off yesterday with a day of planning at <a href="http://www.ideaspace.cam.ac.uk/">IdeaSpace</a> in Cambridge, UK. We had a meeting room for the day &#8211; kindly offered up by our new friends at <a href="http://springboard.com/">Springboard</a> &#8211; and plenty of instant whiteboard! As with the last work week I attended, it was organised UnCon style, which worked really well before. I will say that the first day is usually the most painful, as the entire team filled out their thoughts/needs for the week onto post-it notes, which gradually were organised into groups and ultimately sessions with agendas. Once this was finally done, <a href="https://wiki.mozilla.org/QA/Automation_Services/Meetings/WorkWeek_July2011">the schedule for the week was set out</a>. Although the schedule is incredibly flexible, it really helps to have this set of intentions outlined on the first day.</p>
<p>In the evening, the Springboard teams were kind enough to practice their investor pitches on us, and we saw 10 very promising ideas presented by an incredibly smart and enthusiastic bunch of people. I noticed a very strong lean towards mobile devices in the pitches, which really reflects the current state of the market and the direction things are heading.</p>
<p>After the pitches, everybody relaxed with will deserved beer and pizza, and we had an opportunity to talk with the Springboard guys, who are in their last week.</p>
<p>So ends the first day. Tomorrow we will be working from a cottage, which unfortunately we have already discovered has slow connection to the Internet. This won&#8217;t affect our work week sessions, but will be an obstacle during the time we have scheduled to get on with our day-to-day work activities, as well as communicating with our colleagues and community around the world! If you want to follow our activities for the week, we have created a Twitter hashtag of <a href="http://twitter.com/#!/search?q=%23mozautoqa">#mozautoqa</a>.</p>
<p>Good luck to everyone at Springboard for the investor pitches on Friday, and thank you so much for inviting us to spend the day with you at IdeaSpace!</p>
]]></content:encoded>
			<wfw:commentRss>http://blargon7.com/2011/07/qa-automation-services-work-week-2011-day-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Endurance tests demonstrate Firefox&#8217;s memory usage improvements</title>
		<link>http://blargon7.com/2011/07/endurance-tests-demonstrate-firefoxs-memory-usage-improvements/</link>
		<comments>http://blargon7.com/2011/07/endurance-tests-demonstrate-firefoxs-memory-usage-improvements/#comments</comments>
		<pubDate>Fri, 22 Jul 2011 22:52:28 +0000</pubDate>
		<dc:creator>Dave</dc:creator>
				<category><![CDATA[Mozilla]]></category>
		<category><![CDATA[QMO]]></category>
		<category><![CDATA[endurance tests]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[memshrink]]></category>
		<category><![CDATA[mozilla]]></category>
		<category><![CDATA[mozmill]]></category>

		<guid isPermaLink="false">http://blargon7.com/?p=57</guid>
		<description><![CDATA[Thanks to the amazing efforts of the MemShrink project, Firefox&#8217;s memory usage is seeing some great improvements. In particular, Firefox 7 will be much more efficient with memory than the current version. As endurance tests monitor resources such as memory, &#8230; <a href="http://blargon7.com/2011/07/endurance-tests-demonstrate-firefoxs-memory-usage-improvements/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Thanks to the amazing efforts of the <a href="https://wiki.mozilla.org/Performance/MemShrink">MemShrink project</a>, Firefox&#8217;s memory usage is seeing some great improvements. In particular, <a href="http://www.zdnet.com/blog/hardware/memory-improvements-coming-to-firefox-7/13556">Firefox 7 will be much more efficient with memory than the current version</a>. As endurance tests monitor resources such as memory, it makes sense for us to work together to ensure that we&#8217;re moving in the right direction, and that we don&#8217;t regress in any of these areas.</p>
<p>At this point there are only five endurance tests, and although these can be run with many hundreds of iterations in order to seek out memory leaks in the tested areas, they do nothing to simulate a user. It was suggested that we have a special endurance test similar to Stuart Parmenter&#8217;s <a href="http://random.pavlov.net/membuster/index.html">Mem Buster</a> test.</p>
<p>Creating an initial version of this new test did not take long. Instead of opening sites in new windows I open them in tabs, and the number of sites opened is controlled by iterations and micro-iterations. I also increased the number of sites so we&#8217;d be hitting the same ones less often, and based this new list on <a href="http://www.alexa.com/topsites/category">Alexa&#8217;s top sites</a>. Once I added in handling of modal dialogs that some sites were causing to be displayed then I was able to consistently get results.</p>
<p>This test would appear to be similar to <a href="https://wiki.mozilla.org/Buildbot/Talos#tp5">Talos tp5</a> in that is loads sites from Alexa&#8217;s index, however we&#8217;re not measuring how long each site takes to load. Instead, we move onto the next site after a delay as specified on the command line. I have kept the same delay as the original Mem Buster test, which is 3 seconds.</p>
<p>After running the Mem Buster Endurance Test five times across five versions of Firefox, I found the results to clearly reflect the MemShrink efforts. Although the memory consumption varies somewhat for each run, the general downward trend is unmistakable.</p>
<p>In the following charts you can see the improvement in memory usage between Firefox 4 &#038; 5. These can be directly compared as the endurance tests were measuring the same metrics (allocated memory &#038; mapped memory).</p>
<p><a href="http://blargon7.com/wp-content/uploads/2011/07/firefox4-5.png"><img src="http://blargon7.com/wp-content/uploads/2011/07/firefox4-5.png" alt="Charts showing allocated and mapped memory usage in Firefox 4 &amp; 5" title="Allocated and mapped memory usage in Firefox 4 &amp; 5" width="598" height="448" class="aligncenter size-full wp-image-62" /></a></p>
<p>In Firefox 6 there were several improvements to memory reporting, and the endurance tests were updated to record new metrics (explicit memory &#038; resident memory). You can see in the following charts that explicit memory usage in Firefox 7 is rough half that of Firefox 6! It appears that this has increased in Firefox 8, which will require some further investigation. The resident memory has continued to decrease in each version.</p>
<p><a href="http://blargon7.com/wp-content/uploads/2011/07/firefox6-8.png"><img src="http://blargon7.com/wp-content/uploads/2011/07/firefox6-8.png" alt="Charts showing explicit and resident memory usage in Firefox 6, 7, &amp; 8" title="Explicit and resident memory usage in Firefox 6, 7, &amp; 8" width="598" height="447" class="aligncenter size-full wp-image-61" /></a></p>
<p>You can follow the progress of the Mem Buster Endurance Test <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=669613">in Bugzilla</a>. Full reports from the test runs used in this blog post <a href="http://mozmill-archive.brasstacks.mozilla.com/#/endurance/reports?branch=All&#038;platform=All&#038;from=2011-07-21&#038;to=2011-07-22">can be found here</a>.</p>
<p><strong>Update:</strong> It appears that the explicit memory calculated for Firefox 7 on Mac was artificially low. This explains the slight increase in Firefox 8. If you&#8217;re interested you can read further details <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=673851">on Bugzilla</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blargon7.com/2011/07/endurance-tests-demonstrate-firefoxs-memory-usage-improvements/feed/</wfw:commentRss>
		<slash:comments>24</slash:comments>
		</item>
	</channel>
</rss>

