What is Mobile Testing?
Mobile testing is the process of evaluating the functionality, usability, performance, and compatibility of mobile applications and websites on various mobile devices — including smartphones and tablets. It covers both the software layer (apps and OS) and hardware interactions (sensors, cameras, radios).
Types of Mobile Applications
Before testing, you need to know what type of app you're testing — because each has different risk areas and tools.
| Type | How It Works | Examples | Key Testing Focus |
|---|---|---|---|
| Native App | Installed directly on the device; built for a specific OS (iOS or Android) using platform SDKs | WhatsApp, Google Pay, Phone Pe | Device-specific features (camera, GPS, sensors), performance, offline support, OS version compatibility |
| Web App | Accessed through a mobile browser via URL; not installed on device | W3Schools, Google Docs (browser), online banking portals | Cross-browser compatibility, responsive design, network dependency, URL routing |
| Hybrid App | Installed like a native app but runs web content inside a native shell (WebView); works on both platforms | Instagram, Facebook, Amazon Shopping | WebView rendering, offline mode, native-web communication, performance on lower-end devices |
Android Build Types
In Android development, a build is the compiled version of the application. There are three standard build types, each with a different purpose in the testing and release pipeline:
| Build Type | Who Uses It | Key Characteristics | Typical Use |
|---|---|---|---|
| User Build | End users / Public | Signed with release key; no extra debug info; optimised for performance; root access disabled | Production release to Google Play Store — final, stable, consumer-ready build |
| UserDebug Build | QA & Beta testers | Like User build but includes ADB access, debug logs enabled; closer to production than Eng build | Testing by users who need to report issues and provide logs; used in beta programmes |
| UserDevSign Build | Developers & internal testers | Signed with a developer key; distributed without going through the app store; enables sideloading | Early feature testing, limited user feedback, internal distribution before app store submission |
(Eng)
(Internal)
(Beta / QA)
(Production)
Variant Testing — HVT, DVT, EVT, PVT
In Android hardware product development (devices, IoT, smart TVs etc.), four types of variant testing are performed at different stages of the product lifecycle:
| Acronym | Full Name | What Is Tested | Example |
|---|---|---|---|
| HVT | Hardware Variant Test | Physical hardware components of the device | Battery charging, camera resolution, speaker output, microphone sensitivity, display brightness |
| DVT | Device Variant Test | Whether previously working features still work after new features are added to the device firmware | After adding 5G support — does Wi-Fi calling still work? Does Bluetooth audio still connect? |
| EVT | Environment Variant Test | Features tested under specific controlled environmental conditions | RF chamber testing for cellular signal, GPS accuracy in a shielded room, Wi-Fi range testing at set distances |
| PVT | Product Variant Test | Overall compatibility and interoperability of the device as a complete product | Does the device work correctly with all accessories, charging cables, and third-party peripherals? |
Mobile-Specific Test Types
Beyond standard functional testing, mobile apps require a set of specialised test types that address unique mobile risks:
Installation & Update Testing
| Type | What to Verify |
|---|---|
| Installation Testing | App installs correctly on different devices and OS versions; all required components are present; app launches and functions immediately after install |
| Uninstallation Testing | All app files, data, and configuration are cleanly removed; no residual files or registry entries remain; other apps are unaffected |
| Update Testing | New version installs over old without data loss; new features work; old features still work (regression); no force-close or crash at first launch after update |
| Patch Testing | Small targeted update/fix installs correctly; specific issue is resolved; no new issues introduced by the patch |
Interruption Testing
Mobile devices are constantly interrupted. Your app must handle all these gracefully — pausing, resuming, and maintaining state correctly:
- Incoming phone call while app is running — does the app pause and resume correctly?
- SMS / notification received — does the notification overlay cause UI issues?
- Low battery warning — does the app save state before power off?
- Network disconnection — does the app show the right error and recover when connectivity returns?
- Home button press — does the app correctly background and resume from the same state?
- Orientation change (portrait ↔ landscape) — does the app handle rotation without crashing or losing data?
Power Consumption & Memory Testing
| Test Type | What It Checks | Why It Matters |
|---|---|---|
| Power Consumption Testing | How much battery the app uses while active and while running in the background | Apps that drain battery excessively get uninstalled quickly by users; background drain is a common cause of 1-star reviews |
| Memory Leakage Testing | Whether the app releases allocated memory correctly over time; monitors memory usage across extended sessions | Memory leaks cause the app to gradually slow down and eventually crash — visible after 30–60 minutes of use |
Security & Compliance Testing
- Security Testing: Validate authentication (login, token expiry), authorisation (user can only see their data), data encryption in transit (HTTPS/TLS) and at rest (local storage)
- Vulnerability Testing: Identify weaknesses in the app that could be exploited — hardcoded credentials, insecure API endpoints, exposed debug logs
- Compliance Testing: Verify the app meets defined standards — GDPR for data privacy, WCAG for accessibility, carrier certification requirements for telecom apps
- Certification Testing: Required for apps distributed through carrier channels — verifies the app meets licensing and store submission standards
Compatibility, Localisation & Globalisation
| Type | Definition | Example Test |
|---|---|---|
| Compatibility Testing | App works correctly across different device models, OS versions, and screen sizes | Test on Android 10, 11, 12, 13, 14 across Samsung, Pixel, OnePlus devices |
| Cross-Browser Testing | Mobile web app works correctly across Chrome, Firefox, Safari, Edge mobile | Checkout flow on Safari mobile vs Chrome mobile — same result? |
| Localisation Testing | App is correctly adapted for a specific language and region — text, date formats, currency | Does the Arabic version display RTL text correctly? Do German translations fit the UI? |
| Globalisation Testing | App is designed to support multiple languages/regions without needing code changes per locale | Does the app correctly format dates as DD/MM/YYYY in the UK and MM/DD/YYYY in the US? |
| Recovery Testing | App recovers correctly after network failure, hardware crash, or OS kill | Force-kill the app mid-transaction — does it recover to the correct state on relaunch? |
| Laboratory Testing | Device tested in a controlled environment — checks channel connectivity, bandwidth, signal quality | Device connects to all Wi-Fi channels without interruption across the required frequency bands |
Mobile App Performance Testing
Functional correctness is the baseline — the app does what it is supposed to do. Performance is the layer that determines whether users actually keep using it. A functionally correct app that takes 8 seconds to launch, drops frames during scrolling, and drains 20% battery in an hour will generate one-star reviews and uninstalls. On mobile, performance is not an optional quality attribute — it is a core user expectation.
Why Mobile Performance Is Uniquely Challenging
Mobile devices operate under constraints that desktop and server environments simply do not have. Battery is finite and users are acutely aware of apps that drain it. Memory on mid-range and low-end Android devices can be as little as 2–3 GB, shared across the OS, background services, and all running apps — leaving your app a narrow budget. CPUs on budget devices run at a fraction of the clock speed of a Pixel 9 or iPhone 15, meaning performance that feels fine on a flagship may feel unusable to the majority of your users. Network payloads that seem small on desktop become expensive on metered 4G connections where users pay per megabyte. Performance testing must account for all of these real-world constraints, not just lab conditions on premium hardware.
Key Mobile Performance Metrics
The following metrics form the core of any mobile performance test plan. Cold start time measures how long the app takes to launch from a completely stopped state — no cached state in memory. Warm start measures the same launch when the app was recently in the background and its process is still alive. The target for cold start is under 2 seconds; warm start should be under 1 second. Frame rate targets 60 frames per second for smooth scrolling and animations — any dropped frame is visible to the user as jank. Memory usage is tracked as the heap grows over an extended session: a healthy app will plateau; a memory leak will produce a heap that grows continuously until the OS kills the process. CPU usage should return to near-zero when the app is idle. Battery drain rate is expressed as percentage per hour under a defined usage scenario. Network payload size — the total bytes transferred per user session — matters both for performance on slow connections and for mobile data costs.
Tools for Measuring Mobile Performance
Android Studio's built-in Android Profiler provides real-time graphs for CPU, memory, network, and energy usage. You can record a session, interact with the app, and then inspect frame-by-frame what caused a spike. On iOS, Xcode's Instruments tool offers equivalent profiling with specialised templates for Time Profiler, Leaks, and Energy Log. Firebase Performance Monitoring provides production-grade telemetry — cold start times, screen render times, and network request latency measured from real user devices in the field, not just from your lab. This is particularly valuable because it captures the performance your actual users experience, not the performance your test device delivers.
ADB Commands for Performance Investigation
For Android, the Android Debug Bridge provides direct access to performance data without needing a GUI profiler. The command adb shell dumpsys meminfo <package> prints a detailed memory breakdown for a specific app — total PSS, Java heap, native heap, and code memory. adb shell top shows live CPU usage per process, equivalent to a mobile task manager. adb shell dumpsys batterystats dumps the device's complete battery usage history, including which apps are holding wake locks — a common cause of unexpected background battery drain. These commands are fast to run and work without any additional tooling, making them ideal for quick triage during test execution.
Common Mobile Performance Bugs
Memory leaks manifest as a heap that never stops growing. The symptom is an app that becomes progressively slower over a 30 to 60 minute session and eventually crashes — reproducible by watching the memory profiler while performing the same actions repeatedly. ANRs (Application Not Responding) occur when the main thread is blocked for more than 5 seconds — typically caused by network calls or database queries running on the UI thread instead of a background thread. Jank is any dropped frame — visible as stutter during scrolling or animation — usually caused by expensive operations running during a frame render. Excessive wake locks prevent the CPU from entering low-power sleep states, draining battery even when the screen is off and the user is not interacting with the app.
Performance Testing Workflow
The standard workflow is: establish a baseline measurement under a defined scenario (fresh install, standard user journey, consistent device and network conditions), run a stress test (extended session, heavy data load, or constrained memory), measure again under the same conditions, then compare the two sets of metrics. Any regression — a cold start that increased by 500ms, a memory footprint that grew by 30MB, a battery drain rate that doubled — is a performance defect that should be raised and triaged just like a functional bug.
| Metric | Good | Warning | Critical | How to Measure |
|---|---|---|---|---|
| Cold Start Time | < 2 seconds | 2–4 seconds | > 5 seconds | Android Profiler; adb shell am start-activity -W |
| Warm Start Time | < 1 second | 1–2 seconds | > 3 seconds | Android Profiler; Firebase Performance |
| Frame Rate | 60 fps (stable) | 45–59 fps | < 30 fps or drops | Android GPU Profiler; Instruments (iOS) |
| Memory Usage | Stable plateau | Slow steady growth | Unbounded growth (leak) | adb shell dumpsys meminfo; Android Profiler |
| Battery Drain (active) | < 5% / hour | 5–10% / hour | > 15% / hour | adb shell dumpsys batterystats |
| Network Payload | < 1 MB / session | 1–5 MB / session | > 10 MB / session | Android Profiler Network; Charles Proxy |
References
- Android Developer Documentation — Build Variants: developer.android.com/build
- ISTQB Mobile Application Testing Specialist Syllabus
- Appium Documentation — appium.io
- Cohn, M. — Succeeding with Agile, Addison-Wesley (mobile testing chapters)
- Google Play Developer Policy Center — play.google.com/about/developer-content-policy
Back to Blog