99testsStart a job

Test case library · KYC, lending & investing

Test cases for stock trading orders in a broking app

This page covers placing, modifying and cancelling stock orders in a trading app: market, limit, stop-loss and after-market orders, funds and margin checks, order statuses, live prices and two-factor login. The costly failures happen in the seconds around Buy or Sell, when a weak network, a battery saver or a race between fill and cancel leaves the user unsure whether an order went through.

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

From the reviews. In investing and trading apps, features that don't work led the 31 malfunction reviews (7), followed by crashes and freezes (6) and wrong or stale data (6).

category page · India App Quality Report

In scope

  • Market, limit, stop-loss and after-market orders
  • Modify, cancel and partly filled orders
  • Funds, margin, tick size, lot size and price band checks
  • Market hours, holidays and live price freshness
  • Two-factor login and session handling
  • Network drops and backgrounding around Buy and Sell

Out of scope

  • Account opening and KYC
  • Options strategy builders, baskets and GTT-style triggers
  • Contract notes, settlement and tax reports

Before you start

  • UAT environment with a simulated exchange feed, plus a small live account for notification and market-open checks
  • Test accounts with known funds and holdings, and the futures and options segment enabled
  • An authenticator app or a SIM on the registered number for the second factor
  • Phones: a 3–4 GB RAM Android with OEM battery saver on, a dual-SIM Android and an iPhone
  • Jio, Airtel or Vi SIMs and a Wi-Fi network you can switch off
Show
Add to a test plan

Happy path8

TRD-01

Log in on a new phone with password and second factor

P1functional
  1. Install the app on a phone never used with the test account.
  2. Enter the user ID and password, then the second factor, such as a TOTP or OTP.
  3. Check the registered email or phone for a new-login alert.

Expected: The app asks for the second factor before showing funds or holdings and opens the home screen once it is entered. A new-login alert arrives if the app sends one.

TRD-02

Place a market buy order during market hours

P1functional
  1. During market hours, open a liquid test stock and tap Buy.
  2. Choose market, delivery and quantity 1, then review the confirmation sheet.
  3. Confirm, then open the order book, positions and funds screens.

Expected: The order shows as executed with an average price, the position or holding shows quantity 1, and available funds drop by the order value plus the charges shown.

TRD-03

Place a limit buy below the current price and let it execute

P1functional
  1. Place a limit buy a little below the last traded price.
  2. Check the order book while the price stays above the limit.
  3. Wait for the price to reach the limit, or modify the limit to the current price.

Expected: The order shows as open with funds blocked while the price is above the limit, then changes to executed at the limit price or better.

TRD-04

Protect a holding with a stop-loss sell order

P1functional
  1. On a stock you hold, tap Sell and choose stop-loss.
  2. Set a trigger price below the current price and a limit price just below the trigger.
  3. Confirm and watch the order status as the price moves.

Expected: The order shows as trigger pending until the price falls to the trigger, then becomes an open or executed sell at the limit price or better.

TRD-05

Place an after-market order while the market is closed

P2functional
  1. Outside market hours, open a stock and tap Buy.
  2. Choose after-market order, set a limit price and confirm.
  3. Modify the price, then check the order book after the next session opens.

Expected: The order shows an after-market status with the modified price until the session opens, then moves to open or executed like a normal order.

TRD-06

Modify the price and quantity of an open limit order

P2functional
  1. Place a limit buy well below the current price so it stays open.
  2. From the order book, tap Modify and change both price and quantity.
  3. Confirm and reopen the order details.

Expected: The order book shows one open order with the new price and quantity, blocked funds change to match, and the order history shows the modification.

TRD-07

Cancel an open order and see blocked funds released

P1functional
  1. Place a limit buy well below the current price and note available funds.
  2. Cancel it from the order book.
  3. Check the order status and available funds.

Expected: The order shows as cancelled and available funds return to the amount shown before the order was placed.

TRD-08

See the same live price on the watchlist, order pad and chart

P2functional
  1. During market hours, add a busy stock to the watchlist.
  2. Compare its price on the watchlist, the order pad and the chart.
  3. Look for a last-updated time or live indicator on each.

Expected: All three show the same price and update together, and any last-updated time shown keeps moving during market hours.

Validation & negative8

TRD-09

Buy with insufficient funds or intraday margin

P1negative
  1. With a small balance, place a delivery buy worth more than the available funds.
  2. Place an intraday order whose margin is above the available margin.

