99testsStart a job

Test case library · Shopping, delivery & travel

Test cases for train ticket booking and PNR status

This page covers booking a train ticket in an app: station search, dates, class and quota, availability and waitlist, passenger details, payment, PNR status, cancellation and refunds. Bookings fail in the field at the moments of most pressure, when a booking window opens and load spikes, when the session expires inside the UPI app, or when a ticket is checked on a moving train with no signal.

40 test cases14 release-blocking (P1)11 need a real phoneUpdated 2026-10-29

From the reviews. Failed payments were travel apps' top malfunction (11 of 32), at 4.3% of storefront reviews, more often than in UPI, payment or banking apps.

category page · India App Quality Report

In scope

  • Station search, date picker, class and quota
  • Availability, waitlist and berth preference
  • Passenger details and fare review
  • UPI payment with a session timeout and debited-but-failed bookings
  • PNR status, cancellation and refund status
  • Heavy load when a booking window opens

Out of scope

  • Account registration and login
  • Meals, hotels and other add-ons
  • Station and on-train services

Before you start

  • Test or staging environment with seeded trains, quotas and availability, including waitlisted and nearly full trains
  • Test accounts with saved passengers, and UPI test accounts for payment
  • Several testers available at the same moment for booking-window load checks
  • Phones: a 3–4 GB RAM Android with OEM battery saver on, a small-screen Android and an iPhone
  • Jio, Airtel or Vi SIMs, a Wi-Fi you can switch off and a Wi-Fi network with a sign-in page
Show
Add to a test plan

Happy path9

TRN-01

Search trains between two stations by name

P1functional
  1. Type the first few letters of the origin station and pick it from the suggestions.
  2. Do the same for the destination, then tap swap once and swap back.
  3. Pick a date and tap Search.

Expected: Suggestions show station names with codes, swap exchanges both fields, and results list each train's number, name, departure, arrival, duration and classes.

TRN-02

Pick a journey date with the date picker

P2functional
  1. Open the date picker and try to tap yesterday's date.
  2. Scroll to the last date the app allows and try the day after.
  3. Pick tomorrow and return to the search form.

Expected: Past dates and dates beyond the booking window are disabled with a short note, today is marked by its IST date, and the form shows the picked date with its weekday.

TRN-03

Check availability for a class and quota

P1functional
  1. From the results, open a train and choose a class and the general quota.
  2. Check the availability shown for the next few dates.
  3. Switch to another class and back.

Expected: Each date shows a clear status, such as available with a count, RAC or a waitlist number, along with the fare, and switching classes updates both.

TRN-04

Add passengers with berth preference and review the booking

P1functional
  1. Tap Book on an available date and add two adults with names, ages and genders.
  2. Choose a lower berth preference for one and no preference for the other.
  3. Open the review screen.

Expected: The review screen lists each passenger with age, gender and berth preference, and shows the train, class, quota, boarding station, date and total fare.

TRN-05

Pay with UPI and receive the ticket

P1functionalreal phone
  1. On the review screen, tap Pay and choose an installed UPI app.
  2. Check the amount in the UPI app, then pay with the UPI PIN.
  3. Return to the booking app.

Expected: The UPI app shows the same total as the review screen. The booking app then shows the ticket with a PNR and each passenger's coach and berth or waitlist number, followed by an SMS or email confirmation.

Why a real phone: Payment happens in a separate installed UPI app and returns to the booking app.

TRN-06

Check PNR status from the app

P1functional
  1. Open PNR status and enter the PNR of a test booking.
  2. Pull to refresh the status screen.
  3. Open the same booking from booking history and compare.

Expected: Both screens show the same status for each passenger, whether the chart is prepared, and when the status was last updated.

TRN-07

Cancel one passenger from a multi-passenger ticket

P1functional
  1. Open a confirmed test ticket with three passengers and tap Cancel.
  2. Select only the second passenger and read the refund amount shown.
  3. Confirm the cancellation and reopen the ticket.

Expected: The refund amount is shown before confirming, only the second passenger shows as cancelled, and the other two keep their coach and berth.

TRN-08

Track the refund after a cancellation

P2functional
  1. After cancelling, open the refund status from the booking or cancellation history.
  2. Note the amount, reference number and where the refund will go.
  3. Check the original payment method once the app shows the refund as complete.

Expected: The refund status shows the same amount as the cancellation screen with a reference and progress, and the original payment method receives that amount.

TRN-09

Book a tatkal ticket using the saved passenger list

