Testing Apps on a Simulator vs. Emulator vs. Real Device
Real devices, on the one hand, come with great value and benefits but also with their own set of costs. Simulators and emulators are also beneficial and can deliver unique value to both developers and testers, but also have drawbacks.
Keep reading to learn about simulators vs. emulators and real devices. And learn when to use each for testing apps.
Difference Between Simulators and Emulators
An emulator is a desktop app that completely virtualizes all aspects of a real device, including both the hardware and OS. Simulators don’t mimic the hardware or OS. They allow the user to validate application flows, but not in a true production environment.
When to Test on a Simulator vs. Emulator
Simulators and emulators are ideal for testing early in the dev cycle. Emulators are best for testing external behavior, and simulators for internal behavior. For example, use emulators for testing calculations and transactions, and simulators for internal hardware and firmware tests.
When to Test on a Real Device
Real device testing is the most reliable and is best for usability and performance testing. You can also apply real user conditions for more realistic testing.
Advantages of Simulators and Emulators
Simulators and emulators are both virtual devices. Both solutions virtualize mobile devices, and offer a number of advantages.
Simulators and emulators can virtualize a large variety of devices and operating system permutations. This capability allows users to validate very easily on multiple platforms as well on cases requiring specific device/OS combinations. In addition, there are platforms that are only supported (for development and testing purposes), as of now, through virtual devices.
Virtual device solutions are cheaper than real devices by a wide margin. This applies to both local and cloud-based solutions. The need to drive testing early in the development process requires teams to scale and test more.
In large organizations, if each developer wants to run a set of validations pre-commit, this requires a large number of devices to execute on. The economics of running against real devices may not make sense at such a scale when virtual devices will allow the organization to scale and execute earlier in the process.
3. Starting on a Baseline
With virtual devices, you can always start from the same device state. Achieving this with real devices may require doing a factory reset, which can take a lot of time and effort. The fact that the virtual device always starts from the same point helps. In many cases, it increases the reliability of automated test execution since there are no surprises. The device is always ready for execution in the way tests were designed. For example, the device will not be locked by another user.
Main Use Cases for Simulators and Emulators
Local Development and Validation
Developers and testers use simulators and emulators on their local machines for development, app debugging, and local validations. The most common IDEs for native applications come with virtual device tools as part of the basic installation.
Xcode comes with simulator functionality while Android Studio comes with an emulator. Both became stable and mature in the last few years and each has a large variety of capabilities for advanced validations.
Continuous Integration Testing
The major use case for virtual device labs is for continuous integration (CI) testing. The increased adoption of DevOps and Agile methodologies drives teams to test more in the early stages of the development process, otherwise known as shift left testing. New test automation frameworks that are more aligned to developers’ skills and tools, such as Espresso and XCUITest, help development teams to increase their test automation coverage.
However, to run these tests you need a proper execution environment – a test cloud to run against. These automated tests can run either in the pre-commit phase, executing a set of tests for fast validation prior to committing or merging code, or triggered through the CI a few times a day, providing quick value to development teams on recent code changes.
4 Advantages of Using a Real Mobile Device
1. There’s Nothing Like the Real Thing
While virtual devices are good for basic validations, to really validate that an application works, you need to run tests against real devices. While virtual devices can be very helpful to validate functional flows, there may be cases of false positives. This means that while tests may pass, in reality, there may be issues with the application.
That’s because simulators and emulators test on the “happy path” — the main flow of the application rather than trying to see how the application handles negative and extreme cases.
2. Better User Interface (UI) Validations
User interface validation should be done on real devices to validate the accuracy of the UI. In addition, usability issues are very easy to find while working on a real device, unlike virtual devices.
In most cases, where there is a need to enter input from the keyboard, real devices overlay the app, unlike virtual devices where the keyboard is presented next to the device interface.
3. More Accurate Performance Testing
Real devices provide more accurate and reliable performance measurements on transaction times. In addition to the implications specific hardware has on performance, virtual devices also render the UI differently.
4. Improved Hardware & Sensor-Related Validations
Common use cases that can be virtualized are ones that require interaction with device hardware and sensors, such as the camera, accelerometer, and biometrics. In some cases, the behavior of real and virtual devices may differ.
Balancing Simulators vs. Emulators vs. Real Devices
Since test activities happen from early development stages all the way to deployment and monitoring of the application, there is a need for both types of platforms, real and virtual.
Below is a proposal on how to build the right mix for each one of the phases in the application lifecycle.
Developers should validate code during the development phase, either with a local device or virtual device, which in most cases are part of the developer’s IDE. In the case of UI validation, it is recommended you validate the new UI on real devices rather than virtual ones to make sure that the outcome looks as expected.
Execution on unit and UI unit tests should run, in most cases, against virtual devices (90%). In addition, there are cases where the developers make changes in components which, based on their knowledge and experience, will behave differently on real devices. In those cases, it is recommended you give developers on-demand tools to select which tests they want to run and which platform to run against — either virtual or real.
Depending on the team’s maturity, teams will run the CI process one or more times a day. The goal is to build a mix that allows scalability while providing good test coverage and insights on end user experience. To allow scale of execution and parallel validation for multiple developers and teams at the same time, a typical CI mix might look like this.
This will run for every commit a developer makes, executing a basic sanity check to make sure the change didn’t break the build or introduce a significant regression. Due to the need to run this job at scale in every commit, these tests should run on a virtual device.
These jobs validate the last X commits and tests if one of them broke the build or introduced a regression. Usually, this type of job will run every few hours/X number of code commits. This job runs more tests to provide larger coverage. Here, we start to introduce real devices into the CI — the mix should be 70% virtual devices and 30% real devices.
This job runs regression tests and extends coverage. In this case, tests will run against real devices.
Additional test activities that run outside the CI process will run on real devices. Here, the goal is to validate the complete end-user experience, functional flow coverage, UI validation, and performance testing. All tests (100%) should run on real devices.
While there are organizations that have Real User Monitoring (RUM) solutions that run on real devices, there is also value in synthetic monitoring: execution of single-use automated tests that measure app performance running every 10-15 minutes. In this case, to get the most accurate results, the best practice is to use real devices.
The key to implementing continuous testing and maximizing velocity in the mobile space is to have the perfect balance between simulators, emulators, and real devices. Each of these extremely different platforms brings unique values and benefits to the developers and testers. However, these values are maximized when used in the right phase of the development life cycle.
Ensure that you properly plan the test coverage, the platform under test, and the testing tools throughout your continuous testing activities and continuously monitor the mobile space since new devices, as well as new versions of simulators and emulators, are released constantly to the market.
Reap the benefits of testing on simulators, emulators, and real devices with Perfecto. You’ll get the ideal mix of devices in the cloud for your testing strategy, as well as:
- Real Macs and Windows VMs to test web apps.
- Unshakeable enterprise-grade security.
- Extended test coverage.
- Elastic scaling of your tests across platforms.
- 24/7, global access to the cloud.
- Robust, built-in test reporting and analytics.
See for yourself. Start testing with Perfecto today for free in a two-week trial.