Expected: Each time the app shows the required and available amounts in rupees with lakh grouping and an Add funds option. The order is blocked before sending or shows as rejected with the shortfall as the reason.

TRD-10

Add funds through UPI from the shortfall message and place the order

P1functionalreal phone
  1. From the shortfall message, tap Add funds and enter the amount needed.
  2. Pay with an installed UPI app and return to the trading app.
  3. Check available funds and place the order again.

Expected: Available funds rise by the amount paid without a fresh login, and the order goes through. If the credit is delayed, the app shows it as pending rather than failed.

Why a real phone: Funds are paid in a separate installed UPI app before returning to the trading app.

TRD-11

Try to sell more shares than you hold

P1negative
  1. On a stock where you hold 5 shares, place a delivery sell for 6.
  2. Try a delivery sell on a stock you do not hold.

Expected: Both are blocked or rejected with a clear message about the quantity available to sell, and holdings stay unchanged.

TRD-12

Enter a limit price that does not match the tick size

P2negative
  1. On the order pad, enter a limit price with more decimal places than the stock allows.
  2. Enter a price that falls between two valid ticks for that stock.
  3. Tap Buy.

Expected: The app rounds to a valid tick with a visible note or shows an error naming the tick size, and does not send an order the exchange would reject.

TRD-13

Enter a futures or options quantity that is not a multiple of the lot size

P2negative
  1. Open a futures or options contract and check the quantity or lots field.
  2. Type a quantity that is not a multiple of the lot size.
  3. Tap Buy.

Expected: The field shows the lot size and steps in whole lots, and an odd quantity shows an inline error instead of becoming a rejected order.

TRD-14

Place a limit order outside the day's price band

P2negative
  1. Open a stock and note the day's upper and lower price limits from its details.
  2. Place a limit buy above the upper limit.

Expected: The app blocks the order or shows a rejection that names the price band, and the order book does not show it as open.

TRD-15

Set a stop-loss trigger on the wrong side of the market price

P2negative
  1. On a holding, start a stop-loss sell with the trigger above the current price.
  2. Start a stop-loss buy with the trigger below the current price.

Expected: The app warns that the order would trigger at once, or blocks it with a message explaining where the trigger must be.

TRD-16

Catch an extra zero typed in the quantity or price before confirming

P2negative
  1. On the order pad, type a quantity of 100 instead of 10.
  2. Open the confirmation sheet and read it before tapping Confirm.
  3. Go back and repeat with an extra zero in the limit price.

Expected: The confirmation shows side, quantity, price and total value with lakh grouping, such as ₹1,25,000, and any large-order warning the app has appears before Confirm.

Edge cases6

TRD-17

Follow a partly filled order and cancel the rest

P1edge
  1. Place a limit order for more shares than are available at that price.
  2. Open the order details when part of it fills.
  3. Cancel the remaining quantity.

Expected: The order shows filled and pending quantities with an average price. After cancelling, the filled part stays in positions and the rest shows as cancelled.

TRD-18

Modify or cancel an order at the moment it executes

P1edge
  1. Place a limit order at a price very close to the current price.
  2. Tap Modify or Cancel just as the price reaches the limit.
  3. Refresh the order book and positions.

Expected: The app reports that the order was already executed, positions show the trade, and no open or modified copy of the order remains.

TRD-19

Place a market order in a thinly traded stock

P2edge
  1. Open a stock with few buyers and sellers and a wide gap in market depth.
  2. Place a market buy for more shares than the best offer holds.

Expected: The app warns about the wide spread or applies its market protection, and the order book clearly shows the fills, average price and any unfilled quantity.

TRD-20

Open the order pad on an exchange holiday

P2edge
  1. On a weekday the exchange has declared a holiday, open the app.
  2. Try a market order, then a limit order, then an after-market order.

Expected: The app says the market is closed for a holiday and shows the next session, blocks regular orders, and allows after-market orders only if it supports them that day.

TRD-21

Place orders just before and just after the market closes

P2edge
  1. In the final minute of the session, place a limit order.
  2. Place another limit order right after the close.
  3. Check the status of both in the order book.

Expected: The first is accepted as a regular order or rejected with a clear reason, the second is blocked or offered as an after-market order, and neither is stuck in a processing state.

TRD-22

Place an order in the first minute after the market opens