P1functional
  1. Before the tatkal window opens, save the passengers in the app's passenger list.
  2. When the window opens, choose the tatkal quota and the class.
  3. Add passengers from the saved list and complete payment.

Expected: Saved passengers fill in with one tap each, the fare breakdown shows any tatkal charges separately, and the ticket shows the tatkal quota with its status.

Validation & negative6

TRN-10

Search with the same origin and destination or an unknown station

P2negative
  1. Pick the same station for From and To and tap Search.
  2. Type a station name that does not exist and tap Search.

Expected: The app blocks both with a clear message, such as choose different stations or no station found, instead of an empty results page.

TRN-11

Add a male passenger to a ladies quota booking

P2negative
  1. Choose the ladies quota on a train and class that offer it.
  2. Add an adult male passenger and tap Continue.

Expected: The app blocks or warns using the quota rule it shows on screen, and the booking cannot reach payment with that passenger.

TRN-12

Choose the senior citizen quota for a passenger who does not qualify

P2negative
  1. Choose the senior citizen quota and read the eligibility shown.
  2. Add a passenger whose age is below that eligibility.
  3. Tap Continue.

Expected: The app shows an inline message about the quota's eligibility and does not allow payment until the passenger or the quota is changed.

TRN-13

Enter passenger names and ages that should be rejected or accepted

P2negative
  1. Enter a single-letter name, a name with digits and a name with initials and dots.
  2. Enter an age of 0 for an adult, then 150.
  3. Tap Continue after each entry.

Expected: Names with digits and impossible ages show inline errors, while names with initials such as R. K. Sharma are accepted or get a clear format hint.

TRN-14

Enter an invalid PNR

P2negative
  1. In PNR status, enter 9 digits, then letters, then a 10-digit number not linked to a booking.
  2. Tap Check after each.

Expected: Short or non-numeric entries are blocked before sending, and an unknown PNR shows a plain not-found message instead of a raw error or a blank screen.

TRN-15

Try to cancel after the train has departed

P2negative
  1. Open a test ticket for a train that has already departed.
  2. Look for the cancel option and tap it if shown.

Expected: The cancel option is hidden or explains why it is unavailable and what the user can do instead, without showing a refund amount.

Edge cases6

TRN-16

Book a train that reaches the boarding station after midnight

P1edge
  1. Pick a train that starts in the evening and reaches your boarding station after midnight.
  2. Search using the date you will actually board.
  3. Book and read the date and time on the ticket.

Expected: The search on the boarding date finds the train, and the ticket shows the boarding date and time at your station, with any start date at the origin clearly labelled.

TRN-17

Board at an intermediate station

P2edge
  1. Search from a station partway along a train's route.
  2. Book, then open the ticket and the boarding point details.
  3. Change the boarding point if the app offers it.

Expected: The ticket shows the chosen boarding station with its own departure time, and a changed boarding point appears on the ticket and in PNR status.

TRN-18

Availability changes between search and payment

P1edge
  1. Open a train with only a few berths left and start booking.
  2. Book those berths from a second account on another phone.
  3. Continue to payment on the first phone.

Expected: Before payment the first phone shows the new status, such as waitlist or RAC, with the fare, and asks the user to confirm or go back.

TRN-19

Berth preference is not met

P2edge
  1. Book with a lower berth preference on a train with few lower berths left.
  2. Open the ticket after booking.

Expected: The ticket clearly shows the berth actually allotted, separate from the preference. If an option to book only with the preferred berth was ticked, the booking does not go through with another berth.

TRN-20

Search a city that has several stations

P2edge
  1. Type the name of a large city with several stations into From.
  2. Choose the all-stations option if offered, otherwise one station.
  3. Search and check which station each train leaves from.

Expected: Suggestions list each station separately, and results label the departure station for every train so the user does not go to the wrong one.

TRN-21

Add a child passenger

P2edge
  1. Add a child passenger whose age is under the limit the app shows for children.
  2. Choose with or without a berth, if the app offers it.
  3. Open the review screen.

Expected: The review screen shows the child's berth choice and fare, and the total matches the sum of the per-passenger fares.

Interruptions & network9

TRN-22

Booking session times out while the user is in the UPI app

P1interruptionreal phone
  1. Tap Pay and open the UPI app as the booking countdown nears its end.
  2. Wait in the UPI app until the countdown has run out, then pay.
  3. Return to the booking app and open booking history.

Expected: The app shows either a confirmed ticket or a failed booking with refund status and a reference. It never shows a session-expired message alone with no word on the money.

