Reading Time: <10 minutes

What’s up guys! Welcome to

Alright! I have been waiting for this moment because I was stuck with some personal issues, so couldn’t post the blog since a month.

This is a base test automation framework for Native Apps which is implemented using Appium, Selenium, TestNG and Allure Report. This framework supports to run both Android and IOS, it’s possible to extend Windows Phone by creating additional package and added necessary code.

What are we going to take a look?

  • Key Feature of this Framework
  • Device Farm Configuration setup
  • Framework Architecture and implementation
  • App Setup & Configuration
    • Configuring .apk file in SauceLab for Emulator using REST API
    • Configuring .apk file in SauceLab for real devices using REST API
    • Configuring .apk file in SauceLab for real device using Manual upload
  • Parallel Test on Local, Cloud and Genymotion of your Native App

Some of  key feature of this framework:

  • Support iOS and Android Native App
  • Support parallel execution in Cloud (Real device and Emulators), local real device, Genymotion (Please refer video at bottom of the page)
  • Implemented Allure Report which supports to pull parallel test results
  • Implemented Page Object Design Pattern  and Page Actions are segregated in separate package
  • Implemented Common Appium methods in CommonAppium class and Android Utils and IOSUtils classes have own native code related to Mobile Elements
  • Used TestNG which actually support parallel execution based on device input and its capabilities.
  • Possible to enhance flexibility and customization based on business need.
  • Add sample app in resource folder which actually uses to upload in device during test execution
  • Support Device can be setup in Wifi or USB which  must be configured in json file
  • Possible to set Selenium Grid in One Machine, Multiple Appium Server in Same or Different machines where physical device gets connected and Genymotion connected in different machine. For Cloud, no Appium Server required

Device Farm Configuration:

Here is the device farm designed to run your automation suites in local physical, cloud and Genymotion Device farm to make sure automation runs quickly and efficiently with different option.


Automation Framework Architecture and implementation

Driver Implementation UML Basic Diagram:


Automation Framework Architecture Diagram:


App Setup & Configuration

Before go to below setup & configuration, I would recommend to go through the following url and get familiarized with Mobile Automation.

Installing Android Studio on Windows

Installing Appium Desktop and Setting up Selenium Grid

ADB Commands and trouble shooting…

Mobile Test Automation with Genymotion on Window

Configuring .apk file in SauceLab for Emulator using REST API


we use REST API endpoints to upload your app (.apk) in SauceLab which required curl support for your Windows/Linux/Mac Machines.

curl -u <SAUCEUSERNAME>:<SAUCE_KEY> -X POST -H "Content-Type: application/octet-stream"<SAUCEUSERNAME>/your_app.apk?overwrite=true --data-binary @your_app.apk

After you supply the above command, you will receive success message stating username, filename, size, md5 and etag response.

Configuring .apk file in SauceLab for real devices using REST API

The REST API command is same as previous section to upload your .apk file but the difference is, SauceKey is different for real device and rest endpoint url is different. Here we use for storing real device whereas in previous section the endpoint is different.

for eg., below example:

curl -u "<SAUCEUSER>:<SAUCE_KEY>" -X POST -H "Content-Type: application/octet-stream" --data-binary @your_app.apk

Configuring .apk file in SauceLab for real devices using Manual Upload

  1. Once login to SauceLab, Click on “Access Real Device Automation”
  2. Click on “+New App” button
  3. The below page shows button which support website, Native App creation


Parallel Test on Local, Cloud and Genymotion of your Native App

In below videos, My device farm has been setup like below:

  • 1 real device (My mobile) setup in Wifi, which is configured in Selenium Grid
  • 1 Genymotion device setup in physical OS Machine, which is configured in Selenium Grid
  • Configured SauceLab Emulator for Android Device
  • Configured SuaceLab Real Devices running on Cloud


  1. Start Selenium Grid, This is you can setup in your Jenkins Job too.
  2. Start Appium Server for Multiple devices. Each Appium Server is mapped to local real device or Genymotion. Note: We can also start Appium Server in command prompt instead of GUI tool.
  3. Make sure .apk file uploaded in SauceLab for Emulator and real device configuration as mentioned above
  4. All device farm have been successfuly set, now it’s time for execution.

Device Configuration for Parallel Execution:

For this framework, the device config must be set in testsuite.xml, the below one is the template to configure whether your device must run in local/genymotion/saucelab.


Parallel Execution Videos in Local Device/Genymotion and SauceLab

Parallel Execution in Local Device and Genymotion Video:

Parallel Execution in SauceLab Emulator and Real Devices:

Test Results in Allure:


To clone this framework, please visit my bitbucket repo: automationcalling_bitbucket

Note: Appium Server Config and Selenium grid is available under resource folder for further play.

Thanks for your time. Please subscribe for more updates!


  1. Thanks Muthu for this article. Couple of Qs
    1) I am learning mobile automation and of now using 1 physical device to automate using eclipse at my end so will that be a hurdle?
    2) So I think my first target should be selenium grid setup and then follow as u mentioned?
    Please advise.


Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s