One of the first decisions in mobile testing is what to test on. Each option has trade-offs.
Emulators and Simulators
Android Emulator
The Android Emulator (part of Android Studio) creates a virtual Android device on your computer.
Setup:
- Install Android Studio
- Open AVD Manager (Android Virtual Device)
- Create a device profile (e.g., Pixel 7, API 34)
- Download the system image
- Launch the emulator
Advantages:
- Free
- Test on any Android version
- Quick to create and destroy
- Can simulate GPS, battery, network conditions
- Good for automated testing
Limitations:
- Slower than real devices
- Can't test hardware features (camera, fingerprint, NFC)
- Performance doesn't match real device behavior
- Touch responsiveness differs
iOS Simulator
The iOS Simulator (part of Xcode) runs iOS apps on your Mac. Note: it's a "simulator" not an "emulator" — it runs on your Mac's CPU, not a virtualized ARM chip.
Setup:
- Install Xcode from the Mac App Store
- Open Xcode → Settings → Platforms → Download iOS simulators
- Open Simulator app or run from Xcode
Advantages:
- Fast — runs at near-native speed
- Test on any iPhone/iPad model
- Free (Xcode is free)
- Good for UI testing and screenshots
Limitations:
- Requires a Mac
- Can't test push notifications (real device only)
- Can't test camera, biometrics, or Bluetooth
- Performance characteristics differ from real hardware
Real Devices
Nothing beats testing on the actual hardware your users hold in their hands.
When real devices are essential:
- Performance testing (CPU, memory, battery)
- Hardware features (camera, GPS, sensors)
- Touch and gesture accuracy
- Push notifications
- Biometric authentication (Face ID, fingerprint)
- Final validation before release
Challenges:
- Expensive to maintain a device lab
- Hard to cover all device/OS combinations
- Devices degrade over time
- Physical management overhead
Cloud Device Farms
Services that give you remote access to real devices:
| Service | Key Features |
|---|---|
| BrowserStack | 3000+ real devices, automated + manual testing |
| Sauce Labs | Real devices + emulators, CI/CD integration |
| AWS Device Farm | Pay-per-minute, automated testing |
| Firebase Test Lab | Free tier available, Robo tests, Google devices |
| LambdaTest | Real devices, cross-browser + mobile testing |
How it works:
- Upload your app (APK/IPA) or connect via URL
- Select devices and OS versions
- Run manual sessions or automated tests
- View results, screenshots, and video recordings
The Testing Strategy
Use a combination based on your phase:
| Phase | Environment | Why |
|---|---|---|
| Development | Emulator/Simulator | Fast iteration, easy debugging |
| Feature testing | Emulator + 2-3 real devices | Catch platform-specific issues |
| Regression | Cloud device farm | Cover broad device matrix |
| Pre-release | Top 5-10 real devices | Final validation with real hardware |
Choosing Test Devices
You can't test on every device. Pick strategically:
By Market Share
Check your analytics or global stats to find your users' most common devices:
- Top 3 Android devices (e.g., Samsung Galaxy S24, Pixel 8, Samsung A54)
- Top 2 iOS devices (e.g., iPhone 15, iPhone 14)
By Screen Size
Cover the range:
- Small phone (iPhone SE, Galaxy A14)
- Standard phone (iPhone 15, Pixel 8)
- Large phone (iPhone 15 Pro Max, Galaxy S24 Ultra)
- Tablet (iPad, Galaxy Tab)
By OS Version
Cover current and one or two versions back:
- iOS 17, iOS 16
- Android 14, Android 13, Android 12
By Manufacturer (Android)
Different manufacturers customize Android differently:
- Samsung (One UI)
- Google Pixel (stock Android)
- Xiaomi (MIUI)
Setting Up ADB for Android
ADB (Android Debug Bridge) connects your computer to an Android device or emulator:
# List connected devices
adb devices
# Install an app
adb install app-debug.apk
# Take a screenshot
adb exec-out screencap -p > screenshot.png
# View logs
adb logcat
# Simulate a slow network
adb shell settings put global network_watchlist_enabled 0