P2performance
  1. Keep the app open on the order pad before the session starts.
  2. Place a market order as soon as the market opens.
  3. Refresh the order book and positions.

Expected: The order status appears in the order book and quotes keep updating. If the app is slow, it shows a busy message rather than a blank screen or a duplicate order.

Interruptions & network7

TRD-23

Lose network right after tapping Buy

P1interruption
  1. Fill the order pad and tap Buy, then turn on airplane mode at once.
  2. Turn airplane mode off after a few seconds.
  3. Open the order book without placing the order again.

Expected: The order book shows at most one order with its real status, the app never resends it on its own, and any retry prompt warns that the first order may have gone through.

TRD-24

Background the app or have it killed right after tapping Sell

P1interruptionreal phone
  1. On a 3–4 GB RAM Xiaomi, Realme or Vivo phone, open a few heavy apps.
  2. Tap Sell on a holding, then press Home at once.
  3. After a minute, reopen the app from recent apps.

Expected: The app shows the sell order with its current status, and the holding quantity reflects any execution.

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

TRD-25

Live prices freeze in a lift or during a Wi-Fi to mobile data switch

P1interruptionreal phone
  1. During market hours, keep a busy stock open on Wi-Fi.
  2. Step into a lift or metro dead zone, then come out on mobile data.
  3. Tap Buy while the signal is weak.

Expected: While disconnected the app shows an offline or delayed-price indicator and warns or blocks before ordering on a stale price. Live prices resume after reconnecting.

Why a real phone: Real dead zones and Wi-Fi to carrier handovers decide how the price stream reconnects.

TRD-26

Unlock the phone after the app sat open with the screen off

P2interruptionreal phone
  1. On a phone with battery saver on, leave the app open on a watchlist.
  2. Lock the screen for ten minutes during market hours.
  3. Unlock and look at the prices and their last-updated time.

Expected: Prices refresh within a moment of unlocking, or are marked stale until they do, and old prices are never shown as live.

Why a real phone: Doze and OEM battery savers cut network access for apps on a locked phone.

TRD-27

Take an incoming call between reviewing and confirming an order

P2interruptionreal phone
  1. Fill the order pad and open the confirmation sheet.
  2. Answer an incoming call and talk for a minute.
  3. Return to the app and tap Confirm.

Expected: The confirmation sheet still shows the same order, nothing is sent during the call, and tapping Confirm places exactly one order.

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

TRD-28

Get the login OTP late or on SIM 2

P2interruptionreal phone
  1. Put the registered number in SIM 2 of a dual-SIM phone.
  2. Log in from a weak-signal spot and wait for the OTP.
  3. After the countdown, tap Resend and enter the latest OTP.

Expected: Manual entry stays available while waiting, auto-read fills the OTP from either SIM if supported, and only the latest OTP logs in.

Why a real phone: SMS delivery and auto-read depend on the real carrier, signal and SIM slot.

TRD-29

Copy a TOTP from an authenticator app and return

P2interruptionreal phone
  1. At the second-factor step on a low-RAM phone, switch to the authenticator app.
  2. Copy the code near the end of its time window.
  3. Return to the trading app and paste it.

Expected: The login is still on the second-factor step with the user ID kept, the pasted code fills every box, and an expired code shows a clear message to use the new one.

Why a real phone: Switching to an installed authenticator app can kill the login screen on low-RAM phones.

Device & OS3

TRD-30

Get execution notifications with the app swiped away

P2compatibilityreal phone
  1. On Xiaomi, Vivo or Oppo phones with default battery settings, place a limit order that stays open.
  2. Swipe the app away from recent apps and lock the phone.
  3. Wait for the order to execute.

Expected: An execution notification arrives with the stock, side, quantity and price, and tapping it opens that order. 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.

TRD-31

Unlock with fingerprint or face after the first full login

P2securityreal phone
  1. After a full login with the second factor, turn on biometric unlock.
  2. Close and reopen the app and unlock with fingerprint or face.
  3. Add a new fingerprint in phone settings and reopen the app.

Expected: Biometric unlock opens the app without the full login and offers a PIN fallback. After a new fingerprint is added, the app asks for the PIN or full login before biometrics work again.

Why a real phone: Biometrics need real fingerprint or face hardware.

TRD-32

Switch between chart and order pad on a low-RAM phone

P2compatibilityreal phone
  1. On a 3–4 GB RAM phone, fill the order pad but do not confirm.
  2. Open the full chart, then switch to another app for a minute.
  3. Come back to the order pad.

