Banking App Testing Checklist (Security-First, 2026)
Banking apps have the highest bug cost of any app category. A crash loses trust. A security bug loses the bank's license. Scripted automation covers the happy path but misses the creative attacks and
Banking apps have the highest bug cost of any app category. A crash loses trust. A security bug loses the bank's license. Scripted automation covers the happy path but misses the creative attacks and UX slips that actually hurt customers. This checklist is what a security-first QA team runs before every release.
Why banking apps are different
Three things make banking QA harder than other app categories:
- Regulatory exposure — PCI-DSS, PSD2, RBI, SOX, GDPR all apply. A missed logging requirement or an unencrypted audit trail is a compliance finding, not just a bug.
- Adversarial users exist. Other apps worry about frustrated users. Banking apps worry about motivated attackers.
- Money is real and irreversible. A duplicate-submit bug on a food app costs one meal. On a banking app, it costs ten thousand dollars transferred twice.
Pre-release checklist
Authentication
- Password login — strong password policy enforced client + server
- Biometric login — fallback to password if biometric fails 3x
- Biometric enrolment change detected — re-auth required with password
- 2FA / OTP — code expires, cannot be replayed
- Session timeout after 5 minutes idle — configurable, defaults sensible
- Session invalidated on background for > 30 seconds
- Device change detected — user notified via SMS + email
- Root / jailbreak detection — app refuses to run on compromised device
- Tapjacking protection — overlay detection blocks sensitive screens
- Screenshot blocking on balance and statement screens
Balance and statements
- Balance loads within 3 seconds on 4G
- Balance matches core banking system exactly (no cached stale value)
- Pending transactions clearly labeled separate from cleared
- Statement pagination works past 100 transactions
- Date range filter respects timezone
- Export PDF / CSV — no PII in filename, file encrypted or warning shown
Transfers
- Beneficiary add — OTP required, cooling period before first transaction
- Beneficiary validation — IFSC / SWIFT / ABA / IBAN format strict
- Transfer amount — min and max enforced client + server
- Daily limit enforced and visible to user before attempt
- Insufficient balance — clear error, no partial transfer
- Network timeout mid-transfer — no duplicate submission on retry
- Transfer confirmation screen — shows all details, user must confirm
- Transaction ID visible and copyable post-transfer
- Failure reason clear and actionable (not "error 403")
Bill pay / merchant payments
- Biller list loads from server, not cached indefinitely
- Autopay setup — cancellation path equally obvious
- Recurring payment edit / pause / delete all work
- Payment scheduled for future date — edit and cancel possible until T-1
- Statement reconciliation — paid bills marked correctly
Cards
- Card details load with proper masking (first 4, last 4)
- CVV never shown in full, not even when revealed
- Block / unblock card — immediate effect, confirmation via push
- PIN change — OTP required, complexity enforced
- International usage toggle — effect reflected in real time
- Virtual card generation — unique CVV, expiry, short lifetime
Security-adjacent
- No sensitive data in logcat / OS logs (grep for card numbers, CVVs, passwords)
- No sensitive data in crash reports (verify with intentional crash)
- App does not write PII to external storage
- Clipboard is cleared after copying account numbers
- Pull-to-refresh does not leak request body to URL
- Deep links reject unauthenticated access to sensitive screens
- In-app browser sandboxed — opens third-party URLs externally
- WebView — JavaScript enabled only on trusted domains
- Certificate pinning active — MITM attempts rejected
Push and SMS
- Push notifications do not contain amounts or account numbers (or user opts in)
- SMS OTP does not include recipient account details
- Fraud alert push — actionable, link to block card
- Rich notifications respect lock-screen privacy settings
Regulatory / compliance
- Audit trail — every sensitive action logged with user, device, timestamp
- Data retention — deleted accounts purged after regulated period
- Right to export — user can download their data in machine-readable format
- Consent flow — clear opt-in for optional data sharing
- Accessibility — WCAG 2.1 AA minimum (legal requirement in many jurisdictions)
Accessibility
- Screen reader reads amounts correctly ("one hundred and fifty dollars")
- Touch targets at least 48dp, 64dp preferred for elderly users
- High contrast mode — all text passes 4.5:1 ratio
- Focus order predictable in long forms (transfer, add beneficiary)
- Error announcements audible, not just visible
Edge cases
- App backgrounded during OTP entry — session preserved 60 seconds
- Rotation on payment screen — form state preserved
- Locale change (English → Hindi mid-session) — app does not crash
- Clock skew ±2 minutes — TOTP still works within window
- Daylight saving transition — scheduled payments fire correctly
- Account locked server-side while user in transfer flow — graceful error
- Two sessions from two devices — last-write-wins or both allowed?
- User changes device — old device session invalidated within 60 seconds
How SUSA helps
SUSA runs security checks automatically alongside UI exploration: OWASP Mobile Top 10, APK static analysis via Hammer integration, runtime API abuse simulation (IDOR attempts, auth bypass, tampered headers), header and CSP validation for web, sensitive-data-in-logs detection. The adversarial persona tries invalid inputs and rapid taps; the business_professional persona checks efficiency of common flows like transfer and statement download; the accessibility_user persona runs TalkBack and checks WCAG compliance on every screen.
susatest-agent test bank.apk --persona adversarial --steps 200 --security-depth full
For a banking app, I would run three SUSA passes per release: adversarial for security and stress, elderly for accessibility and UX clarity, business_professional for efficiency of the money-moving flows. Then Appium regression in CI on the generated scripts. Then a human pass for anything involving real card rails.
Test Your App Autonomously
Upload your APK or URL. SUSA explores like 10 real users — finds bugs, accessibility violations, and security issues. No scripts.
Try SUSA Free