Mobile Apps

Mobile App Testing: QA, Beta Programs & Pre-Launch Checks

Test types, a data-backed device matrix, current TestFlight and Google Play closed testing rules, a P0-P3 bug workflow and the criteria that decide launch day.

Emrah KaragözEmrah KaragözFounderSeptember 16, 202621 min read

Mobile app testing means verifying an app's functionality, performance, device compatibility, security and accessibility before it reaches the stores. A solid process has four layers: developer tests, QA runs across a device matrix, a beta on TestFlight and Google Play closed testing, and a launch decision based on written acceptance criteria.

Skipping a layer has a measurable cost. According to Apple's 2025 App Store Transparency Report, App Review looked at 9.1 million submissions last year and rejected 2.09 million of them. The Performance category, which covers incomplete apps, crashes, misleading metadata and compatibility problems, accounted for 1,354,418 rejections. That's more than the Design, Legal, Business and Safety categories combined.

Device fragmentation makes the job harder. StatCounter data shows Android running on 67.61% of mobile devices worldwide in August 2026, and no single Android version holds more than 26% of that base. If you only tested on your developer's phone, you haven't tested on most of your users' devices.

This guide sits one step before our app publishing guide. You'll get the test types, a data-backed device matrix, the current beta rules for both stores, a bug reporting workflow and the acceptance criteria that decide launch day.

What's in this guide

Why mobile app testing sets your launch date

Don't treat testing as a week you tack onto the end of the schedule. Both app stores tie mobile app testing directly to when you can ship.

Apple's App Review Guidelines spell it out in section 2.1: test your app on-device for bugs and stability before you submit it. If your app has a login, Apple also expects demo account details and a back end that's switched on. Reviewers reject binaries that crash or show obvious technical problems.

On Google Play, testing is a gate you must pass. Under Play Console's testing requirement, personal developer accounts created after November 13, 2023 can't apply for production access until they run a closed test with at least 12 testers who stay opted in for 14 consecutive days. Google then reviews the application, which usually takes seven days or less.

Quality checks don't stop at launch either. Android vitals flags an app as crossing the bad behavior threshold when its user-perceived crash rate tops 1.09% or its user-perceived ANR rate tops 0.47% over the last 28 days. The threshold for any single phone model is 8%. Cross it, and Play may reduce your app's visibility and show users a warning on your store listing.

The wider economics point the same way. CISQ's 2022 report puts the cost of poor software quality in the US alone at $2.41 trillion or more. Time you invest in mobile app testing catches your project's share of that cost at the cheapest possible stage.

Types of mobile app testing and when to run them

Each test type catches a different risk. The table below maps which test to run at which stage of a small or mid-sized app project.

Test typeWhat it catchesWhenWho
Unit testingCalculation, validation and business rule errorsEvery commitDeveloper
Functional testingFlows such as sign-up, checkout or search that don't match requirementsEnd of every sprintQA
Regression testingA new feature breaking an existing flowEvery release candidateQA + automation
Compatibility testingScreen size, OS version and manufacturer differencesRelease candidateQA
Performance testingSlow startup, memory use, battery drain, ANRsBefore betaDeveloper + QA
Network testingWeak signal, offline mode, timeoutsBefore betaQA
Security testingExposed data, weak session handlingBefore launchSecurity specialist
Accessibility testingScreen reader, text size and contrast issuesRelease candidateQA
Beta testingConfusing flows, real-world usage problems2-4 weeks before launchReal users

Functional and regression testing. Functional testing starts with a written test case for every critical flow. Don't limit sign-up, login, password reset, cart and checkout to the happy path. Wrong passwords, abandoned payments and expired sessions happen to real users every day. Your regression suite is the subset of those cases you rerun on every release.

Performance, battery and network testing. Measure cold start time, scroll smoothness and memory use on a real device. Android Studio Profiler and Xcode Instruments both do this for free. For network testing, throttle the connection, toggle airplane mode and cut the connection in the middle of a request. If your app freezes instead of showing an error, users experience that as a crash.

