99testsStart a job

Test case library · Mobile platform

Test cases for offline and poor network handling

This flow covers how an app behaves when the connection is missing, slow or changing: airplane mode in the middle of an action, weak 2G and 3G signal, public Wi-Fi sign-in pages and network handovers. In India these are everyday conditions in lifts, metros and trains, and after a daily data pack runs out. Field failures show up as endless spinners, lost form data and duplicate orders when users tap again.

39 test cases11 release-blocking (P1)12 need a real phoneUpdated 2026-10-29

From the reviews. Only 2.2% of malfunction reviews name the phone or Android version, so a failure that only happens on a slow or switching connection usually reaches the team as “the app doesn't work”.

India App Quality Report

In scope

  • Offline state, cached content and the offline banner
  • Slow 2G and 3G, high latency and request timeouts
  • Wi-Fi to mobile data handover and dual-SIM data switching
  • Public Wi-Fi sign-in pages
  • Duplicate-safe retries and sync after reconnecting
  • Error message wording and large images on slow networks

Out of scope

  • Server load and capacity testing
  • Video streaming quality

Before you start

  • Test accounts and sandbox payments that can be repeated safely
  • Android and iPhone test phones, including a budget Android phone with 3–4 GB RAM
  • A dual-SIM phone with active Jio, Airtel or Vi SIMs, and a Wi-Fi router you control
  • A network throttling tool, or a hotspot that can be slowed
  • Someone who can check order and payment records on the backend
Show
Add to a test plan

Happy path5

NET-01

Open the app with no connection and see the last loaded data

P2functional
  1. Open the app online and visit the home, orders and account screens.
  2. Close the app and turn on airplane mode.
  3. Open the app again and visit the same screens, plus one never opened before.

Expected: Screens loaded earlier show their content with an offline note and the time of the last update. The screen never opened shows a plain message, not a blank page.

NET-02

The offline banner appears on disconnecting and clears on reconnecting

P2functional
  1. Open the app on Wi-Fi.
  2. Turn Wi-Fi and mobile data off and wait a few seconds.
  3. Turn mobile data back on.

Expected: A banner such as You are offline appears within a few seconds and goes away after reconnecting. The current screen refreshes without restarting the app.

NET-03

An action saved while offline is sent exactly once after reconnecting

P1functional
  1. Turn on airplane mode.
  2. Do something the app allows offline, such as adding a cart item or saving a draft.
  3. Turn airplane mode off and wait for the sync to finish.
  4. Check the same account on a second device or the website.

Expected: The item appears exactly once on the second device. On the first phone, the Pending or Waiting label clears after the sync.

NET-04

Retry a failed screen load once the network is back

P2functional
  1. Turn on airplane mode and open a screen not loaded before, such as a new category.
  2. Read the message shown.
  3. Turn airplane mode off and tap Retry.

Expected: The message says there is no internet and offers Retry. After Retry the screen loads without the user leaving and reopening it.

NET-05

Complete login and the main action on a slow 3G connection

P1performance
  1. Set a network throttling tool to a slow 3G profile.
  2. Log in with OTP and complete the app's main action, such as placing an order.
  3. Note what the screen shows during each wait.

Expected: Both complete, with a progress indicator during every wait. No screen freezes or shows an App not responding dialog.

Validation & negative5

NET-06

Offline and server errors are explained in plain language

P2negative
  1. Turn on airplane mode and try to log in, search and submit a form.
  2. Read each error message.
  3. Back online, have the backend team make one service fail, then open that screen.

Expected: Offline messages say there is no internet and what to do next, while the server failure says the problem is on the app's side. No message shows error codes, exception names or the word null.

NET-07

Double tap Submit on a slow connection

P1negative
  1. Throttle the network to a slow profile.
  2. Fill a form that creates something, such as an order or a payment request.
  3. Tap Submit twice quickly.
  4. Check the order list or history.

Expected: The button is disabled or shows progress after the first tap. Only one order or request is created.

NET-08

Retry after a timeout when the server already received the order

P1negative
  1. Throttle the network so responses take longer than the app's timeout.
  2. Place an order and wait for the timeout message.
  3. Tap Retry, then check the order list and the test account balance.

Expected: Only one order exists, and the app shows it as placed instead of creating a second one. The account is charged once.

NET-09

Typed details survive a failed submission

P2negative
  1. Fill a long form, such as a delivery address or KYC details.
  2. Turn on airplane mode and tap Submit.
  3. Read the error, then turn airplane mode off.

Expected: Everything typed is still in the form after the error. Submitting again works without retyping.

NET-10

Mobile data is turned off for this app only

P2negativereal phone
  1. On an iPhone, open Settings, then Mobile Data, and turn the app off.
  2. Keep Wi-Fi off so only mobile data is available.
  3. Open the app and try to load the home screen.

