Chat Functionality Testing Checklist (2026)

Chat Functionality Testing Checklist (2026) provides a concrete, step‑by‑step matrix that teams can use to verify every aspect of a modern chat system before release. The checklist groups more than th

January 15, 2026 · 21 min read · Testing Checklists

Chat Functionality Testing Checklist (2026) provides a concrete, step‑by‑step matrix that teams can use to verify every aspect of a modern chat system before release. The checklist groups more than thirty verifiable items into logical areas—happy path, error handling, edge/boundary cases, accessibility, security/privacy, performance, release readiness, and autonomous exploration—so that engineers can apply it manually, in CI pipelines, or with an autonomous QA platform like SUSA. Each item includes a clear pass criterion, a real‑world example, and guidance on how to automate the check where practical. By following this guide you will catch crashes, dead buttons, WCAG violations, injection flaws, and performance regressions that often only surface under real user load or with atypical personas.

Happy Path Testing (Chat Functionality Testing Checklist (2026))

The happy path validates that the core chat experience works as expected for a typical user. Successful execution of these items establishes a baseline before probing failure modes.

Message Send and Receive

#Test ItemPass CriterionExample
1User can send a plain text messageMessage appears in the sender’s view instantly and in the recipient’s view within 500 ms (typical LAN)Send “Hello world” from user A; verify it shows in user B’s chat bubble with correct timestamp
2Message persists after page reload or app restartMessage is stored server‑side and re‑loaded correctlyAfter sending, refresh the web page; the message remains visible
3Message supports Unicode and emojisCharacters render correctly without garbling or truncationSend “👍🌟✨” and confirm each emoji displays as the native glyph
4Message length limit is enforced UI‑wiseUI prevents entry beyond limit and shows inline errorAttempt to type 5001 characters in a field limited to 5000; the 5001st character is blocked and a tooltip reads “Maximum 5000 characters”
5Message can be edited (if supported)Edit replaces original text, edit indicator appears, history retains originalLong‑press a sent bubble → Edit → change “Hi” to “Hey”; bubble updates, a small “edited” label appears
6Message can be deleted (if supported)Message removed from all participants’ views, tombstone or “This message was deleted” placeholder shownSwipe left on a message → Delete → verify bubble disappears for all users in the conversation

Conversation Navigation

#Test ItemPass CriterionExample
7User can open an existing conversation from the listConversation screen loads with correct header, participant list, and message historyTap “Work Team” in the sidebar; verify the thread shows the last 50 messages and the group name
8User can start a new one‑on‑one chatSearch returns correct user, tapping creates a fresh conversation with no prior historySearch for “alice@example.com”, select result, verify empty chat header shows only Alice’s name
9User can create a group chat with multiple participantsUI allows adding contacts, group name optional, creation succeeds and all invited users see the groupSelect three contacts, tap “Create Group”, name “Project X”, confirm each participant receives a system notification and sees the group in their list
10User can leave a group chat (if supported)Upon leaving, the user no longer receives new messages and sees a left‑group noticeIn a group of four, user C taps “Leave Group”; subsequent messages from A, B, D do not appear for C, and C sees “You left the group”
11User can search within a conversationSearch bar returns matching messages, highlights hits, and allows jumping to eachType “deadline” in chat search; results list shows two messages, tapping jumps to each with the term highlighted

Media and Attachments

#Test ItemPass CriterionExample
12User can attach an image (JPEG/PNG) and sendImage uploads, thumbnail appears in chat, recipient can view full‑size imageAttach a 2 MB PNG; verify thumbnail shows, tapping opens full image in viewer
13User can attach a video and send (size limit enforced)Video uploads, playable inline or via external player, error shown if exceeds limitAttach a 15 MB MP4 (limit 20 MB); verify send succeeds, playback works; attach a 25 MB file → toast “File too large”
14User can send a file (PDF, DOCX) and recipient can downloadFile transfers without corruption, download initiates with correct MIME typeSend a 500 KB PDF; recipient taps download, file opens in PDF reader with same content
15User can capture and send a photo directly from cameraCamera launches, photo is attached, sent with correct orientationTap camera icon, take picture, confirm image appears upright in chat
16User can record and send a voice noteAudio recorded, waveform displayed, recipient can play/pauseHold mic icon, record 5 s note, release; waveform shows, tapping plays audio with clear sound