Memory will soon affect store visibility as well. According to the Android vitals documentation, apps that exceed the thresholds for memory usage, bitmap memory usage or code optimization may see a visibility impact starting in February 2027.

Interruption and upgrade testing. Nobody uses your app at a quiet desk. The phone rings mid-form, the app drops into the background, and the OS kills the process to reclaim memory. Check that user input survives incoming calls, notifications, screen locks and a return from the background. Tap "Don't Allow" on permission prompts too: if a user denies location or camera access, your app should explain what to do next rather than crash. Upgrade testing is the check teams skip most often. Install the version currently in the store, create some data, then update to the new build. Sessions, the local database and saved settings should all survive the update.

Security and accessibility testing. For security, confirm that the app stores tokens encrypted, that the API never returns another user's data, and that logs contain no personal data. Our mobile app security guide walks through the full checklist.

For accessibility, Apple's Accessibility Nutrition Labels in App Store Connect let you declare support for VoiceOver, Voice Control, Larger Text, Sufficient Contrast, Reduced Motion and more. Before you declare a feature, test that users can complete your app's common tasks with that feature alone.

Building a device matrix

A device matrix lists the combinations of device, OS version and screen size your tests will cover. You're not trying to test every device. You're looking for the smallest set that represents most of your audience.

Android's version spread shows why that choice matters:

Android versionWorldwide share (Aug 2026)Turkey share (Aug 2026)
Android 1625.76%20.27%
Android 1516.91%12.04%
Android 1314.75%18.55%
Android 1413.09%14.26%
Android 1210.07%9.98%
Android 118.31%11.73%

StatCounter's version data shows the top six versions covering roughly 89% of Android devices worldwide. Local markets can look very different: in Turkey, Android 11, released in 2020, still holds a larger share than it does globally. iOS is far more uniform. Apple's June 7, 2026 measurement shows iOS 26 on 79% of all iPhones.

Build your matrix in three rings:

  1. Ring one (every build): The 3-4 Android devices that show up most in your analytics, plus two iPhones. Put the latest iOS on one iPhone and the oldest version you support on the other. On a brand-new project with no analytics yet, always include a low-memory Android device.
  2. Ring two (release candidates): Your minimum supported Android version, a small-screen phone, a tablet and a few different manufacturer skins.
  3. Ring three (cloud device farm): Cloud testing services for combinations your team doesn't own.

For the cloud ring, Firebase Test Lab gives you 10 virtual-device and 5 physical-device test runs per day on the free Spark plan. On the Blaze plan, the first 60 minutes per day on virtual devices and 30 minutes on physical devices cost nothing. After that, Google charges $1 per hour per virtual device and $5 per hour per physical device.

Emulators and simulators give you fast feedback and can run on every commit in CI. But only a physical device tells you the truth about the camera, biometrics, notification permissions, battery drain and real performance. The balanced approach: run most functional regression on emulators, and run hardware-dependent flows and performance measurements on real devices.

Store rules set the top end of your matrix. Under Google Play's target API requirement, new apps and app updates must target Android 16 (API level 36) from August 31, 2026, with an extension available until November 1, 2026. Raising the target API level triggers behavior changes, so give that migration its own regression pass.

Don't build the matrix once and forget it. Every quarter, check the device and OS mix in your analytics and swap ring-one devices to match. When you drop support for an old OS version, tell users clearly on your store listing and inside the app.

Manual testing vs test automation

The two don't compete. Automation makes repetitive checks cheap, while manual testing finds the problems only human eyes catch. A good mobile app testing plan schedules both.

What to automate:

  • A smoke test on every build: does the app open, can a user log in, does the home screen load?
  • A regression suite for critical flows: sign-up, checkout, subscriptions and data sync.
  • Unit tests for business logic: pricing, discounts and form validation.

What to keep manual:

  • Exploratory testing: off-script usage and unexpected sequences of steps.
  • Visual and UX review: alignment, animation and text overflow.
  • Newly built screens whose design still changes often.

Your app's tech stack decides the automation tool:

ToolPlatformBest for
EspressoAndroidNative Android UI tests
XCUITestiOSNative iOS UI tests, built into Xcode
Flutter integration_testiOS + AndroidEnd-to-end tests for Flutter apps
AppiumiOS + AndroidOne shared framework across different app technologies
MaestroiOS + AndroidFlow tests written quickly in YAML

Espresso and XCUITest are the platforms' official frameworks and cost nothing. Appium and Maestro are open source and let one test suite cover both platforms. On a small project, trying to automate everything burns budget early. At the MVP stage, automate a smoke test and regression for your 3-5 most critical flows first, then widen coverage as the product settles.

Beta testing on TestFlight and Google Play

Beta testing means opening your app, in a controlled way, to real users outside the QA team. Both stores offer dedicated channels, and their rules differ a lot.

ChannelCapacityReviewUse it for
TestFlight internal100 App Store Connect users, up to 30 devices eachNoneFast in-team checks
TestFlight externalUp to 10,000 testers via email or public linkFirst build goes through Beta App ReviewClient and real-user betas
Play internal testingUp to 100 testersMay skip standard policy reviewFast in-team distribution
Play closed testingEmail lists (up to 2,000 users each) or Google GroupsStandard reviewTargeted beta, 12 testers × 14 days rule
Play open testingUnlimited, or a cap of at least 1,000Standard reviewPublic beta on Google Play

TestFlight beta testing on iOS

TestFlight comes with your Apple Developer Program membership. Internal testers are team members with a role in your App Store Connect account, and they get builds without waiting for review. The first build you add to an external group goes through Apple's Beta App Review; later builds don't always need a full review.

Put three rules on your calendar from day one:

  • Each build lasts 90 days. Per App Store Connect Help, testers lose access to a build once it hits 90 days. On a long beta, schedule fresh uploads.
  • You can't pay testers. Guideline 2.2 bars you from distributing TestFlight builds to testers in exchange for compensation of any kind.
  • Filter your public link. Set device type and OS version criteria so the people who join match your device matrix.

Testers can grab a screenshot inside your app, mark it up and send it as feedback. When the app crashes, you receive a crash report and the tester can add context. That means you can start your first beta without setting up a separate bug reporting tool.

Google Play internal, closed and open testing

Play Console's testing tracks form a ladder. A new app bundle on the internal track reaches testers within minutes. Closed testing opens the app to people you pick via email lists or Google Groups. Open testing makes your test version visible on Google Play, and anyone can join.

For new personal accounts, closed testing is the most critical stage because it unlocks production access. Teams often miss two details of the 12-tester rule:

  1. Continuity: Testers who opt out before 14 days don't count. Recruit people who'll stay until the end.
  2. The application form: Once you meet the requirement, Play Console asks about your closed test, your app and your production readiness. Keep a record of tester feedback and the fixes you shipped, and you'll answer with real evidence.

Play Console also generates a pre-launch report automatically when you upload an app bundle. It flags stability, Android compatibility, performance and accessibility issues, and results usually arrive within an hour. If your app has a sign-in screen, add test credentials; otherwise the crawler can't get past login.

Recruiting and running your beta group

Who's in your beta group matters more than how many. Nielsen Norman Group's analysis found that a usability study with 5 users uncovers about 85% of usability problems. The same article recommends three studies with 5 users each over one study with 15. The beta lesson is simple: start small, fix what you find, then widen the group.

Run your beta in five steps:

  1. Write a goal. A measurable goal like "verify checkout with cards from three different banks" produces far more than "collect general feedback."
  2. Pick testers to match your matrix. Cover different manufacturers, low-memory devices and your oldest supported OS versions.
  3. Assign tasks. Send testers 2-3 concrete tasks every week.
  4. Use one channel. Feedback that scatters across chat apps, email and calls gets lost.
  5. Set exit criteria up front. Your beta ends when you meet the acceptance criteria, not when the calendar runs out.

Rather than waiting for free-form comments, ask the same three questions after every task:

  • Did you finish the task, and where did you get stuck?
  • Did anything happen that you didn't expect?
  • How often would you use this feature in real life?

The first two questions surface bugs and usability problems; the third tells you how to prioritize the feature. Put the answers in a table by task, and you'll also see how many testers hit the same problem.

