Friday, 30 August 2013

How would you check that a www web site redirects to a mobile site?

Normally I add my automation posts to but this particular case study demonstrates how I think about testing and incorporate automation into my test approach.

The scenario you face as a tester:

  • You have a main web site
  • You have a new mobile site
  • You have a set of redirection rules that take you from www to m. based on the device
  • And the device is identified by the user-agent header string
e.g. the redirects to if you have the user-agent set to a mobile device.

The first thought for testing?

  • We need to get a bunch of devices to test this on.
And you probably do. But you limit the scope of your testing to a small subset of the possible set of user-agents out there in the real world.

Second thought?

  •  We could spoof the user-agent.
It becomes a technical test where we use the implementation details and check the scope of the implementation coverage.

But how?

  • Well, Chrome has the override settings where we could choose a different user-agent.
  • We could have our debug proxy change the user-agent for us.
Great. Both of those would work. But require us to do this stuff manually, and it will be slow. We probably still want to do this though, to make sure it renders and that the approach works.

Where will we find the user-agents?

We need an oracle source for our data set of user-agents. Fortunately there are a few sites out there that track what user-agents are in use:
I tend to use - if you have a preference that differs then leave a comment and let me know.
So I wrote some code. And I know about all the "testers shouldn't code", "tester's don't need to code", "blah blah blah" discussions.
I can code. It increases my ability to respond to the variety of conditions on a project. Requisite Variety. I encourage you to learn how to code. (Hey I'm writing a book about that.)
So I code.
I wrote a simple set of Java code that:
  • Uses GhostDriver - the new headless driver wrapper around PhantomJS
  • Visits and scrapes off the user-agent strings
  • Filters the user-agent strings to those that I consider 'mobile' devices
  • Iterates over all those user-agents
  • Creates a new GhostDriver with that user-agent and visits the www site
  • Checks that I redirect to the mobile site
You can find the code over on github:

Surely it would be faster to use direct HTTP calls?

  • Faster to run, but not necessarily faster to write. Yes. 
    • See I can use the WebDriver findElements commands when scraping the page and not have to remember how to parse XML in Java or download another Java library.
    • I can use the WebDriver to visit the site and handle all the redirection for me, rather than write some redirect handling code for the Apache HTTP libraries.
I want to get some automation done fast. That adds value. That augments my manual testing.
I tidied it up a little for release to github so it isn't completely embarassing, but hey ho, it added value. I'll use it again. It looks pretty nasty, but it works.
Sometimes that's the type of automation I write when I test.

But that wasn't the requirement scope!

  • True. It wasn't.
  • The requirement scope was small.
  • Sometimes we have to explore.
  • I look for external oracles and comparative sites and rules to help me evaluate if the requirements meet the actual user need.
  • In this instance I found a lot of user-agents that the redirect rules didn't cover. 

But if it wasn't in the requirements we can't justify the testing!

  • I can use a comparison with other sites handling of the user-agents (e.g. bbc or tfl)
  • I can see if the gaps in the system under test are better or worse than theirs. 
  • BBC didn't handle 1 user-agent I found,
  • TFL didn't handle 3,
  • The system under test didn't handle 100+
I use external oracles, as well as internal oracles. I use the competition to evaluate the system under test. I use multiple sources of information and look from multiple angles.

What would you do?

Do let me know how you would have done it differently.



  2. Alan, first thanks! for your blogs. I enjoy reading them.
    I test a web site that uses responsive for its mobile presence. not really a redirect, but still much of the same idea. I like your solution of scraping the UA and using them.
    I am a newbie and had to figure it all out on my own. What I did was use firefox and create different profiles each with a different user agent and display size associated. This is very basic, but tested the what I needed tested.
    I need to check out GhostDriver and your book.
    One note about the user agents on the sites mentioned. I noticed in my testing that many of the UAs listed did not match what my actual UA was on my physical device. So, I used the physical device that I wanted to emulate and went to and found exactly the UA I needed. Surprisingly, the i-devices acted a little differently than the standard UAs that I had found on the web.

    Keep the blogs coming :)


    1. Thanks Kerri,

      Good web link reminder.

      I've used as well when trying to replicate issues from my device on my desktop.

      I paste the user agent string into Evernote to sync it across to my desktop because I couldn't tryst myself to retype it on a different machine :)

      The new Chrome override functionality really makes the desktop testing a lot easier

      Also Gergely ( brought Ripple to my attention