Why a real phone: The timer runs out while a separate installed UPI app is in front.

TRN-23

Money is debited but the booking fails or stays pending

P1interruptionreal phone
  1. Complete payment in the UPI app.
  2. Turn on airplane mode before returning to the booking app.
  3. Reconnect and check booking history and the bank account statement.

Expected: Booking history shows the booking as pending, booked or failed with a refund reference, never missing, and the app warns before letting the user pay again for the same journey.

Why a real phone: Needs a real UPI debit while the booking app loses its confirmation.

TRN-24

App killed by the system while paying in the UPI app

P1interruptionreal phone
  1. On a 3–4 GB RAM Xiaomi, Realme or Vivo phone, open several heavy apps.
  2. Start payment and stay in the UPI app for a minute before paying.
  3. Return through recent apps.

Expected: The booking app reopens on the booking status rather than a blank search screen, and shows the ticket or a pending state for that payment.

Why a real phone: OEM battery savers kill backgrounded apps on budget phones, unlike emulators.

TRN-25

Book at the moment a booking window opens under heavy load

P1performance
  1. Fill the search and passenger details a few minutes before the window opens.
  2. Tap Book the moment the window opens, with other testers doing the same.
  3. Retry when the app asks, without force-closing it.

Expected: The app shows a queue or busy message instead of crashing or logging out, keeps the filled details, and never charges twice for one booking.

TRN-26

Check PNR status on the move with patchy signal

P2interruptionreal phone
  1. On a train, bus or car journey, open PNR status where the signal keeps dropping.
  2. Pull to refresh a few times as the network moves between 4G and 2G.

Expected: The app shows the last fetched status with its time, retries without an endless spinner, and says clearly when it is offline.

Why a real phone: Signal on the move switches towers and drops in ways emulators cannot copy.

TRN-27

Open the booked ticket with no network

P2interruption
  1. Open a booked ticket once while online.
  2. Turn on airplane mode and force-close the app.
  3. Reopen the app and open the ticket from booking history.

Expected: The ticket opens offline with the PNR, train, date, coach, berth and passenger names, and shows when it was last updated.

TRN-28

Take an incoming call while entering passengers or paying

P2interruptionreal phone
  1. Start adding passenger details and answer an incoming call.
  2. Return to the app after a minute.
  3. Continue to payment and take another call while in the UPI app.

Expected: Entered details are still there after the first call, and after the second the payment completes once with the ticket shown, or the app shows a clear pending state.

Why a real phone: Carrier calls take over the screen and pause apps differently on each OEM.

TRN-29

Lock the phone during the booking countdown and unlock later

P2interruptionreal phone
  1. Start a booking so the session countdown appears.
  2. Lock the screen for several minutes, then unlock.
  3. Compare the countdown with the time that has really passed.

Expected: The countdown shows the true remaining time, or says the session has expired, instead of resuming from where it froze.

Why a real phone: Locked phones pause app timers differently, so countdowns can freeze on real devices.

TRN-30

Book on station Wi-Fi that needs a sign-in page

P2interruptionreal phone
  1. Connect to a public Wi-Fi that shows a sign-in page, without signing in.
  2. Open the app and search for trains.
  3. Sign in to the Wi-Fi, or switch to mobile data, and retry.

Expected: The app says it cannot reach the internet instead of spinning, and works normally once the Wi-Fi sign-in is done or the phone moves to mobile data.

Why a real phone: Sign-in-page Wi-Fi and the phone's detection of it only happen on real networks.

Device & OS4

TRN-31

Get notified when a waitlisted ticket moves up or the chart is prepared

P2compatibilityreal phone
  1. Book a waitlisted test ticket on Xiaomi, Vivo or Oppo phones with default battery settings.
  2. Swipe the app away from recent apps.
  3. Wait for the status to change or the chart to be prepared.

Expected: A notification arrives with the new status for each passenger, and tapping it opens the ticket. Note any delay for each phone maker.

Why a real phone: Notification delivery after swipe-away depends on each OEM's battery and autostart settings.

TRN-32

Pay with one of several UPI apps or with a UPI ID

P2compatibilityreal phone
  1. On a phone with three UPI apps, tap Pay and look at the chooser.
  2. Go back and pay by entering a UPI ID instead, if offered.
  3. Approve the collect request in the UPI app before the countdown ends.

Expected: The chooser lists the installed UPI apps, and the UPI ID route sends a collect request that completes the booking once approved.