A bug reporting workflow that gets bugs fixed

QA and beta testing only pay off when your team fixes what they find, fast. "The app doesn't work" tells a developer almost nothing. A good bug report includes:

  • Title: One sentence that names the problem, e.g., "Cart total doesn't update after applying a coupon."
  • Steps: Numbered steps that reproduce the bug.
  • Expected vs actual result: On separate lines.
  • Environment: Device model, OS version, app version, build number and network type.
  • Evidence: A screenshot, screen recording or crash log.
  • Severity: Based on the table below.
SeverityDefinitionExampleLaunch impact
P0 — CriticalCrash, data loss or payment failurePayment goes through but no order appearsBlocks launch
P1 — HighCore flow broken, no workaroundPassword reset email never arrivesBlocks launch
P2 — MediumFlow works but misbehaves, or a workaround existsA filter returns wrong results in one categoryScheduled fix
P3 — LowVisual or copy defectButton label overflows on small screensBacklog

Keep every report in one tool, such as Jira, Linear or GitHub Issues. For crashes, a tool like Firebase Crashlytics captures the stack trace with device and version details automatically. If you distribute betas through Firebase App Distribution, Crashlytics also shows stability metrics for each test build.

One person should set severity, and everyone should accept the call. Otherwise every tester marks their own bug as P0 and the priority list stops meaning anything. A weekly 30-minute triage meeting keeps this process on track for most projects.

Don't close bugs you can't reproduce right away. Note the crash log, device model and time; if the same signature shows up for three different users, reprioritize it. When you close a report, record the build that fixed it. That habit also shows you which scenarios belong in your regression suite.

Acceptance criteria and the go/no-go decision

Acceptance criteria are the written conditions a feature must meet before anyone calls it done. Without them, launch decisions come down to whoever argues loudest in the meeting.

The most common way to write testable criteria is the Given/When/Then pattern. Here's an example for an e-commerce checkout:

  • Given: The user has 2 items in the cart and no saved card.
  • When: The user enters new card details and confirms payment.
  • Then: The 3D Secure screen opens, the order number appears after approval, and the confirmation email goes out within 1 minute.

On top of feature-level criteria, use a release-level go/no-go checklist:

  • Zero open P0 and P1 bugs.
  • The regression suite passes on every ring-one device.
  • The beta build's crash rate sits below your target.
  • The demo account works and the production back end is live.
  • Target API level and store privacy declarations are up to date.
  • Critical pre-launch report warnings are resolved.
  • Analytics and crash reporting are active in the release build.

Use two references for your crash target. The first is Google's: the overall Android vitals threshold is 1.09%, and in its 2022 announcement Google advised developers to aim for per-phone stability metrics no worse than 2%. The second is industry data: Luciq's (formerly Instabug) Mobile App Stability Outlook 2025 puts the median crash-free session rate at 99.95%, versus 99.82% for apps rated below three stars. The gap looks tiny, but it's the difference between 5 and 18 crashes per 10,000 sessions.

Before you submit, run through our free app launch checklist. For the store-side issues that slip past mobile app testing, our guide to common App Store rejection reasons covers each one in detail.

After launch: phased releases and monitoring

No test environment fully reflects the variety of real users. That's why the last layer of mobile app testing is a gradual rollout.

Phased release on the App Store spreads automatic updates over 7 days. On Apple's schedule, the update reaches 1% of users on day one, then 2%, 5%, 10%, 20% and 50%, hitting 100% on day seven. If you spot a problem, you can pause the rollout for up to 30 days in total. Keep in mind that anyone can still download the update manually from the App Store.

Staged rollouts on Google Play let you choose the percentage yourself. According to Play Console Help, staged rollouts work only for updates, not for your first release. If you find an issue, halt the rollout; users who already have the update stay on that version. Since your first release can't use a staged rollout, closed and open testing are its only safety net.

Prepare a rollback plan before any rollout starts. Unlike a website, you can't instantly revert the app on a user's phone; a fix needs a new build and a new store review. So ship risky features behind a remotely controlled feature flag. If something breaks, you switch the feature off on the server and users fall back to the stable flow without waiting for an update.