Error Handling and Failure Scenarios (Chat Functionality Testing Checklist (2026))

Error handling ensures the chat remains usable when things go wrong, providing clear feedback and preventing data loss.

Network Interruptions

#Test ItemPass CriterionExample
17Send message while offlineMessage queued locally, UI shows sending spinner, automatic retry on reconnectionDisable Wi‑Fi, send “Test offline”; see clock icon, then re‑enable Wi‑Fi → message sent, spinner disappears
18Receive message while offlineMessage stored server‑side, delivered and displayed when connection restoredWhile device offline, another user sends “Hi”; after reconnection, message appears with correct timestamp
19Long‑lasting network loss (>30 s)App shows a persistent banner “No connection – tap to retry”, does not crashUnplug Ethernet for 40 s, verify banner appears, app remains responsive to UI taps
20Partial packet loss causing duplicate messagesDe‑duplication logic prevents duplicate displaySimulate 10 % loss with tc; send five messages, verify each appears exactly once
21Server returns 500 error on sendUI shows error toast, message remains editable for resendMock server to return 500; after send attempt, toast “Failed to send – tap to retry”, message box retains text

Invalid Input and Validation

#Test ItemPass CriterionExample
22Empty message submissionSend button disabled or shows inline warning “Message cannot be empty”Tap send with empty field → button stays grey, no network request
23Message containing only whitespaceTreated as empty, same behavior as #22Send five spaces → blocked
24Message with prohibited characters (e.g., null byte)Input sanitized or rejected with clear errorPaste \x00 → field rejects or strips null, no crash
25Attempt to send a file with unsupported extensionUI shows “Unsupported file type” and blocks sendTry to send a .exe file → toast “Only images, documents, and videos allowed”
26Message exceeds server‑side length limit (e.g., 10 KB)Server returns 400, client shows error and does not lose draftSend a 12 KB string → response 413 Payload Too Large, UI shows “Message too long (max 10 KB)”
27Malformed deep link URL shared in chatLink rendered as plain text, no automatic executionPaste javascript:alert(1) → appears as text, clicking does not run script

State Corruption and Recovery

#Test ItemPass CriterionExample
28App crashes mid‑conversation, restart restores stateOn relaunch, conversation list and open chat reflect last known state (including drafts)Force kill app while typing, reopen → draft text still present in input box
29Corrupt local database (simulated by file rename)App detects corruption, offers to reset chat cache without losing server dataRename SQLite file, launch app → dialog “Chat data corrupted – reset?”, after reset, messages re‑sync from server
30Simultaneous login from two devices causes conflictBoth clients show a notification “You are logged in elsewhere”, session can be terminated or keptLog in on phone, then tablet; tablet shows banner, tapping “Log out elsewhere” ends phone session
31Server pushes a message with missing sender IDClient displays “Unknown sender” placeholder, does not crashInject a message lacking sender_uuid; UI shows gray avatar and label “Unknown”
32Rate‑limited send attempts (HTTP 429)Client shows “Too many requests – wait X seconds”, disables send temporarilySend 30 messages in 2 s, server returns 429; UI shows countdown and blocks further sends until timer expires

Edge and Boundary Cases (Chat Functionality Testing Checklist (2026))

Edge cases expose issues that rarely appear in day‑to‑day testing but can cause severe defects under specific conditions.

Large Conversations and Scrolling

#Test ItemPass CriterionExample
33Scrolling to top of a conversation with >10 000 messagesVirtualized list loads chunks smoothly, no jank, position retained after rotationPopulate chat with 12 k messages via API, scroll to top, observe steady 60 fps, rotate device → list retains scroll offset
34Jump to a specific date via date pickerCorrect message batch fetched, UI shows placeholder while loadingTap calendar icon, select 2024‑03‑15, verify messages from that day appear, loading spinner shown during fetch
35New messages arriving while user scrolled upNew messages do not auto‑scroll unless user is at bottom; indicator shows unread countScroll to middle, receive three new messages → scroll position unchanged, badge shows “3 new”
36Rapid insertion of many messages (e.g., bot flood)UI remains responsive, memory usage stays bounded, excess messages are virtualizedSimulate bot sending 200 msgs/s for 10 s, verify UI does not freeze, memory <150 MB
37Long press on a message brings up context menuMenu appears with relevant actions (copy, reply, react, delete, report)Long‑press on an image message → menu shows “Save Image”, “Copy Text”, “Reply”, “Report”
38Message reaction limit (e.g., max 20 reactions)Adding beyond limit shows toast “Maximum reactions reached”, existing reactions unchangedAdd 21 different emojis to same message → 21st attempt blocked with toast

