Skip to content
QA Knowledge Hub

Test cases for mobile app install, update and uninstall

Updated 2026-11-13 · 6 min read

These 30 cases use explicit test fixtures and checkable outcomes. Cover normal behavior, boundaries, recovery, security and usability, then adapt the requirements to your product.

How to answer in an interview

Ask which OS versions and distribution channels are supported, which older releases can upgrade, and what data should survive each transition. Separate clean install, in-place update, uninstall and backup restore. A successful launch after a fresh install tells you little about migration from an older database.

Scope and test data

These 30 cases require approved test builds labelled A (older) and B (newer), an isolated backend, synthetic user Asha Test, and a device matrix supplied by the team. Record real build identifiers, signing/distribution setup, storage availability and backup state before execution. Labels A and B are fixtures, not claims about released versions.

Seed A with a saved preference, an offline draft and a server-synced record. Specify which must survive update and restore. For clean-install checks, disable restore or use a clean test profile. Android Auto Backup can restore eligible data after installation; uninstalling is not proof that the next install starts with empty data. Uninstall also does not by itself delete a server account.

These are proposed manual test cases, not an execution report. Run security and load checks only in an authorised isolated environment. Record agreed limits before execution; a case without its required limit is not ready to pass or fail.

Clean installation

IDCategoryTest caseExpected result
M01FunctionalInstall B through the approved test distribution channel on a supported deviceOne app entry appears with the expected build and opens to the designed first-run screen
M02FunctionalLaunch B for the first time with clean local stateOnboarding defaults match the clean-install specification
M03NegativeLaunch a fresh install while offlineOffline explanation or limited mode appears; no permanent startup loop occurs
M04BoundaryAttempt installation with insufficient storageOS or installer reports failure; no falsely successful usable install is shown
M05NegativeInterrupt the package download and retry through the approved channelA complete valid build installs; partial download is not treated as runnable
M06CompatibilityAttempt installation on an unsupported OS versionChannel or installer prevents unsupported installation according to package eligibility
M07CompatibilityInstall on each supported device architecture and screen classCorrect build variant launches without missing native components or clipped onboarding
M08FunctionalDeny optional permissions during onboardingApp remains usable outside the dependent feature; denied capability is explained
M09FunctionalOpen an approved app link after initial setupApp resolves the intended destination and applies authentication before private content
M10SecurityAttempt to install a deliberately invalidly signed test artifactDistribution or OS validation rejects it; no trusted existing install is replaced

Updates and migration

IDCategoryTest caseExpected result
M11FunctionalUpgrade seeded A to B through the intended channelB launches; documented preferences, draft and synced record are retained
M12FunctionalUpgrade from each supported older release, including a skipped releaseEach supported migration path produces the expected current data shape
M13FunctionalLaunch B repeatedly after migrationMigration does not duplicate records or reset preferences on later launches
M14NegativeInterrupt the update download before completionExisting installed version remains usable or installer offers recovery without corrupting its data
M15NegativeInterrupt first-launch migration at an approved fault pointNext launch recovers or reports a controlled failure without silently discarding seeded data
M16BoundaryUpgrade with storage near the documented free-space requirementSupported boundary succeeds; insufficient space fails clearly without partial user-data loss
M17FunctionalUpdate with notifications disabled and optional permissions deniedUser choices persist unless a documented platform change requires a new prompt
M18FunctionalUpdate with an offline operation pendingPending operation is retained and reconciles once when connectivity returns
M19CompatibilityRun A and B against the staged backend during rolloutBoth supported clients complete their agreed core workflows without incompatible responses
M20SecurityAttempt a normal-channel downgrade where policy forbids itInstaller or channel refuses; B's user data remains intact

Uninstall, restore and release confidence

IDCategoryTest caseExpected result
M21FunctionalUninstall B through OS settingsApp entry is removed and it cannot launch from the normal launcher
M22FunctionalReinstall with restore disabled in a clean profileOnboarding starts with clean local state; old local draft is absent
M23FunctionalReinstall with an eligible backup and restore enabledOnly data allowed by backup policy returns; restored data opens correctly
M24SecurityInspect the approved test backup and restored stateCredentials and sensitive files excluded by policy are absent
M25FunctionalSign in after reinstall and fetch server-synced recordsAuthorised server records return once; uninstall has not been mistaken for account deletion
M26SecuritySwitch to another account after reinstallPrevious user's private local or restored records are not exposed
M27FunctionalSend a test notification to the old installation registration after uninstallPermanent invalid-registration feedback, when received, retires that registration
M28UIInspect app name, icon and build information after updateBranding is consistent and displayed build identifies B rather than stale A
M29PerformanceMeasure first launch after update and later launches on reference devicesEach meets its separate recorded budget; migration cost is included in first-launch measurement
M30CompatibilityRepeat clean install, upgrade and reinstall on the supported Android and iOS matrixEach lifecycle follows that platform's documented distribution and restore policy; results name the exact device and build

Preserve evidence before resetting the device

Record seeded data before update, verify it after migration, and keep the install-channel error when an operation fails. Resetting immediately can erase the only evidence of an intermittent migration defect. Use authorised test profiles and devices for destructive lifecycle cases.

If asked “Should uninstall remove everything?”, distinguish app-local data, backups, exported files and server records. Define each retention expectation separately. Android versioning and backup documentation support the platform discussion here; iOS restore, signing and distribution paths still need a platform-specific execution plan.

Downloads

Quick answers

Is reinstall always a clean installation?

No. Eligible backup data may be restored. Control backup state or use a clean profile when testing first-run defaults.

Should every update test start from the immediately previous release?

No. Include the older versions the product promises to support, especially paths that skip intermediate migrations.

Sources

Want a project you can show in interviews?

The portfolio project kit walks you through testing a deliberately buggy app with Selenium or Playwright and API tests, then explaining it. The app itself is free.