Expected: iOS shows its mobile data alert or the app explains that mobile data is off for it. The app does not show a server error or retry endlessly.

Why a real phone: Per-app mobile data switches only apply with a real SIM data connection

Edge cases7

NET-11

Wi-Fi is connected but has no internet

P2edge
  1. Connect the phone to a router whose internet line is unplugged.
  2. Turn mobile data off.
  3. Open the app and try to load fresh content.

Expected: After the request timeout the app shows a no-internet message with Retry. It does not spin forever just because Wi-Fi shows as connected.

NET-12

Public Wi-Fi with a sign-in page that has not been completed

P2edgereal phone
  1. Connect to a public Wi-Fi hotspot, such as at a railway station, without signing in.
  2. Turn mobile data off and open the app.
  3. Complete the hotspot sign-in in the browser, then return to the app.

Expected: Before sign-in, the app says the network needs sign-in or has no internet, and never shows the hotspot page inside its screens. After sign-in it loads normally.

Why a real phone: Needs a real public hotspot; sign-in page detection differs across phone makers

NET-13

Daily data pack used up and the carrier slows the speed

P2performancereal phone
  1. Use a prepaid SIM whose daily data pack has run out, so speed is reduced.
  2. Open the app, load the home screen and complete one key action.
  3. Note the load times and any messages.

Expected: Text and buttons load before images, and the key action completes or fails with a clear message. No offline banner appears while data is still flowing.

Why a real phone: Carrier slowdowns after a daily pack are bursty and uneven, unlike throttling profiles

NET-14

Price or stock changes while the user was offline

P1edge
  1. Load a product or service page, then turn on airplane mode.
  2. Have the price or stock changed on the backend.
  3. Turn airplane mode off and go to checkout from the cached page.

Expected: Before payment, the app shows the current price or stock and asks the user to confirm any change. The amount charged matches the amount on the final screen.

NET-15

The same record is edited offline on one phone and online on another

P2edge
  1. Log in to the same account on two phones.
  2. On phone A, go offline and edit the delivery address.
  3. On phone B, edit the same address online.
  4. Bring phone A back online and wait for the sync.

Expected: Both phones end up showing the same address. If phone A's change was not kept, phone A shows a message saying so.

NET-16

Open the app after several days offline

P3edge
  1. Load the app fully, then keep the phone offline for two or more days.
  2. Reconnect and open the app.
  3. Check offers, tickets or orders shown from the cache.

Expected: Expired offers and outdated statuses are refreshed or marked as old before the user can act on them. Queued actions that are no longer valid show a clear message.

NET-17

The phone's date and time are set wrongly

P3edge
  1. Turn off automatic date and time and set the date a year back.
  2. Open the app and try to load the home screen.
  3. Turn automatic date and time back on and tap Retry.

Expected: The app asks the user to check the phone's date and time instead of showing a generic no-internet error. It loads normally once the clock is fixed.

Interruptions & network13

NET-18

Turn on airplane mode while a form is being submitted

P1interruption
  1. Fill a form that creates something, such as a booking or an address.
  2. Tap Submit and immediately turn on airplane mode.
  3. Wait for the message, then turn airplane mode off.
  4. Check the history and submit again if the app offers it.

Expected: The app says the result is unknown or failed and offers a safe retry. After reconnecting, exactly one booking exists.

NET-19

The connection drops right after a payment is authorised

P1interruption
  1. Start a sandbox payment and enter the PIN or OTP.
  2. Turn on airplane mode before the result screen appears.
  3. Wait a minute, turn airplane mode off and reopen the app.

Expected: The app shows the payment as pending or checks its status, never as failed while money is debited. The final status matches the test account statement.

NET-20

The phone moves from Wi-Fi to mobile data during a request

P1interruptionreal phone
  1. Connect to Wi-Fi and start a slow request, such as a photo upload or an order.
  2. Walk out of Wi-Fi range so the phone moves to mobile data.
  3. Watch the progress, then check the result.

Expected: The request finishes over mobile data or fails with a clear Retry option. Retrying does not create a duplicate upload or order.

Why a real phone: Handover from Wi-Fi to the carrier network happens only on real hardware with a SIM

NET-21

Switch the mobile data SIM on a dual-SIM phone

P2interruptionreal phone
  1. On a dual-SIM phone with Wi-Fi off, use mobile data from SIM 1.
  2. Open the app and start loading a screen.
  3. In Settings, switch mobile data to SIM 2 and return to the app.

Expected: After a short pause the app reconnects over SIM 2 and loads the screen. It does not stay stuck on an offline banner until restarted.

Why a real phone: Changing the data SIM needs a real dual-SIM phone with two active SIMs