User Personas and Input Variations

#Test ItemPass CriterionExample
39Novice user taps send repeatedly without waitingEach tap results in a single send, no duplicate messagesRapidly tap send 5 times on same text → exactly 5 identical messages sent
40Power user uses keyboard shortcuts (Ctrl+Enter to send)Shortcut works, focus stays in input after sendType “hi”, press Ctrl+Enter → message sent, cursor remains in input box
41Elderly user increases system font sizeUI scales, touch targets remain ≥48 dp, no clippingSet Android font scale to 1.3×, verify input box height expands, buttons not overlapped
42Accessibility user enables high contrast modeAll icons and text meet WCAG AA contrast ≥4.5:1Activate Android high contrast mode, run axe on chat screen → no contrast failures
43User with motor impairment uses switch controlAll interactive elements are reachable via sequential scanningConnect a switch device, navigate to send button using switch → button highlights and can be activated
44User pastes content from clipboard containing rich textOnly plain text is sent, formatting stripped, no hidden scriptsCopy formatted RTF from Word, paste into chat → only plain text appears, no hidden tags
45User attempts to send a message with leading/trailing spacesSpaces trimmed before sending unless intentional (configurable)Send “ hello ” → server receives “hello” (trimmed) unless preserve‑whitespace flag on

Internationalization and Localization

#Test ItemPass CriterionExample
46UI strings appear in selected languageAll labels, placeholders, toasts translated correctlySwitch app language to Japanese, verify “Send” button shows 「送信」
47Right‑to‑left (RTL) language layout mirrors correctlyInput box, bubble alignment, icons follow RTL directionSet language to Arabic, verify message bubbles align right, timestamp left
48Date/time formats respect localeTimestamps shown in local format (e.g., dd/MM/yyyy vs MM/dd/yyyy)Locale set to fr‑FR, timestamp shows “12/09/2025 14:35”
49Message content in non‑Latin scripts displays correctlyNo missing glyphs, line wrapping worksSend a Hindi message “नमस्ते”, verify proper rendering and wrap at word boundaries
50Emoji skin‑tone modifiers workModifier applied, glyph shows correct toneSend “👍🏿”, verify dark skin tone thumb appears

Accessibility Testing (Chat Functionality Testing Checklist (2026))

Accessibility ensures the chat is usable by people with disabilities and satisfies WCAG 2.2 AA criteria.

Screen Reader Support

#Test ItemPass CriterionExample
51Incoming message announced with sender name and contentScreen reader reads “Alice: Hello, how are you?”Use TalkBack, receive a message, verify announcement includes sender and text
52Outgoing message announced after sendReader confirms “Message sent” or reads the sent textSend a message, hear “Message sent: Hey team”
53Input field labeled correctlyPlaceholder or aria-label conveys purpose (“Type a message”)Inspect DOM, verify
54Buttons have accessible namesSend, attach, mic icons each have descriptive labelsVoiceOver reads “Send button”, “Attach file button”, “Record voice note button”
55Live region for unread count updatesChanges to unread badge are announced without requiring focusReceive three new messages while chat minimized, hear “You have 3 new messages”
56Error messages announcedValidation or network errors are spoken immediatelyAttempt to send empty message, hear “Message cannot be empty”

Keyboard Navigation

