In this article · 10 sections
Mobile users are unforgiving. A crash on launch, a broken checkout or a screen that does not fit their phone leads to an uninstall and, often, a one-star review. Testing is how you find those problems before your users do. It is not a single phase at the end of development. It is a habit that runs through the whole process.
This guide explains what to test, how to test it and how to organise the work.
Why mobile testing is different
Mobile apps run in messy conditions:
- Thousands of device models, screen sizes and OS versions
- Interruptions: calls, notifications, low battery, switching apps
- Unreliable networks, from fast Wi-Fi to patchy mobile data to airplane mode
- Different permissions and user settings
- Store distribution and update behaviour
You cannot test everything. The goal is to test the right things well.
The testing pyramid
A healthy strategy mixes several levels.
- Unit tests: fast checks of individual functions and logic. Many of them, cheap to run.
- Integration tests: check that components work together, such as the app talking to the API.
- UI / end-to-end tests: simulate real user flows across the full app. Fewer, since they are slower and more fragile.
- Manual and exploratory testing: humans looking for the things automation does not catch.
Automate the repetitive checks and reserve human attention for judgement and discovery.
Types of testing to cover
Functional testing
Does every feature do what it should? Cover the main flows, error cases and edge cases: empty states, long text, special characters, large lists, first-time use and returning users.
Usability testing
Can real people complete tasks without help? Watch five or so users try your app. Our usability testing guide explains how.
Compatibility testing
Test across:
- A representative range of devices: small and large screens, older and newer, low-end hardware
- Supported OS versions
- Orientations, font sizes, dark mode and language settings
Use analytics from your existing user base or market data to choose which devices matter most.
Performance testing
- Launch time and screen load times
- Memory use, battery drain and heat
- Scrolling smoothness and animation frame rate
- Behaviour on slow or lossy networks
See app performance optimisation.
Network and offline testing
Simulate airplane mode, switching between Wi-Fi and cellular, and timeouts. Confirm the app shows sensible messages and recovers when the connection returns.
Security testing
Check authentication, storage of sensitive data, network encryption and server-side authorisation. Use our mobile app security checklist as a guide, and consider a professional penetration test for sensitive apps.
Accessibility testing
Test with screen readers (VoiceOver and TalkBack), large text, sufficient contrast and touch target sizes. See accessibility basics.
Interruption and lifecycle testing
Send the app to the background, receive a call, rotate the screen, lock the phone and kill the app mid-action. Verify that state is saved and restored.
Localisation testing
If the app supports multiple languages, check text overflow, right-to-left layouts, date and number formats, and cultural suitability.
Installation and update testing
Test fresh installs, upgrades from older versions (including data migration) and uninstall behaviour.
Real devices and emulators
Emulators and simulators are fast and convenient for development. Real devices reveal issues with performance, sensors, cameras, notifications and manufacturer-specific behaviour. Use both. Cloud device farms offer access to many real devices when you cannot own them all.
Automation basics
Automate stable, repetitive checks.
- Unit tests run on every code change in your continuous integration pipeline
- UI test frameworks (such as XCUITest and Espresso, or cross-platform tools) check critical flows like sign-up and checkout
- Run a smoke test on every build to confirm the app launches and basic flows work
Keep automated tests reliable. Flaky tests that fail randomly teach people to ignore failures.
Write good bug reports
A useful report includes:
- A clear title
- Steps to reproduce
- Expected versus actual result
- Device, OS version and app version
- Screenshots or screen recordings and logs
Prioritise bugs by severity and user impact, not just by who reported them.
Beta testing
Before wide release, use beta programs such as TestFlight on iOS and Google Play testing tracks on Android. Real users on real devices find problems you did not imagine. Pair this with crash reporting and analytics. See which events to track.
Pre-release checklist
- Core flows tested on multiple real devices and OS versions
- Unit and integration tests passing in CI
- Smoke test on the release build
- Offline and slow-network behaviour verified
- Permissions requested and denied paths handled
- Accessibility checks completed
- Security review done
- Upgrade path from the previous version tested
- Analytics and crash reporting verified
- Store listing and policy forms reviewed
Common mistakes
- Testing only on the newest, fastest phone
- Leaving testing to the final week
- Over-relying on manual checks for repeated tasks
- Ignoring unusual but realistic conditions, such as poor networks
- Not testing the release build, only debug builds
Final thoughts
Quality is built throughout development, not inspected at the end. Mix automated and manual testing, cover real-world conditions and use beta feedback to catch the rest. For help building and testing apps to a high standard, see our app development service or contact us.