NET-22

Enter a lift or metro tunnel while a screen is loading

P2interruptionreal phone
  1. Start loading a heavy screen, such as order tracking or a statement.
  2. Step into a lift or a metro section with no signal.
  3. Come out after a minute and watch the app.

Expected: The app shows an offline message while signal is lost. Once signal returns it loads the screen without the user restarting it.

Why a real phone: Real dead zones drop and restore signal unevenly, which emulators do not reproduce

NET-23

Use the app on a real 2G signal

P2performancereal phone
  1. Set the preferred network type to 2G on an Airtel or Vi SIM, where allowed.
  2. Open the app and complete login and one key action.
  3. Note any screen that never finishes loading.

Expected: Login and the key action finish, even if slowly, with progress shown. A screen that cannot load shows a message and Retry, not a blank page.

Why a real phone: Real 2G adds packet loss and jitter that throttling profiles do not capture

NET-24

A voice call arrives during a request on a phone without VoLTE

P2interruptionreal phone
  1. Turn off VoLTE for an Airtel or Vi SIM in the phone's SIM settings.
  2. Start a request in the app, such as loading a statement.
  3. Receive a voice call on that SIM and talk for a minute.
  4. End the call and return to the app.

Expected: While data pauses during the call, the app shows a waiting or offline state and does not crash. After the call the request completes or offers Retry.

Why a real phone: Data pausing during non-VoLTE calls happens only on a real SIM and carrier

NET-25

Every request is slow to respond on a high-latency connection

P2performance
  1. Add a long delay to every request using a throttling tool.
  2. Open lists, search, and tap buttons that load data.
  3. Press Back while a request is still waiting.

Expected: Each wait shows progress, and Back works during it. Late responses do not reopen a screen the user left or replace newer search results.

NET-26

A request runs past the app's timeout

P1performance
  1. Throttle the network so a key request takes longer than the app's timeout.
  2. Start the request and wait without touching the screen.
  3. Tap Retry when it appears.

Expected: After the timeout the app shows a plain message and Retry instead of spinning forever. Retry starts a new attempt that completes when the network allows.

NET-27

Image-heavy screens load on a slow connection

P2performance
  1. Clear the app's cache and throttle the network to slow 3G.
  2. Open an image-heavy screen, such as a product list or menu.
  3. Scroll quickly and tap an item.

Expected: Text, prices and buttons appear first, with placeholders where images will go. The list stays scrollable and tappable while images fill in, without the layout jumping.

NET-28

Upload a large photo or document on a slow connection

P2interruption
  1. Throttle the network to slow 3G.
  2. Upload a large photo, such as a KYC document or a profile picture.
  3. Turn on airplane mode at about half progress, then turn it off.

Expected: The app shows upload progress and, after the drop, resumes or offers Retry without picking the file again. The image is uploaded once and is readable.

NET-29

Send the app to the background or lock the screen during a long upload

P2interruptionreal phone
  1. On a budget phone with default battery settings, start a large upload.
  2. Press Home or lock the screen, and wait two minutes.
  3. Return to the app.

Expected: The upload has finished or continues from where it stopped. If it was stopped, the app says so and offers Retry.

Why a real phone: Phone makers' memory and battery managers decide whether background uploads survive

NET-30

The system closes the app while an offline action is waiting

P2interruption
  1. Turn on airplane mode and save an action offline, such as a cart item.
  2. In Developer options, set Background process limit to No background processes.
  3. Open two other apps, then turn airplane mode off and reopen the app.

Expected: The waiting action is still listed after the app restarts. It is sent once after reconnecting.

Device & OS4

NET-31

Budget phone with 3–4 GB RAM on a slow 3G connection

P2performancereal phone
  1. Use a budget phone with 3–4 GB RAM and several apps open.
  2. On a slow 3G connection, open the app from cold.
  3. Move through three main screens.

Expected: The app opens to content or a loading state without an App not responding dialog. Moving between screens does not freeze while requests are waiting.

Why a real phone: Freezes and ANR dialogs on slow networks show up on low-RAM hardware

NET-32

Sync after reconnecting on a phone with an aggressive battery saver

P2compatibilityreal phone
  1. On a Xiaomi, Vivo or Oppo phone, keep battery settings at default.
  2. Save a change offline, then swipe the app away from recent apps.
  3. Reconnect, wait a few minutes, then open the app.

Expected: If background sync was blocked, the change is sent as soon as the app opens and appears once. The Pending label does not stay after a successful sync.

Why a real phone: These phone makers' battery managers block background sync that stock Android would run

NET-33

Android Data Saver is turned on

P3compatibility
  1. Turn on Data Saver in Android settings without exempting the app.
  2. Use the app, then send it to the background for a few minutes.
  3. Open it again.