#Test ItemPass CriterionExample
57Tab order follows logical flowFocus moves from sidebar → conversation list → message list → input → send buttonRepeatedly press Tab, observe focus highlights each region in expected sequence
58Enter key sends message when input focusedNo need to click send buttonFocus in textbox, press Enter → message sent
59Escape key closes open menus or dialogsPressing Esc dismisses emoji picker, attachment menu, etc.Open emoji panel, press Esc → panel closes, focus returns to input
60Arrow keys navigate message list (if supported)Up/down moves focus between message bubbles for quick reactionFocus on a message, press Up → previous message gains focus, allows reacting with shortcut
61Shortcut to open attachment dialog (e.g., Alt+A)Shortcut works consistently across platformsPress Alt+A, attachment chooser opens
62Focus trap in modal dialogsTab does not leave modal until closedOpen “Report user” modal, Tab cycles only within modal controls

Touch Target Size and Spacing

#Test ItemPass CriterionExample
63Minimum touch target 48 dp × 48 dpMeasure with layout inspector; all actionable elements meet sizeVerify send button is 56 dp × 56 dp
64Adequate spacing between adjacent targetsNo overlapping touch areas; at least 8 dp gapCheck distance between attach and mic icons
65Gesture boundaries respectedSwipe‑to‑delete or reply does not interfere with scrollingPerform a short horizontal swipe on a message, verify it triggers reply menu, not accidental scroll
66Long press delay configurableAllows users with tremor to adjustIn settings, set long press to 800 ms, verify long press now requires longer hold
67Double‑tap to zoom disabled in chat viewPrevents accidental zooming while readingDouble‑tap on a message bubble, verify no zoom occurs

Color and Contrast

