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 Item Pass Criterion Example
1 User can send a plain text message Message 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
2 Message persists after page reload or app restart Message is stored server‑side and re‑loaded correctly After sending, refresh the web page; the message remains visible
3 Message supports Unicode and emojis Characters render correctly without garbling or truncation Send “👍🌟✨” and confirm each emoji displays as the native glyph
4 Message length limit is enforced UI‑wise UI prevents entry beyond limit and shows inline error Attempt to type 5001 characters in a field limited to 5000; the 5001st character is blocked and a tooltip reads “Maximum 5000 characters”
5 Message can be edited (if supported) Edit replaces original text, edit indicator appears, history retains original Long‑press a sent bubble → Edit → change “Hi” to “Hey”; bubble updates, a small “edited” label appears
6 Message can be deleted (if supported) Message removed from all participants’ views, tombstone or “This message was deleted” placeholder shown Swipe left on a message → Delete → verify bubble disappears for all users in the conversation
Conversation Navigation
# Test Item Pass Criterion Example
7 User can open an existing conversation from the list Conversation screen loads with correct header, participant list, and message history Tap “Work Team” in the sidebar; verify the thread shows the last 50 messages and the group name
8 User can start a new one‑on‑one chat Search returns correct user, tapping creates a fresh conversation with no prior history Search for “alice@example.com”, select result, verify empty chat header shows only Alice’s name
9 User can create a group chat with multiple participants UI allows adding contacts, group name optional, creation succeeds and all invited users see the group Select three contacts, tap “Create Group”, name “Project X”, confirm each participant receives a system notification and sees the group in their list
10 User can leave a group chat (if supported) Upon leaving, the user no longer receives new messages and sees a left‑group notice In 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”
11 User can search within a conversation Search bar returns matching messages, highlights hits, and allows jumping to each Type “deadline” in chat search; results list shows two messages, tapping jumps to each with the term highlighted
Media and Attachments
# Test Item Pass Criterion Example
12 User can attach an image (JPEG/PNG) and send Image uploads, thumbnail appears in chat, recipient can view full‑size image Attach a 2 MB PNG; verify thumbnail shows, tapping opens full image in viewer
13 User can attach a video and send (size limit enforced) Video uploads, playable inline or via external player, error shown if exceeds limit Attach a 15 MB MP4 (limit 20 MB); verify send succeeds, playback works; attach a 25 MB file → toast “File too large”
14 User can send a file (PDF, DOCX) and recipient can download File transfers without corruption, download initiates with correct MIME type Send a 500 KB PDF; recipient taps download, file opens in PDF reader with same content
15 User can capture and send a photo directly from camera Camera launches, photo is attached, sent with correct orientation Tap camera icon, take picture, confirm image appears upright in chat
16 User can record and send a voice note Audio recorded, waveform displayed, recipient can play/pause Hold 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 Item Pass Criterion Example
17 Send message while offline Message queued locally, UI shows sending spinner, automatic retry on reconnection Disable Wi‑Fi, send “Test offline”; see clock icon, then re‑enable Wi‑Fi → message sent, spinner disappears
18 Receive message while offline Message stored server‑side, delivered and displayed when connection restored While device offline, another user sends “Hi”; after reconnection, message appears with correct timestamp
19 Long‑lasting network loss (>30 s) App shows a persistent banner “No connection – tap to retry”, does not crash Unplug Ethernet for 40 s, verify banner appears, app remains responsive to UI taps
20 Partial packet loss causing duplicate messages De‑duplication logic prevents duplicate display Simulate 10 % loss with tc; send five messages, verify each appears exactly once
21 Server returns 500 error on send UI shows error toast, message remains editable for resend Mock server to return 500; after send attempt, toast “Failed to send – tap to retry”, message box retains text
Invalid Input and Validation
# Test Item Pass Criterion Example
22 Empty message submission Send button disabled or shows inline warning “Message cannot be empty” Tap send with empty field → button stays grey, no network request
23 Message containing only whitespace Treated as empty, same behavior as #22 Send five spaces → blocked
24 Message with prohibited characters (e.g., null byte) Input sanitized or rejected with clear error Paste \x00 → field rejects or strips null, no crash
25 Attempt to send a file with unsupported extension UI shows “Unsupported file type” and blocks send Try to send a .exe file → toast “Only images, documents, and videos allowed”
26 Message exceeds server‑side length limit (e.g., 10 KB) Server returns 400, client shows error and does not lose draft Send a 12 KB string → response 413 Payload Too Large, UI shows “Message too long (max 10 KB)”
27 Malformed deep link URL shared in chat Link rendered as plain text, no automatic execution Paste javascript:alert(1) → appears as text, clicking does not run script
State Corruption and Recovery
# Test Item Pass Criterion Example
28 App crashes mid‑conversation, restart restores state On 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
29 Corrupt local database (simulated by file rename) App detects corruption, offers to reset chat cache without losing server data Rename SQLite file, launch app → dialog “Chat data corrupted – reset?”, after reset, messages re‑sync from server
30 Simultaneous login from two devices causes conflict Both clients show a notification “You are logged in elsewhere”, session can be terminated or kept Log in on phone, then tablet; tablet shows banner, tapping “Log out elsewhere” ends phone session
31 Server pushes a message with missing sender ID Client displays “Unknown sender” placeholder, does not crash Inject a message lacking sender_uuid; UI shows gray avatar and label “Unknown”
32 Rate‑limited send attempts (HTTP 429) Client shows “Too many requests – wait X seconds”, disables send temporarily Send 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 Item Pass Criterion Example
33 Scrolling to top of a conversation with >10 000 messages Virtualized list loads chunks smoothly, no jank, position retained after rotation Populate chat with 12 k messages via API, scroll to top, observe steady 60 fps, rotate device → list retains scroll offset
34 Jump to a specific date via date picker Correct message batch fetched, UI shows placeholder while loading Tap calendar icon, select 2024‑03‑15, verify messages from that day appear, loading spinner shown during fetch
35 New messages arriving while user scrolled up New messages do not auto‑scroll unless user is at bottom; indicator shows unread count Scroll to middle, receive three new messages → scroll position unchanged, badge shows “3 new”
36 Rapid insertion of many messages (e.g., bot flood) UI remains responsive, memory usage stays bounded, excess messages are virtualized Simulate bot sending 200 msgs/s for 10 s, verify UI does not freeze, memory <150 MB
37 Long press on a message brings up context menu Menu appears with relevant actions (copy, reply, react, delete, report) Long‑press on an image message → menu shows “Save Image”, “Copy Text”, “Reply”, “Report”
38 Message reaction limit (e.g., max 20 reactions) Adding beyond limit shows toast “Maximum reactions reached”, existing reactions unchanged Add 21 different emojis to same message → 21st attempt blocked with toast
User Personas and Input Variations
# Test Item Pass Criterion Example
39 Novice user taps send repeatedly without waiting Each tap results in a single send, no duplicate messages Rapidly tap send 5 times on same text → exactly 5 identical messages sent
40 Power user uses keyboard shortcuts (Ctrl+Enter to send) Shortcut works, focus stays in input after send Type “hi”, press Ctrl+Enter → message sent, cursor remains in input box
41 Elderly user increases system font size UI scales, touch targets remain ≥48 dp, no clipping Set Android font scale to 1.3×, verify input box height expands, buttons not overlapped
42 Accessibility user enables high contrast mode All icons and text meet WCAG AA contrast ≥4.5:1 Activate Android high contrast mode, run axe on chat screen → no contrast failures
43 User with motor impairment uses switch control All interactive elements are reachable via sequential scanning Connect a switch device, navigate to send button using switch → button highlights and can be activated
44 User pastes content from clipboard containing rich text Only plain text is sent, formatting stripped, no hidden scripts Copy formatted RTF from Word, paste into chat → only plain text appears, no hidden tags
45 User attempts to send a message with leading/trailing spaces Spaces trimmed before sending unless intentional (configurable) Send “ hello ” → server receives “hello” (trimmed) unless preserve‑whitespace flag on
Internationalization and Localization
# Test Item Pass Criterion Example
46 UI strings appear in selected language All labels, placeholders, toasts translated correctly Switch app language to Japanese, verify “Send” button shows 「送信」
47 Right‑to‑left (RTL) language layout mirrors correctly Input box, bubble alignment, icons follow RTL direction Set language to Arabic, verify message bubbles align right, timestamp left
48 Date/time formats respect locale Timestamps 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”
49 Message content in non‑Latin scripts displays correctly No missing glyphs, line wrapping works Send a Hindi message “नमस्ते”, verify proper rendering and wrap at word boundaries
50 Emoji skin‑tone modifiers work Modifier applied, glyph shows correct tone Send “👍🏿”, 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 Item Pass Criterion Example
51 Incoming message announced with sender name and content Screen reader reads “Alice: Hello, how are you?” Use TalkBack, receive a message, verify announcement includes sender and text
52 Outgoing message announced after send Reader confirms “Message sent” or reads the sent text Send a message, hear “Message sent: Hey team”
53 Input field labeled correctly Placeholder or aria-label conveys purpose (“Type a message”) Inspect DOM, verify
54 Buttons have accessible names Send, attach, mic icons each have descriptive labels VoiceOver reads “Send button”, “Attach file button”, “Record voice note button”
55 Live region for unread count updates Changes to unread badge are announced without requiring focus Receive three new messages while chat minimized, hear “You have 3 new messages”
56 Error messages announced Validation or network errors are spoken immediately Attempt to send empty message, hear “Message cannot be empty”
Keyboard Navigation
# Test Item Pass Criterion Example
57 Tab order follows logical flow Focus moves from sidebar → conversation list → message list → input → send button Repeatedly press Tab, observe focus highlights each region in expected sequence
58 Enter key sends message when input focused No need to click send button Focus in textbox, press Enter → message sent
59 Escape key closes open menus or dialogs Pressing Esc dismisses emoji picker, attachment menu, etc. Open emoji panel, press Esc → panel closes, focus returns to input
60 Arrow keys navigate message list (if supported) Up/down moves focus between message bubbles for quick reaction Focus on a message, press Up → previous message gains focus, allows reacting with shortcut
61 Shortcut to open attachment dialog (e.g., Alt+A) Shortcut works consistently across platforms Press Alt+A, attachment chooser opens
62 Focus trap in modal dialogs Tab does not leave modal until closed Open “Report user” modal, Tab cycles only within modal controls
Touch Target Size and Spacing
# Test Item Pass Criterion Example
63 Minimum touch target 48 dp × 48 dp Measure with layout inspector; all actionable elements meet size Verify send button is 56 dp × 56 dp
64 Adequate spacing between adjacent targets No overlapping touch areas; at least 8 dp gap Check distance between attach and mic icons
65 Gesture boundaries respected Swipe‑to‑delete or reply does not interfere with scrolling Perform a short horizontal swipe on a message, verify it triggers reply menu, not accidental scroll
66 Long press delay configurable Allows users with tremor to adjust In settings, set long press to 800 ms, verify long press now requires longer hold
67 Double‑tap to zoom disabled in chat view Prevents accidental zooming while reading Double‑tap on a message bubble, verify no zoom occurs
Color and Contrast
# Test Item Pass Criterion Example
68 Text contrast against bubble background ≥4.5:1 Use contrast checker; all text meets AA Measure bubble #ECEFF1 with black text #212121 → ratio 15.6:1
69 Icon contrast ≥3:1 for UI components Icons visible on both light and dark themes Verify send icon white on dark bubble (#212121) ratio 7:1
70 Focus indicator visible and ≥2 px wide Keyboard focus ring clearly outlines active element Tab to send button, see 2 px solid #fff outline
71 Error states use additional cues beyond color Error text accompanied by icon or text change Invalid input shows red border *and* exclamation icon
72 Dark mode maintains contrast Same checks as #68‑#70 performed with dark theme palette Switch to dark theme, re‑run contrast tests, all pass
Assistive Technology Compatibility
# Test Item Pass Criterion Example
73 Works with Android Switch Access All actions reachable via switch scanning Connect switch device, navigate to send, activate
74 Works with iOS VoiceOver rotor Rotor can select “Headers”, “Links”, “Messages” for quick navigation Activate rotor, choose “Messages”, swipe up/down to jump between message bubbles
75 Compatible with screen magnifier UI elements do not clip or disappear at 200 % zoom Zoom to 200 %, verify input box and buttons fully visible
76 Supports user‑defined custom fonts Text respects font scaling without breaking layout Set system font to “Comic Sans MS”, verify no overlapping
77 ARIA live regions for dynamic content New messages announced without losing place Insert 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 Item Pass Criterion Example
78 Login over HTTPS only Network sniffing shows TLS 1.2+, no clear‑text credentials Use mitmproxy, attempt login, verify request is TLS encrypted
79 Session token stored securely (HttpOnly, SameSite) Cookie flags prevent JS access and CSRF Inspect cookie: Set-Cookie: sessionid=abc123; HttpOnly; Secure; SameSite=Strict
80 Token expiration and refresh After 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
81 Logout clears all local data On logout, local database, caches, and credentials are removed Tap logout, restart app, verify no previous messages appear without re‑login
82 Concurrent sessions limited or notified System either allows only one active session or warns user Log in on device A, then B; device A receives notification “New login detected”
83 Password change invalidates existing sessions After password reset, all other sessions forced to re‑authenticate Change password via web, then try to send message from mobile app → receives 401, prompted to log in again
84 Rate limiting on login attempts After 5 failed attempts, account locked or CAPTCHA shown Attempt login with wrong password 6 times, see “Too many attempts – try again later” or CAPTCHA
85 OAuth / third‑party login token scope limited Token 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 Item Pass Criterion Example
86 End‑to‑end encryption (if claimed) verified Message payload encrypted server‑side, only recipients can decrypt Use two can decrypt; server logs show only ciphertext
87 Message at rest encrypted (AES‑256) Database storage shows encrypted blobs, not plain text Dump DB column, verify content looks like random bytes, not readable text
88 Media files stored with random names and access tokens Direct URL guess does not expose file Attempt to access https://cdn.example.com/uploads/12345.jpg → returns 403 unless signed token present
89 No sensitive data in logs or crash reports Crash dumps or logs exclude message content, PII Trigger a crash, retrieve logcat, verify no user‑generated text appears
90 Forward secrecy (if applicable) Compromising long‑term keys does not reveal past session keys Simulate server key theft, attempt to decrypt old messages → fails
91 Metadata minimization Server stores only necessary metadata (timestamps, participant IDs), not IP addresses or device fingerprints Query server for message metadata, confirm absence of client_ip field
92 GDPR‑compliant data export User can request download of all chat data, receives portable JSON/zip Use “Export Data” endpoint, receive file containing all messages, verify no extraneous logs
Input Validation and Injection Prevention
# Test Item Pass Criterion Example
93 No SQL injection via message content Injecting ' OR 1=1;-- does not affect database queries Send message containing SQLi payload, verify message stored as plain text, no abnormal DB behavior
94 No XSS via chat UI HTML/script tags are escaped or stripped Send , verify message appears as literal text, no script execution
95 No command injection via file upload Filename with ; rm -rf / does not execute on server Upload a file named test;id.txt, verify server stores it as test;id.txt (no shell execution)
96 File type verification beyond extension Actual MIME type checked, preventing spoofed .exe as .jpg Upload a renamed executable with .jpg extension, server rejects with “Invalid file type”
97 URL preview sanitization Link previews do not fetch arbitrary internal addresses (SSRF) Send http://169.254.169.254/latest/meta-data/, verify no internal metadata returned in preview
98 Rate limiting on API endpoints Excessive requests to /sendMessage receive 429 Loop 150 rapid sends, observe 429 responses after threshold
99 CSRF protection on state‑changing endpoints Lack of valid token results in 403 Send POST to /sendMessage without CSRF token, receive 403 Forbidden
100 Secure password reset flow Reset token is single‑use, time‑limited, and not leakable in URL Request 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 Item Pass Criterion Example
101 95th‑percentile send‑to‑receive latency < 800 ms on 3G Measure with synthetic users; majority of messages delivered within target Run JMeter script with 50 virtual users on 3G profile, compute latency, verify p95 ≤ 800 ms
102 Average message throughput ≥ 50 msg/s per user under load System can sustain expected chat rate With 100 users, each sending 1 msg every 2 s → 50 msg/s total, server CPU < 60 %
103 Typing indicators delivered within 200 ms Visual feedback feels instantaneous Start typing, observe remote typing bubble appears ≤200 ms later
104 Read receipts propagated within 500 ms Recipient sees “Seen” quickly after viewing Open chat, wait for read receipt to appear, measure delay
105 Message persistence write latency < 150 ms DB write for each message completes quickly Instrument DB write path, confirm average ≤150 ms
106 Media upload/download bandwidth utilization ≤ 80 % of available Does not saturate link, leaving room for other traffic On a 5 Mbps uplink, upload a 2 MB image, monitor sustained throughput ~3.5 Mbps
107 Graceful degradation under overload When server reaches CPU 95 %, it returns 503 with retry‑after, client shows toast Use LoadGenerator to push 200 msg/s, observe 503 responses, client displays “Server busy – try again in 10 s”
108 Recovery after load spike After load drops, latency returns to baseline within 10 s Stop load generator, monitor latency, confirm returns to <800 ms p95 within window
109 Battery impact measured Continuous chatting for 30 min consumes ≤5 % battery on typical mid‑tier device Use Battery Historian, run chat script, verify drain
110 Memory leak test No unbounded growth in RAM over extended session Run chat for 4 h, take heap snapshots every 30 min, verify heap size stabilizes (<5 % growth)
Scalability and Stress
# Test Item Pass Criterion Example
111 Support 10 k concurrent active connections Server maintains connections without dropping Use websocket stress test (e.g., wsperf), verify 10k connections stable for 10 min
112 Handle message bursts of 5 k msgs/sec Back‑pressure mechanisms prevent OOM Simulate burst via Kafka producer, monitor queue depth, ensure it stays bounded
113 Database sharding effective Queries routed to correct shard, no cross‑shard joins causing latency Insert messages for user ID range, verify they land on predicted shard, query latency unchanged
114 Cache hit rate ≥ 80 % for recent messages Frequently accessed messages served from cache Warm cache with recent chat, then run read‑heavy load, measure cache hit ratio
115 Failover replica promotion < 2 s On primary failure, replica takes over with minimal disruption Kill primary DB pod, observe replica elected, clients reconnect, message loss = 0
116 Network partitioning tolerance Clients can continue to send locally queued messages when partitioned from server Disconnect network interface, send 20 messages, reconnect, verify all 20 delivered in order
117 Auto‑scaling policies effective Under increasing load, new instances added within 30 s, latency stays in target Gradually increase VU count from 100 to 1000, watch ASG add instances, latency stays <800 ms p95
118 Resource quotas enforced per tenant One abusive tenant cannot starve others Run high‑volume sender in tenant A, verify tenant B’s latency unaffected
119 Cold start latency for serverless functions (if used) < 1 s First invocation after idle period responds quickly Invoke a dormant webhook, measure time to first byte
120 Log volume does not impede logging subsystem Logging rate stays below configured threshold, no dropped logs Trigger 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 Item Pass Criterion Example
121 Key metrics exposed via Prometheus chat_message_latency_seconds, chat_messages_sent_total, chat_errors_totalScrape endpoint, verify metrics present and increment appropriately
122 Distributed tracing enabled Each message flow generates a trace ID visible in Jaeger/Tempo Send a message, query trace system, see span from client → API → DB → push
123 Alert on error rate > 1 % per minute Firing alert triggers paging or Slack notification Inject faults to raise error rate, confirm alert fires within 30 s
124 SLA dashboard shows success rate ≥ 99.9 % Dashboard reflects monthly uptime target Review Grafana panel, verify SLA compliance
125 Log retention and indexing compliant Logs stored for required period, searchable via ELK Query logs for last 30 days, retrieve relevant entries
126 Health check endpoint returns 200 only when all dependencies healthy Endpoint checks DB, cache, message broker Hit /health, verify 200 when all up, 503 when DB stopped
127 Canary release metrics compared to baseline Canary group shows no statistically significant degradation Run A/B test, compare latency distributions, verify overlap
128 Rollback procedure documented and tested Ability to redeploy previous version within 5 min Simulate bad deploy, trigger rollback, verify service restored and chats unaffected
129 Feature flag for new chat behaviors safely Flag can toggle new emoji picker on/off without restart Toggle flag via config service, verify UI changes instantly for new users, existing sessions unaffected
130 Chat-specific synthetic transaction runs in CI Pipeline includes a lightweight end‑to‑end test that sends and receives a message In GitHub Actions, run susatest run --scenario chat_smoke, assert success
Documentation and Knowledge Transfer
# Test Item Pass Criterion Example
131 API contract versioned and published OpenAPI/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