During the rollout, check crash rate, ANR rate and your critical funnel steps every day. Compare the new version against the previous one over the same number of days. Our mobile app analytics guide explains which metrics to watch.

Localization, payments and privacy checks

Generic checklists miss bugs that only appear in specific markets. If your app serves users in more than one country, add these checks to your mobile app testing scenarios:

  • Locale-sensitive text handling: The classic example is Turkish. With the device language set to Turkish, locale-aware calls such as Java's toUpperCase() turn "title" into "TİTLE". Email comparisons, search or code matching that rely on case conversion can break. Run your tests with non-English device languages, not just English.
  • Number and currency formats: Check that amounts display correctly as "1,250.50" or "1.250,50" depending on locale, and that form fields accept a comma as the decimal separator where users expect one.
  • Right-to-left layouts: For Arabic or Hebrew, confirm that screens mirror correctly and that icons with a direction, such as back arrows, flip as expected.
  • Dates, times and time zones: Verify date formats per locale, and confirm that order and booking times convert correctly from a UTC server to the user's local time.
  • Payment flows: Test 3D Secure redirects, installment options where local cards offer them, and the return from the bank's screen to your app, all in your payment provider's sandbox.
  • Privacy-safe test data: Never copy real customer data into test environments. Laws such as GDPR in the EU and KVKK in Turkey apply to personal data wherever it sits, so generate synthetic test data instead.
  • Accessibility obligations: The European Accessibility Act has applied since June 28, 2025 to many consumer services, including e-commerce and banking. If you serve EU users in those sectors, treat accessibility testing as a compliance task, not a nice-to-have.

In an e-commerce app, most of these checks translate directly into lost revenue when they fail. A checkout form that rejects a comma in the amount, or a coupon code that breaks on Turkish-language devices, only shows up for users in that market. A test team working solely in English may never see it.

Frequently Asked Questions

How long does mobile app testing take?

It depends on scope, but plan two separate windows: continuous QA during development and a pre-launch beta. On Google Play, personal accounts created after November 13, 2023 need a closed test of at least 14 days. The production access review that follows usually takes seven days or less.

How many beta testers do you need?

Small groups are enough to find usability problems; Nielsen Norman Group found that 5 users uncover about 85% of them. New personal Google Play accounts must run a closed test with at least 12 testers. TestFlight external testing scales up to 10,000 people.

Is testing on emulators enough?

No. Emulators and simulators work well for fast functional tests, but only physical devices show accurate camera, biometric, battery and performance behavior. Verify your critical flows on a few real Android phones and iPhones before launch.

Is TestFlight free?

TestFlight has no separate fee; your Apple Developer Program membership ($99 per year) covers it. Testers download the free TestFlight app and can test each build for 90 days from upload.

What is the difference between alpha and beta testing?

Alpha testing happens inside your team in a controlled environment, often before every feature is finished. Beta testing puts a feature-complete build in front of real users on real devices and networks. TestFlight internal groups and Play internal testing suit alpha; external groups and closed testing suit beta.

Is Google Play closed testing mandatory for every account?

No. The rule applies to personal developer accounts created after November 13, 2023, which can't reach production without a 14-day closed test with at least 12 testers. Organization accounts don't face this requirement, but a closed test is still good practice.

Can I outsource QA and beta management to a team in Turkey?

Yes. Turkey runs on UTC+3, which overlaps with most of the European working day and makes daily triage calls practical. Before you sign, ask any partner for sample bug reports, their device matrix and how they manage TestFlight and Play Console access.

Mobile app testing doesn't start the day the code is finished; it runs from the first sprint through the post-launch rollout. Teams that plan test types, the device matrix, beta channels and acceptance criteria up front sharply reduce their risk of store rejections and first-week one-star reviews.

Our mobile app development service builds QA, TestFlight and Google Play closed testing into every project schedule. To map out a testing and launch plan for your app, get in touch.

#mobile app testing#beta testing#testflight#google play closed testing#qa#acceptance criteria

Need professional help with this?

Talk to our team about your project — same-day response, free quote.

Share this post

Related Articles