Expected: The order pad still holds the side, quantity and price, or clearly resets, and never shows a different stock or side from the one entered.

Why a real phone: Low-RAM phones reclaim background memory, unlike emulators with spare memory.

Security & privacy3

TRD-33

Enter a wrong second factor until the app locks login

P2security
  1. Enter the right password and a wrong TOTP or OTP.
  2. Repeat until the app stops accepting attempts.
  3. Try the correct code while locked.

Expected: Each failure shows a clear message. After the configured limit the app blocks login and explains how to unlock, and the correct code does not bypass the block.

TRD-34

Return to an order pad left open past the session timeout

P2security
  1. Fill the order pad and leave the phone unlocked and idle past the app's session timeout.
  2. Tap Buy.

Expected: The app asks for the PIN, biometrics or full login first, then shows the order again with current prices for review before it can be placed.

TRD-35

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

P1security
  1. As user A, open holdings and funds, then log out.
  2. Log in as user B on the same phone.
  3. Check the watchlist, holdings, order book and notifications.

Expected: User B sees none of user A's holdings, orders, funds or watchlist, and user A's biometric unlock does not open user B's account.

Accessibility & language5

TRD-36

Place an order with TalkBack or VoiceOver

P2accessibility
  1. Turn on TalkBack or VoiceOver and open the order pad.
  2. Set quantity, price and order type, then confirm.

Expected: Every field, toggle and button announces a clear label, Buy and Sell are announced by name, and the status change after confirming is announced or easy to find.

TRD-37

Tell Buy from Sell without relying on colour

P2accessibility
  1. Turn on grayscale or colour correction in the phone's accessibility settings.
  2. Open the order pad, order book and positions.

Expected: Buy and Sell, profit and loss, and order statuses are clear from text or icons, not only from green and red.

TRD-38

Place an order at the largest font and display size

P2accessibility
  1. Set font size and display size to the maximum.
  2. Open the order pad with the keyboard showing.

Expected: Price, quantity and the Buy or Sell button stay visible and tappable, and no digits of prices or quantities are cut off.

TRD-39

Show order values in lakh grouping and times in IST

P2localization
  1. Place an order worth more than ₹1,00,000.
  2. Check the value on the confirmation, order book and funds screens.
  3. Set the phone to a time zone outside India and check order times and market hours.

Expected: Values use lakh grouping, such as ₹1,25,000, and order times and market hours stay in IST or state which time zone they use.

TRD-40

Use the order pad in Hindi

P2localization
  1. Switch the app language to Hindi.
  2. Open the order pad and order book.
  3. Compare order types, product types and statuses with the English version.

Expected: Every label is translated without clipped text, and Buy, Sell and status words keep the same meaning as on the English screens.

In the field

Where stock trading order breaks on real phones

  • The network drops in a lift or metro right after Buy, the app shows a generic error, and the user taps Buy again and ends up with two orders.
  • Xiaomi, Realme or Vivo battery savers kill the app or cut its network on screen lock, so prices that look live are minutes old.
  • Execution and rejection notifications arrive late or never on phones whose battery savers block apps swiped out of recents.
  • Partial fills, modifications and cancellations race each other, leaving a phantom open order or a wrong quantity in the order book.
  • Switching to an authenticator, SMS or UPI app on a low-RAM phone kills the login or add-funds screen, and users start over.
  • Orders placed right at the open, at the close or on an exchange holiday get stuck in a processing state because those timings were never tested.

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 stock trading order

How do you test stock order flows without risking real money?

Use the broker's UAT environment with a simulated exchange feed, where you can move prices to trigger limits and stop-losses. Keep a small live account for the few cases a simulator cannot reproduce, such as real execution notifications and market-open load, and trade the smallest quantities. Log every test order so it can be matched against the order book afterwards.

Which order statuses should trading app tests cover?

At minimum: open, trigger pending for stop-loss, after-market, partly filled, executed, cancelled and rejected with a reason. Test the transitions as well as the end states, especially a modify or cancel arriving just as an order fills. Check that the order book, order details, positions and notifications all agree.

Why test live price freshness on real phones?

Price streams depend on a long-lived connection that battery savers and weak networks cut without warning. An emulator on office Wi-Fi rarely shows this, so stale prices can pass as live. On real phones, lock the screen, ride a lift or switch networks, and check that the app marks prices as delayed until they refresh.

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.