Mobile Application Testing using Automation frameworks
By Arnab Roy Chowdhury, Community Contributor - October 15, 2021
In the last decade, there has been a proliferation of smartphone users. Today, US citizens are spending more time on mobile devices than on television.
Source – eMarketer.com
A few more interesting facts in this regards:
- Mobile apps are anticipated to generate $935 billion in revenue by 2023.
- 21% of millennials open an app more than 50 times each day.
- In the US, 69% of digital media time emerges from mobile apps.
Needless to say, mobile apps dominate a large part of people’s day-to-day experiences. Thus developing a great mobile app experience is essential. To ensure that apps work seamlessly on Android and iOS, they must be thoroughly tested before being released to respective app stores.
In this article, we will discuss a few mobile app testing tools that are often used to verify app functionality before releasing them. We will talk about the most popular testing frameworks and see how to use some of them like Appium, Selendroid.
Automated Mobile Application Testing Frameworks
There are many frameworks and tools used for mobile application testing. Some of the most popular ones are:
Appium is especially favored for being a flexible, cross-platform framework that testers can be used to create test scripts applicable to multiple platforms (Windows, iOS, and Android) – using the same API. Essentially, Appium uses can reuse their source code for Android as well as iOS, thus reducing time and effort. going into building tests.
Calabash is a mobile test automation framework that works with multiple languages. It supports Ruby, Java, Flex, and .NET. Testers can use APIs for enabling native applications that run on touch screen devices. This framework has libraries that allow test scripts to interact programmatically with native and hybrid apps.
Among mobile testing tools, this one is best known for testing iOS apps. Launched by Apple in 2015, XCUITest is a framework meant to create and run UI tests on iOS apps using Swift / Objective C. It is often considered the best instrument to create automated tests on native iOS apps. It is known for fast execution, intuitive operation, low flakiness, and easy test management.
However, it is not a cross-platform framework, which means tests written here cannot be reused to verify Android apps. Additionally, you can’t pick any programming language to create tests (Java, Ruby, Python). Only Swift will do.
Despite these limitations, XCUITest is considered most effective when working with iOS apps because of the fact that it has been designed by Apple to align flawlessly with their environment.
Developed by Google, EarlGrey is a testing framework especially useful for creating UI and functional tests. It utilizes Unit Testing Target and is equipped with robust, in-built synchronization that enables easier creation and maintenance of tests.
EarlGrey 2.0 combines EarlGrey with XCUITest, thus allowing iOS testing along with Android. In fact, Google uses EarlGrey to test iOS versions of its apps such as Youtube, Gmail, etc.
Selendroid is also known as selenium for mobile apps for Android. Testers can do native and hybrid mobile application testing using Selendroid. Selendroid can execute parallel test cases on multiple devices, similar to Selenium for cross browser testing.
Espresso is a mobile automation framework from Google that enables the creation and deployment of UI tests for Android applications. Since testing the user interface of an application is essential before deploying it, app developers and app testers widely use Espresso. Developers can create a scenario and record how they interact with a device. Next, they can add assertions that verify the behavior of the UI elements of the app by capturing snapshots. The tool saves the recording and generates UI test cases that they can use to test their application.
It allows both black-box testing as well as testing of individual components during development cycles. This robust framework allows developers to test both Android native views as well as hybrid web-views. Espresso test cases can be crafted in Java or Kotlin. Among its many useful features, synchronized test executions, intent validations, and capabilities to run recipes stand out and are reported as user favorites.
Robotium is a popular open-source tool dedicated to testing android applications only. The test cases are written in Java. Robotium is popular for its ability to write automated black-box test cases. It automates multiple activities that a tester can execute on their android app and takes minimal time to write test cases.
Other than these, there are other popular tools like Monkeytalk, Testdroid, Frank, UIAutomator.
Tips and Best Practices for Automated Mobile App Testing
Below are some best practices that engineering teams should follow while thinking about automated mobile application testing :
- Make Application Testable
In the current agile age, developers have to build applications that are ready for testing. Developers should actively discuss with testing teams to set guidelines. For example, developers should give elements a unique ID to make them testable.
- Do not overuse the XPath
XPath is a query language that can select nodes in an XML file. It can be used for navigating across elements while testing. Google or Apple does not natively provide XPath type queries. So if testers are using them a lot, Appium is forced to make some calls. These under the hood calls find XPath supporting elements but negatively impact the performance.
- Arrange Selectors in the Right Order
XPath is location-based. It is slow when compared to the other locators in selenium like ID, Link Text, or Name. Order the selectors in a way that ID comes first and XPath comes last, to identify elements quicker.
- Use Accessibility IDs
Instead of excessive usage of XPath, testers can make use of accessibility ID locators. If users set accessibility IDs on their elements, it makes them more testable and increases the testing scope of their application.
- Consider the View states of the Application
View state is a technique used for storing the page value when the application sends or receives information from the server. Suppose there are 15 test cases for the specific functionality of the application. Among them, 10 test cases repeat the same functionality of logging in and going to the page. This duplication is a huge time waste. While developing, set up the view state of the application in a way that testing begins just where it is needed.
- Don’t compromise with Emulators and Simulators
Emulators and Simulators partially mimic real devices. While they are useful for testing in the initial stages of app development, they are decidedly inadequate when it comes to simulating real user conditions. For instance, an Android simulator cannot mimic low battery or 2G internet when your workstation is running on 4G. However, without testing apps in less than ideal real-world circumstances, they cannot be released. An app tested only on emulators and simulators is bound to provide unsatisfactory, even downright negative user experiences.
It is far more effective to test mobile apps on a real device cloud. BrowserStack provides thousands of mobile devices (iOS, Android, Windows) for QAs to test their apps on. Testers can access native device features and a plethora of helpful elements such as geolocation testing and network throttler. BrowserStack also provides integrations with mobile testing frameworks such as Appium, EarlGrey, and XCUITest to facilitate quick, convenient, and result-oriented testing.
Summing it up
With the increase in smartphone penetration and time spent on mobile devices, ensuring a seamless mobile app experience is critical. To achieve this, teams must adopt the right testing framework. Popular test automation frameworks include Appium, Calabash, Selendroid. Development teams must also keep in mind best practices and should actively work with testing teams to ensure they build applications that are easier to test. Testing must also be done on real devices instead of Emulators and Simulators. All this will help teams ship apps faster and give users a bug-free experience.