Back to All Articles
Mobile Testing

Mobile App Testing — A Complete Guide

Honnesh Muppala May 5, 2026 9 min read

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).

Mobile vs Web Testing: Mobile testing adds unique challenges that don't exist in web testing: device fragmentation (thousands of device models), varying screen resolutions, OS versions, network conditions (2G/3G/4G/5G/Wi-Fi), battery constraints, interruptions (calls, notifications), and hardware diversity. A feature that works perfectly on a Pixel 7 may break on a Samsung S21.
Mobile Testing — Key Dimensions
Device
Hardware, screen size, sensors, camera, storage
Network
Wi-Fi, 4G/5G, roaming, low bandwidth, offline
OS & Platform
Android versions, iOS versions, manufacturer skins
Power
Battery drain, charging state, background behaviour
Security
Auth, data encryption, permissions, vulnerability
Usability
Gestures, responsiveness, accessibility, UX flow

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.

TypeHow It WorksExamplesKey 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
App Types — Architecture Comparison
Native App
Platform SDK

Native UI Components

Device Hardware APIs

OS (Android / iOS)
Web App
HTML / CSS / JS

Browser Engine

Mobile Browser

OS (Any)
Hybrid App
Native Shell

WebView (Embedded)

HTML / JS Content

OS (Android / iOS)

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 TypeWho Uses ItKey CharacteristicsTypical 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
Android Build Pipeline — From Development to Production
Dev Build
(Eng)
UserDevSign
(Internal)
UserDebug
(Beta / QA)
User Build
(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:

AcronymFull NameWhat Is TestedExample
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?
From Experience: At Viasat, HVT and EVT were critical stages for IoT satellite terminal testing. We tested devices in RF-shielded chambers to measure signal strength without environmental interference, and each hardware variant had to pass before moving to DVT. Missing any stage meant production devices could ship with untested hardware interactions.

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

TypeWhat 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:

Power Consumption & Memory Testing

Test TypeWhat It ChecksWhy 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

Compatibility, Localisation & Globalisation

TypeDefinitionExample 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


Back to Blog
From Experience — Viasat: At Viasat, I manage iOS and macOS Beta testing 6–12 weeks ahead of Apple releases via AppleSeed for IT. One recurring class of issue was MAC address randomisation in newer iOS versions causing SSID drop events on the airline passenger portal. Catching these failures in the lab — before a software load ships to a live aircraft — is the difference between a controlled fix and a passenger-facing outage at 35,000 feet. We use Kobiton for mobile device management across multiple airline customer configurations, running Appium suites against real iPhones and iPads.