Friday, April 21, 2017

Introducing MAD LAB - for Mobile Automation

The past few months I have been heads-down in stabilising my Real-Device Mobile Test Lab - which we now call MAD LAB (Mobile Automation Devices LAB) .

For those who may not recollect, see my past posts for reference -

Along with my colleagues, we have put in lot of effort in setting up MAD LAB and have now added a lot of rich features to help running tests, seeing the results and making sense out of them easier. 
  • All infrastructure management is implemented now in groovy (instead of gradle as shared earlier).
  • Actual test implementation is done in cucumber-jvm / java

List of features currently implemented:
  • Device management (selection, cleanup, app install and uninstall)
  • Parallel test execution (at Cucumber scenario level) - maximising device utilisation)
  • Appium server management
  • Adb utilities 
  • Managing periodic ADB server disconnects
  • Custom reporting using cucumber-reports
  • Video recording of each scenario and embedding in the custom reports

Contents of MAD LAB:
  • 1 Mac Minis - running various Jenkins Agents
  • 2 Powered USB hubs
  • 8 Android devices

Here are some pictures from the setup.

There are many more features, in various stages of implementation, being added to make MAD LAB more powerful.

Sneak peek into whats coming:
  • Analytics Testing
  • Trend and Failure Analysis 
  • iOS
  • Web
  • A transformed MAD LAB

Finding MAD LAB interesting? Some very interesting changes are coming in soon. Watch out for my next blog post for that. 

Want to contribute and be part of this journey? Even better! Reach out to me!


  1. Hi Anand,
    Nice to see all your blogs. I actually wanted to build my own device lab as I cant use any cloud service due to hardware dependency . I came through this blog and found it useful. Is there any other blog describing how you achieve this? Any step wise documents ? Appreciate your time!. Awaiting your response .Thanks!

    1. Hi @Dishant, you can also see

      That said, it is complicated to build your own infra from ground-up (i.e. manage devices, drivers, parallel execution, reporting, logs, videos, etc.) It helps if you can reuse instead of build everything from scratch.

      For this, I recommend you take a look at ATD - I contribute to that framework as well, and am in the process of adding cucumber-jvm support, along with Windows Driver to that. This is a sample repository of how to build a good framework using ATD. Note - this is work in progress right now.

      Hope this helps.