Expected: The app works in the foreground. On return it refreshes old content instead of showing an error about background data.

NET-34

iPhone with Low Data Mode turned on

P3compatibilityreal phone
  1. On an iPhone, turn on Low Data Mode for mobile data or Wi-Fi.
  2. Open image-heavy screens and complete the key action.
  3. Turn Low Data Mode off and refresh.

Expected: Login, lists and the key action still complete, with images possibly at lower quality. Full quality returns after Low Data Mode is turned off.

Why a real phone: Low Data Mode is a per-network setting not available in the iOS Simulator

Security & privacy3

NET-35

Offline cache is cleared after logout

P1security
  1. Log in and open orders, statements and profile so they are cached.
  2. Log out, then turn on airplane mode.
  3. Open the app and try to reach the cached screens.

Expected: No data from the logged-out account appears anywhere, including cached lists and images. The app shows only the login screen.

NET-36

App lock is still required when the app opens offline

P1security
  1. Turn on the app's PIN or fingerprint lock.
  2. Close the app and turn on airplane mode.
  3. Open the app.

Expected: The app lock screen appears before any cached balance, order or profile data is shown.

NET-37

The session expires while the phone is offline

P2security
  1. Log in, save an action offline, and stay offline past the session timeout.
  2. Reconnect and open the app.
  3. Log in again when asked.

Expected: The app asks the user to log in before sending the waiting action. After login the action is sent once, or the user is told it must be redone.

Accessibility & language2

NET-38

Screen readers announce lost and restored connection

P3accessibility
  1. Turn on TalkBack or VoiceOver and open the app.
  2. Turn on airplane mode, then turn it off.
  3. Move focus to the error message and the Retry button.

Expected: The screen reader announces the offline and back online states. The Retry button is read with its name and role, not as an unlabelled button.

NET-39

Offline and timeout messages in Hindi at the largest font size

P2localization
  1. Set the app language to Hindi and the phone's font and display size to the largest.
  2. Turn on airplane mode and open several screens.
  3. Throttle the network to trigger a timeout message.

Expected: All offline and timeout messages appear in Hindi, with no English fallback text. Messages and the Retry button fit on screen without being cut off.

In the field

Where offline and poor network handling breaks on real phones

  • On public Wi-Fi at railway stations and airports, the phone shows Wi-Fi as connected while a sign-in page blocks traffic, and the app spins or shows a server error instead of saying the network needs sign-in.
  • When 4G drops to 3G or 2G in lifts, basements and metro tunnels, requests hang without a timeout and users tap Submit again, creating duplicate orders or payment attempts.
  • Moving from home Wi-Fi to mobile data mid-request, or switching the data SIM on a dual-SIM phone, leaves the app stuck on an offline banner until it is restarted.
  • After a daily data pack runs out and the carrier slows the connection, image-heavy screens block the key action and it times out.
  • Changes saved offline are lost when a budget phone's memory manager closes the app, or are sent twice when the app retries after reconnecting.
  • Error messages show raw timeout exceptions or status codes, which users report as the app being broken rather than their network being weak.

Run these 39 cases on real phones

They fit the Standard package: 10 × 45-minute sessions on 4 phones or browsers of your choice, up to ~50 cases, ₹18,999 + GST ($249), verified report in 3 business days. The 11 P1 cases alone fit Starter (₹9,999 + GST).

Download the CSV, pick the package at checkout and upload the file with your build. Testers run them on their own phones, on Jio, Airtel and Vi.

Questions

About testing offline and poor network handling

How do I simulate 2G and 3G networks when testing a mobile app?

The Android emulator's network settings and the iPhone's developer network conditioning option can slow the speed and add delay, which covers most loading and timeout checks. Real carrier networks also drop packets and change speed unevenly, so repeat the key flows on a real SIM in a weak-signal area or with the preferred network type set to 2G or 3G. Also test after a daily data pack runs out, when the carrier slows the connection.

How should an app prevent duplicate orders or payments on a slow network?

The app should disable the submit button after the first tap and send a unique reference with each request, so the server can recognise a repeat. When a response is lost, it should check the status of the original request before offering a fresh attempt. Test by double tapping on a slow network and by retrying after a timeout, then count the records created.

What should an app show when public Wi-Fi needs sign-in?

It should say that the network needs sign-in or has no internet, and suggest completing the sign-in page or switching to mobile data. It should not show a server error, spin forever or display the hotspot's page inside its own screens. After sign-in, the app should recover without a restart.

Related flows

Test these next

Your AI wrote the test cases. Run them on real phones.

99tests runs your cases, AI-generated ones included, on the phones, laptops and browsers your users own. Every finding is verified, serious bugs come with a screen recording, and each case comes back pass, fail, blocked or not run.