‘Mobile Only’ is our motto at hike. We’re in a very competitive space of mobile messaging where there is a lot to be done. As a result, speed is of the utmost importance and thus being able to test a mobile app across all platforms in a meaningful way & that too at an amazing speed is key. This can be extremely challenging given that we build for 7 mobile platforms (yes, 7!); all the way down to J2ME and S60. Our Engineering Team works in quick sprints and it is really important to ensure that our speed does not hamper our product quality. As a result, we tend to ship out many builds internally but this also increases number of builds we have to test and thus increases the overhead on quality engineers regressing all aspects of product.
So we wanted to build an automation platform that may take care of rapid pace of building product. We decided on building automation frameworks at every level of development (Client Side / Server Side / Scalability / Load / Database and Overall Code Metrics).
In this blog post, we aim to cover some of the efforts and tool choices we made to test the clients and improve our entire Quality Assurance process to make it more efficient.
Part I: Client side automation “Ensuring no bugs for our awesome users”
We focussed on Android and iOS client as the first set of clients for automation. We’ve evaluated multiple tools and narrowed down on the following as our automation arsenal – Appium, UiAutomator, TestNG, JUnit to name a few.
So, did we choose the right tools? Looking at the below decision table, we are sure “YES”.
Appium is a reliable automation tool which is comparatively new in the market but has really promising features. Few advantages that we could leverage using Appium are :
We could build a framework that uses almost same test scripts and reusable components for both Android and iOS. The only prominent difference is of object repository, otherwise both platforms go hand-in-hand.
Tests could be run on more than 1 device in parallel. Since ours is a messaging app, this feature was the most important requirement. So we can have two instances of android devices or two instances of iOS devices or combination of android and iOS devices interacting with each other in parallel.
Supports multi programming languages like java, python, nodeJS, etc. We chose good ol’ JAVA!!
Runs well with all Android API levels even (<17 API level).
Appium uses Selenium Webdriver APIs to interact with devices, so it is much easy to write scripts if you have any experience with selenium. It also supports various touch gestures to simulate user interaction with Android and iOS like swipe, double tap, long press, etc.
Best part is, it is well integrated with Jenkins – Which means with single button click (or with every dev checkin), we can know about app’s health. Take a look below to understand more:
Since it is somewhat difficult to automate most of the things using any single mobile automation tool, we have UiAutomator to take care what Appium could not achieve for Android. So it is a combination of Appium and UiAutomator that forms the backbone of Android automation.
Using the combination of these tools actually helps us to achieve what we want to achieve & that too at precisely the same point when we want to achieve. These tools allow us to dramatically accelerate the overall development process at hike.
Whats up next: “Part II: Automating our server stack, overall code quality & database testing.”
Till the time Happy Testing!