  Because Mobile apps are extremely popular and often mission critical
nowadays, companies invest a great deal of resources in testing the apps they
provide to their customers. Testing is particularly important for Android apps,
which must run on a multitude of devices and operating system versions.
Unfortunately, as we confirmed in many interviews with quality assurance
professionals, app testing is today a very human intensive, and therefore
tedious and error prone, activity. To address this problem, and better support
testing of Android apps, we propose a new technique that allows testers to
easily create platform independent test scripts for an app and automatically
run the generated test scripts on multiple devices and operating system
versions. The technique does so without modifying the app under test or the
runtime system, by (1) intercepting the interactions of the tester with the app
and (2) providing the tester with an intuitive way to specify expected results
that it then encode as test oracles. We implemented our technique in a tool
named Barista and used the tool to evaluate the practical usefulness and
applicability of our approach. Our results show that Barista can faithfully
encode user defined test cases as test scripts with built-in oracles, generates
test scripts that can run on multiple platforms, and can outperform a
state-of-the-art tool with similar functionality. Barista and our experimental
infrastructure are publicly available.