#Test ItemPass CriterionExample
68Text contrast against bubble background ≥4.5:1Use contrast checker; all text meets AAMeasure bubble #ECEFF1 with black text #212121 → ratio 15.6:1
69Icon contrast ≥3:1 for UI componentsIcons visible on both light and dark themesVerify send icon white on dark bubble (#212121) ratio 7:1
70Focus indicator visible and ≥2 px wideKeyboard focus ring clearly outlines active elementTab to send button, see 2 px solid #fff outline
71Error states use additional cues beyond colorError text accompanied by icon or text changeInvalid input shows red border *and* exclamation icon
72Dark mode maintains contrastSame checks as #68‑#70 performed with dark theme paletteSwitch to dark theme, re‑run contrast tests, all pass

Assistive Technology Compatibility

#Test ItemPass CriterionExample
73Works with Android Switch AccessAll actions reachable via switch scanningConnect switch device, navigate to send, activate
74Works with iOS VoiceOver rotorRotor can select “Headers”, “Links”, “Messages” for quick navigationActivate rotor, choose “Messages”, swipe up/down to jump between message bubbles
75Compatible with screen magnifierUI elements do not clip or disappear at 200 % zoomZoom to 200 %, verify input box and buttons fully visible
76Supports user‑defined custom fontsText respects font scaling without breaking layoutSet system font to “Comic Sans MS”, verify no overlapping
77ARIA live regions for dynamic contentNew messages announced without losing placeInsert a message via API, screen reader reads it instantly

Security and Privacy Testing (Chat Functionality Testing Checklist (2026))

Security testing covers injection, authentication, data leakage, and privacy controls that are critical for any communication system.

Authentication and Session Management

#Test ItemPass CriterionExample
78Login over HTTPS onlyNetwork sniffing shows TLS 1.2+, no clear‑text credentialsUse mitmproxy, attempt login, verify request is TLS encrypted
79Session token stored securely (HttpOnly, SameSite)Cookie flags prevent JS access and CSRFInspect cookie: Set-Cookie: sessionid=abc123; HttpOnly; Secure; SameSite=Strict
80Token expiration and refreshAfter idle period (e.g., 30 min) token refreshes automatically, forcing re‑login after absolute timeout (e.g., 24 h)Leave app idle 35 min, perform action → receives 401, refresh token used to obtain new access token
81Logout clears all local dataOn logout, local database, caches, and credentials are removedTap logout, restart app, verify no previous messages appear without re‑login
82Concurrent sessions limited or notifiedSystem either allows only one active session or warns userLog in on device A, then B; device A receives notification “New login detected”
83Password change invalidates existing sessionsAfter password reset, all other sessions forced to re‑authenticateChange password via web, then try to send message from mobile app → receives 401, prompted to log in again
84Rate limiting on login attemptsAfter 5 failed attempts, account locked or CAPTCHA shownAttempt login with wrong password 6 times, see “Too many attempts – try again later” or CAPTCHA
85OAuth / third‑party login token scope limitedToken only requests needed scopes (e.g., chat:send, chat:read)Inspect token payload via jwt.io, verify absence of unnecessary scopes like account:delete

Data Protection and Encryption

#Test ItemPass CriterionExample
86End‑to‑end encryption (if claimed) verifiedMessage payload encrypted server‑side, only recipients can decryptUse two can decrypt; server logs show only ciphertext
87Message at rest encrypted (AES‑256)Database storage shows encrypted blobs, not plain textDump DB column, verify content looks like random bytes, not readable text
88Media files stored with random names and access tokensDirect URL guess does not expose fileAttempt to access https://cdn.example.com/uploads/12345.jpg → returns 403 unless signed token present
89No sensitive data in logs or crash reportsCrash dumps or logs exclude message content, PIITrigger a crash, retrieve logcat, verify no user‑generated text appears
90Forward secrecy (if applicable)Compromising long‑term keys does not reveal past session keysSimulate server key theft, attempt to decrypt old messages → fails
91Metadata minimizationServer stores only necessary metadata (timestamps, participant IDs), not IP addresses or device fingerprintsQuery server for message metadata, confirm absence of client_ip field
92GDPR‑compliant data exportUser can request download of all chat data, receives portable JSON/zipUse “Export Data” endpoint, receive file containing all messages, verify no extraneous logs

Input Validation and Injection Prevention

#Test ItemPass CriterionExample
93No SQL injection via message contentInjecting ' OR 1=1;-- does not affect database queriesSend message containing SQLi payload, verify message stored as plain text, no abnormal DB behavior
94No XSS via chat UIHTML/script tags are escaped or strippedSend , verify message appears as literal text, no script execution
95No command injection via file uploadFilename with ; rm -rf / does not execute on serverUpload a file named test;id.txt, verify server stores it as test;id.txt (no shell execution)
96File type verification beyond extensionActual MIME type checked, preventing spoofed .exe as .jpgUpload a renamed executable with .jpg extension, server rejects with “Invalid file type”
97URL preview sanitizationLink previews do not fetch arbitrary internal addresses (SSRF)Send http://169.254.169.254/latest/meta-data/, verify no internal metadata returned in preview
98Rate limiting on API endpointsExcessive requests to /sendMessage receive 429Loop 150 rapid sends, observe 429 responses after threshold
99CSRF protection on state‑changing endpointsLack of valid token results in 403Send POST to /sendMessage without CSRF token, receive 403 Forbidden
100Secure password reset flowReset token is single‑use, time‑limited, and not leakable in URLRequest password reset, token appears in POST body, not in query string; token expires after 1 h, second use fails

Performance and Load Testing (Chat Functionality Testing Checklist (2026))

Performance testing validates responsiveness, scalability, and resource usage under realistic and peak loads.

Latency and Throughput

#Test ItemPass CriterionExample
10195th‑percentile send‑to‑receive latency < 800 ms on 3GMeasure with synthetic users; majority of messages delivered within targetRun JMeter script with 50 virtual users on 3G profile, compute latency, verify p95 ≤ 800 ms
102Average message throughput ≥ 50 msg/s per user under loadSystem can sustain expected chat rateWith 100 users, each sending 1 msg every 2 s → 50 msg/s total, server CPU < 60 %
103Typing indicators delivered within 200 msVisual feedback feels instantaneousStart typing, observe remote typing bubble appears ≤200 ms later
104Read receipts propagated within 500 msRecipient sees “Seen” quickly after viewingOpen chat, wait for read receipt to appear, measure delay
105Message persistence write latency < 150 msDB write for each message completes quicklyInstrument DB write path, confirm average ≤150 ms
106Media upload/download bandwidth utilization ≤ 80 % of availableDoes not saturate link, leaving room for other trafficOn a 5 Mbps uplink, upload a 2 MB image, monitor sustained throughput ~3.5 Mbps
107Graceful degradation under overloadWhen server reaches CPU 95 %, it returns 503 with retry‑after, client shows toastUse LoadGenerator to push 200 msg/s, observe 503 responses, client displays “Server busy – try again in 10 s”
108Recovery after load spikeAfter load drops, latency returns to baseline within 10 sStop load generator, monitor latency, confirm returns to <800 ms p95 within window
109Battery impact measuredContinuous chatting for 30 min consumes ≤5 % battery on typical mid‑tier deviceUse Battery Historian, run chat script, verify drain
110Memory leak testNo unbounded growth in RAM over extended sessionRun chat for 4 h, take heap snapshots every 30 min, verify heap size stabilizes (<5 % growth)

Scalability and Stress

#Test ItemPass CriterionExample
111Support 10 k concurrent active connectionsServer maintains connections without droppingUse websocket stress test (e.g., wsperf), verify 10k connections stable for 10 min
112Handle message bursts of 5 k msgs/secBack‑pressure mechanisms prevent OOMSimulate burst via Kafka producer, monitor queue depth, ensure it stays bounded
113Database sharding effectiveQueries routed to correct shard, no cross‑shard joins causing latencyInsert messages for user ID range, verify they land on predicted shard, query latency unchanged
114Cache hit rate ≥ 80 % for recent messagesFrequently accessed messages served from cacheWarm cache with recent chat, then run read‑heavy load, measure cache hit ratio
115Failover replica promotion < 2 sOn primary failure, replica takes over with minimal disruptionKill primary DB pod, observe replica elected, clients reconnect, message loss = 0
116Network partitioning toleranceClients can continue to send locally queued messages when partitioned from serverDisconnect network interface, send 20 messages, reconnect, verify all 20 delivered in order
117Auto‑scaling policies effectiveUnder increasing load, new instances added within 30 s, latency stays in targetGradually increase VU count from 100 to 1000, watch ASG add instances, latency stays <800 ms p95
118Resource quotas enforced per tenantOne abusive tenant cannot starve othersRun high‑volume sender in tenant A, verify tenant B’s latency unaffected
119Cold start latency for serverless functions (if used) < 1 sFirst invocation after idle period responds quicklyInvoke a dormant webhook, measure time to first byte
120Log volume does not impede logging subsystemLogging rate stays below configured threshold, no dropped logsTrigger 100 msg/s, monitor log backpressure, verify zero drops

Release Readiness and Regression (Chat Functionality Testing Checklist (2026))

Release readiness ensures that the chat feature is production‑ready, with proper monitoring, documentation, and rollback plans.

Monitoring and Alerting

#Test ItemPass CriterionExample
121Key metrics exposed via Prometheuschat_message_latency_seconds, chat_messages_sent_total, chat_errors_totalScrape endpoint, verify metrics present and increment appropriately
122Distributed tracing enabledEach message flow generates a trace ID visible in Jaeger/TempoSend a message, query trace system, see span from client → API → DB → push
123Alert on error rate > 1 % per minuteFiring alert triggers paging or Slack notificationInject faults to raise error rate, confirm alert fires within 30 s
124SLA dashboard shows success rate ≥ 99.9 %Dashboard reflects monthly uptime targetReview Grafana panel, verify SLA compliance
125Log retention and indexing compliantLogs stored for required period, searchable via ELKQuery logs for last 30 days, retrieve relevant entries
126Health check endpoint returns 200 only when all dependencies healthyEndpoint checks DB, cache, message brokerHit /health, verify 200 when all up, 503 when DB stopped
127Canary release metrics compared to baselineCanary group shows no statistically significant degradationRun A/B test, compare latency distributions, verify overlap
128Rollback procedure documented and testedAbility to redeploy previous version within 5 minSimulate bad deploy, trigger rollback, verify service restored and chats unaffected
129Feature flag for new chat behaviors safelyFlag can toggle new emoji picker on/off without restartToggle flag via config service, verify UI changes instantly for new users, existing sessions unaffected
130Chat-specific synthetic transaction runs in CIPipeline includes a lightweight end‑to‑end test that sends and receives a messageIn GitHub Actions, run susatest run --scenario chat_smoke, assert success

Documentation and Knowledge Transfer

#Test ItemPass CriterionExample
131API contract versioned and publishedOpenAPI/Swagger file reflects current endpoints, version bump on breaking change

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