Why a real phone: The list of UPI apps comes from what is actually installed on the phone.

TRN-33

Fill the From station from current location

P3compatibilityreal phone
  1. Tap the current location option on the From field, if the app offers it.
  2. Allow location and wait for the station to fill.
  3. Repeat with location denied.

Expected: With location allowed, the nearest station or a short list fills in. With it denied, the app falls back to typing without repeated prompts.

Why a real phone: Needs a real GPS fix, which is slow or unavailable indoors and inside stations.

TRN-34

Use the date picker and availability screens on small screens

P2compatibility
  1. Open the search, date picker and availability screens on a 5-inch Android phone.
  2. Repeat on a small-screen iPhone.

Expected: The calendar fits without cut-off weekdays, class and quota tabs scroll, and the Book button stays visible above the system navigation bar.

Security & privacy2

TRN-35

Log out on a shared family phone and log in as someone else

P1security
  1. As user A, book a ticket and save passengers, then log out.
  2. Log in as user B on the same phone.
  3. Open booking history, saved passengers and recent PNR searches.

Expected: User B sees none of user A's bookings, saved passengers, payment methods or recent PNRs.

TRN-36

Share a ticket without exposing more than needed

P2security
  1. Open a booked ticket and use Share, then Download if offered.
  2. Open the shared text or file and read every field.

Expected: The shared ticket shows journey and passenger details but masks any ID number and payment details, and contains no link that opens the account without a login.

Accessibility & language4

TRN-37

Search stations in Hindi and with Hinglish spellings

P2localization
  1. Switch the keyboard to Hindi and type a station name in Devanagari.
  2. Type common Hinglish or older English spellings of a city name.
  3. Switch the app language to Hindi and open the results.

Expected: Each search finds the right station, and with the app in Hindi, station names, statuses and buttons appear in Hindi without clipped text.

TRN-38

Search and book with TalkBack or VoiceOver

P2accessibility
  1. Turn on TalkBack or VoiceOver and search for trains.
  2. Move through the date picker, class tabs and availability for each date.
  3. Add a passenger and reach the review screen.

Expected: Every control announces a clear label, dates are read with day and month, and statuses are read in full, such as waitlist 12, not just WL12.

TRN-39

Read availability and the fare summary at the largest font size

P2accessibility
  1. Set font size and display size to the maximum.
  2. Open the results, availability and fare summary screens.

Expected: Train names, times, statuses and fares are not cut off or overlapping, and the Book and Pay buttons stay reachable.

TRN-40

Show times in IST and fares in rupees on every screen

P2localization
  1. Set the phone to a time zone outside India.
  2. Open search results, a booked ticket and PNR status.
  3. Start a booking for four passengers and read the fare breakdown.

Expected: Departure and arrival times stay in IST on every screen, and fares show in rupees with Indian grouping, such as ₹12,450, matching the amount charged.

In the field

Where train ticket booking breaks on real phones

  • The booking countdown runs out while the user is in the UPI app, money is debited, and the app shows only session expired with no ticket or refund status.
  • Xiaomi, Realme or Vivo battery savers kill the booking app during UPI payment, and it reopens on a blank search screen while the payment is still pending.
  • When a booking window opens, the app crashes, logs users out or clears passenger details under load, and repeated retries lead to double charges.
  • Trains that reach the boarding station after midnight are searched or shown under the wrong date, and travellers turn up a day late.
  • PNR checks on a moving train spin forever as the signal drops between 4G and 2G, and the ticket cannot be opened offline.
  • Waitlist and chart notifications arrive late or never on phones whose battery savers block apps swiped out of recents.

Run these 40 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 14 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 train ticket booking

How do you test train booking when a booking window opens under heavy load?

Coordinate several testers on real phones and networks to book at the same moment, with passenger details filled in beforehand. Watch for crashes, logouts, cleared forms and double charges, and record what the app shows at each step. A backend load test helps, but only phone-side testing shows what users actually see.

What should a train app show when money is debited but no ticket is booked?

It should list the booking in history as pending or failed, with the amount, a payment reference and a refund status, instead of leaving it out. It should also warn before the user pays again for the same journey. Test this by cutting the network right after payment and by letting the session expire while the UPI app is open.

Which train booking cases need a real phone?

Cases that switch to a UPI app, depend on battery savers killing the app, or rely on notifications, GPS or a weak signal on the move. Countdowns on a locked phone and station Wi-Fi with a sign-in page also behave differently on real devices. Search, quota rules, passenger validation and fare checks can run on an emulator.

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.