Skip to content
QA Knowledge Hub

Test cases for a chat app (WhatsApp-style)

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 whether the scope includes direct chats, groups, multiple devices, offline queues and read receipts. Define sent, delivered and read before writing assertions. Then follow one message from a local pending state through reconnect and receiver acknowledgement.

Scope and test data

These 30 cases target a fictional WhatsApp-style application, not WhatsApp itself. Use synthetic users Asha Test, Ravi Test and Neha Test on isolated accounts A, B and C. The example supports direct text, attachments, groups, read receipts and delete-for-everyone within a configured window D. Set text limit M and attachment limit B before testing.

For this fixture, sent means server accepted, delivered means a recipient client acknowledged receipt, and read means the permitted read signal was received. Group aggregation, blocking semantics and retention are explicit product decisions. WebSocket is a bidirectional transport; its existence alone does not establish these application-level delivery states or end-to-end encryption.

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.

Messages and history

IDCategoryTest caseExpected result
H01FunctionalA sends text to online BB receives one message with the same body and sender; A sees server acceptance
H02FunctionalB replies to AReply appears in the correct direct conversation on both clients
H03FunctionalSend Hindi text, emoji and line breaksBoth clients preserve content without replacement characters
H04NegativeSubmit an empty or whitespace-only messageNo message is created under the example text policy
H05BoundarySend M and M plus one charactersM is accepted; excess is rejected with the configured limit
H06FunctionalSend three numbered messages rapidly from one clientRecipient shows the agreed server sequence without gaps or duplicates
H07FunctionalReply to a specific earlier messageQuote links to the intended message, even when intervening messages arrive
H08FunctionalLoad older history while new messages arriveOlder and newer records join without duplicated IDs or scroll jumps away from the reading position
H09FunctionalSearch a conversation for a seeded phraseOnly authorised matching messages appear; selecting a result opens its context
H10FunctionalRestart after confirmed message persistenceAcknowledged history remains available according to retention policy

Offline, receipts and group state

IDCategoryTest caseExpected result
H11FunctionalA sends while offline, then reconnectsPending state changes to accepted only after acknowledgement; B receives one copy
H12NegativeDrop acknowledgement after server storage and retrySame logical message is reconciled without a second receiver copy
H13FunctionalKeep B offline after server acceptanceA does not see delivered or read until their defined acknowledgement events occur
H14FunctionalB receives without opening the conversationDelivered appears; read does not appear prematurely
H15FunctionalB opens the conversation with receipts enabledA sees read for the messages actually covered by B's read position
H16FunctionalB disables read receipts under the supported privacy optionSubsequent read activity is not exposed beyond the documented exception policy
H17FunctionalOpen A's account on a second supported deviceHistory and pending operations reconcile without duplicating sent messages
H18FunctionalAdd C to a group with restricted pre-join historyC sees only history allowed by the group's membership policy
H19SecurityRemove C from the group and request new messages as CPost-removal messages and attachments are denied by the server
H20FunctionalDelete a message for everyone before D expiresEligible clients show the agreed deletion marker; a later sync does not restore the body

Media, privacy and quality attributes

IDCategoryTest caseExpected result
H21BoundaryAttempt delete-for-everyone just after DAction is rejected or unavailable; UI does not falsely show a global deletion
H22FunctionalUpload an allowed image and download it as BImage belongs to the intended conversation and matches the test file
H23BoundaryUpload B-byte and B-plus-one-byte attachmentsBoundary file passes; excess gets a clear size error
H24NegativeInterrupt an attachment upload and retryOne completed attachment is linked; partial upload is not shown as downloadable
H25SecurityC requests the direct conversation or attachment URL for A and BAccess is denied even when C knows the resource ID
H26SecurityBlock B from A, then attempt a new message from BNew delivery follows the documented block policy without revealing A's private status
H27SecuritySend markup-like message textNeither message bubbles nor previews execute active content
H28UIUse screen reader and enlarged text in a long conversationSender, body and delivery state are distinguishable; composer remains reachable
H29CompatibilityRepeat offline send on each supported mobile and web clientOne message and consistent state transitions result on every client
H30PerformanceRun the agreed concurrent-chat workload and a long historySend-to-receive and history-load times meet recorded targets; failures and dropped IDs are counted

Prove the transition, not the icon colour

Record the message ID, sender acceptance time, receiver acknowledgement and visible state on both devices. Device clocks may disagree, so use a common measurement clock when calculating latency. An icon is only useful evidence when its meaning is documented.

If asked about encryption, separate content visibility tests from cryptographic assurance. Reading encrypted network traffic or seeing a lock icon cannot establish the full security of an end-to-end encryption implementation. These cases do not make that claim.

Downloads

Quick answers

Does sent mean delivered?

Not in this fixture. Sent is server acceptance; delivered requires a receiver acknowledgement. Agree on the definitions used by the real product.

How do I test duplicates after reconnect?

Interrupt the connection after storage but before acknowledgement, reconnect and retry, then compare stable message IDs and receiver history.

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.