As a longtime quality assurance engineer, I am a collector of tools that make automation across many different platforms easier. When a job calls for automated mobile application testing tools, open source Appium is usually my first choice. Why? There are many reasons, which I'll describe in this review.
Reusability is the capability that makes me reach for Appium first. So, let's start with a discussion of why reusability is so important in mobile test and development.
Often, a large portion of time and effort is expended in automating software testing, no matter the environment or the target application. Even more time and effort goes into maintaining existing test beds, or platforms for experimentation. If there are several codebases, or collections of source code, and different languages, then far too frequently there is a corresponding test bed and a significant amount of overhead in maintaining each test bed.
In the mobile application world, developing one application that is deployed on both iOS and Android OS usually calls for writing two code bases that have to be kept in sync. Unfortunately, most of the time development organizations don't plan from the beginning for the possibility of deploying in multiple platforms. When they realize the market is open to them, they build a second code base by porting the first and making the necessary changes to support the different environment. Then they discover a big problem: They don't have the resources needed to properly test both.
There are some ways around this, such as tools that let you build in a single codebase and deploy it to multiple environments. As a general rule, however, a project is developed in one environment, then ported to the other. Far too often, this results in all the real testing being done only in the primary development environment, and in only limited testing taking place in the ported environment.
Appium encourages multiple-platform testing by using test tools and modes of operation that are well known to developers. Also, Appium's familiar tool sets eliminate extra work by making sure that the tester doesn't have to do anything special to the code in order to make testing possible. Another critical function Appium covers is enabling developers to create and run tests in any language and environment.
In addition to its using well-known methodologies, Appium was released as an open source project, so that anyone could extend it for personal use. Going with open source would also provide a growing library of tools to the testing community at large.
Today, Appium provides a set of automation libraries that can be used in virtually any programming environment. With it, developers can test in their preferred development languages and still be able to execute the tests in whatever cross-platform configuration is required.
Appium's flexibility lies in its two-layer approach, using well-known test engines and a single API.
- Appium's test engine strategy is straightforward. For iOS, it uses Apple's UI Automation test engine, and for Android, either Google UI Automator or Google Instrumentation TestRunner. By using these engines, Appium doesn't need to be concerned with how to actually run the automation, only with how to talk to the already existing automations.
- In the second layer, these automation engines are wrapped in a single and popular API, Selenium WebDriver. The Selenium WebDriver API implements an architecture that is commonly available to every popular programming language and has tools and plug-ins for virtually any IDE you care to use. WebDriver is a very familiar tool set and a recognized standard for automation. Using WebDriver with just a few additions to this existing API creates a fairly easy learning curve and less overall effort to build a cross-platform test bed.
The result of this test engine-API combination is that developers can write a test in any language, manage tests however they prefer, run tests with any test runner, and execute the same tests for either iOS or Android applications. This functionality provides a significant savings in test development time and test-bed management efforts.
Appium comes in a number of packages, depending on what you wish to do in terms of your own environment. You can build an entirely customized environment by grabbing the appropriate SDKs, you can use graphical user interface applications that conveniently bundle Appium and everything you need all together, or you can actually use an online version that allows you to run your tests without having to invest in significant infrastructure on your own systems.
Today, testing can be done in the cloud with very little overhead by running Appium on the Sauce Labs cloud infrastructure for testing firewalled applications. By letting all the testing take place on Sauce Labs' servers, you need to worry only about creating your tests and setting up an account with Sauce Labs. Once configured, the servers do all the heavy lifting and can provide you with the kind of resources to run more of your tests in parallel and generate your test results faster than you might otherwise be able to do on your own.
Appium lays claim to being the new standard for running automation on mobile and Web-based applications. Given the use of Selenium WebDriver's existing technology and the Apple and Google testing engines, and the provision of so many ways to approach your particular needs with the right combination of tools, it is a claim we should probably take seriously. While there are a variety of tools that take on individual aspects of these tasks, Appium seems to be the only real contender for providing the whole package.