Contact List Testing Checklist (2026)
The Contact List Testing Checklist (2026) begins with verifying that the core workflow of creating, viewing, editing, and deleting contacts works as expected under normal conditions. A happy‑path test
Contact List Testing Checklist (2026): Happy Path Tests
The Contact List Testing Checklist (2026) begins with verifying that the core workflow of creating, viewing, editing, and deleting contacts works as expected under normal conditions. A happy‑path test ensures that the feature delivers value to the majority of users without encountering obstacles.
1.1 Create a new contact
- Action: Tap the “Add Contact” button, fill in all mandatory fields (first name, last name, phone number), and press “Save”.
- Pass criteria: The contact appears at the top of the list, the UI shows a brief toast confirming “Contact saved”, and the underlying database stores a record with the exact values entered.
- Example: Enter “Ada”, “Lovelace”, “+1‑555‑0123”. After saving, the list shows “Ada Lovelace” and the phone number is clickable to initiate a call.
1.2 View contact details
- Action: Tap a contact entry to open the detail view.
- Pass criteria: All fields entered during creation are displayed exactly, the profile picture placeholder (if any) is shown, and actions such as “Edit”, “Share”, and “Delete” are enabled.
1.3 Edit an existing contact
- Action: From the detail view, select “Edit”, modify at least one field (e.g., add a secondary phone number), and save.
- Pass criteria: The list updates instantly to reflect the change, the detail view shows the edited value, and no duplicate entry is created.
1.4 Delete a contact
- Action: Long‑press a contact or use the swipe‑to‑delete gesture, confirm the deletion prompt.
- Pass criteria: The contact disappears from the list, the undo snackbar (if offered) appears for a short period, and a subsequent query to the database returns zero rows for that contact ID.
1.5 Search and filter
- Action: Type a substring in the search bar (e.g., “lov”) and verify that only matching contacts appear. Apply any available filters (e.g., “Favorites only”).
- Pass criteria: Results update in real time, show zero results when no match exists, and clearing the search restores the full list.
1.6 Favorite / star toggle
- Action: Tap the star icon on a contact row.
- Pass criteria: The icon toggles between filled and outline states, the contact moves to/from the “Favorites” section (if separate), and the preference persists after app restart.
1.7 Bulk operations
- Action: Enable multi‑select, choose three contacts, and invoke “Delete selected”.
- Pass criteria: All selected contacts are removed, the UI reflects the new count, and a confirmation dialog appears before execution.
---
Contact List Testing Checklist (2026): Error Handling and Validation
Beyond the happy path, a robust contact list must gracefully manage invalid input, system failures, and unexpected user behavior.
2.1 Mandatory field validation
- Action: Leave the first‑name field blank, fill last name and phone, attempt to save.
- Pass criteria: The save button remains disabled or shows an inline error (“First name is required”), no contact is created, and the field highlights in error state.
2.2 Duplicate detection
- Action: Create a contact with exact same name and phone as an existing entry, then try to save.
- Pass criteria: The app either blocks the save with a toast (“Contact already exists”) or merges the entry based on configured policy, never creating a true duplicate.
2.3 Invalid phone number formats
- Action: Enter letters, symbols, or an excessively short/long number (e.g., “abc”, “12”, “+1‑555‑01234567890”).
- Pass criteria: Inline validation prevents saving, shows a format‑specific message (“Please enter a valid phone number”), and the field remains focused for correction.
2.4 Special characters and Unicode
- Action: Use emojis, accented characters, or right‑to‑left scripts in name fields (e.g., “José”, “😀”, “سالم”).
- Pass criteria: The contact saves correctly, displays properly in the list and detail view, and search/filter functions handle the characters without crashing.
2.5 Network loss during save
- Action: Disable Wi‑Fi/cellular after tapping “Save” but before the server acknowledges (if the app uses a backend).
- Pass criteria: The app shows a pending indicator, retries automatically, and upon reconnection either syncs successfully or notifies the user of failure with an option to retry later.
2.6 Storage permission denial
- Action: Deny the app permission to write to contacts storage (on Android) or to access the address book (on iOS).
- Pass criteria: The “Add Contact” flow is blocked with a clear permission rationale dialog, and no crash occurs when the user attempts to add a contact.
2.7 Long‑press accidental trigger
- Action: Perform a long‑press on a contact row without intending to delete.
- Pass criteria: Either a contextual menu appears (edit, share) with a clear cancel option, or the gesture is ignored unless a confirmation step follows.
2.8 Graceful degradation when database is corrupted
- Action: Simulate a corrupted SQLite file by manually editing the app’s data directory.
- Pass criteria: On launch the app detects the inconsistency, shows an informative error (“Unable to load contacts. Please try again later”), and offers a “Reset data” option that clears the corrupt state without crashing the process.
---
Contact List Testing Checklist (2026): Edge and Boundary Cases
Edge cases expose limits that are rarely hit in everyday in rare circumstances cause data loss or UI glitches.
3.1 Maximum contact count
- Action: Programmatically add contacts until the device’s contacts provider reports a limit (often 65 535 entries on Android).
- Pass criteria: The app continues to allow additions until the system limit, then shows a system‑provided toast (“Contacts storage full”) and prevents further adds without crashing.
3.2 Very long name fields
- Action: Fill first and last name with 500‑character strings (or the platform’s maximum).
- Pass criteria: The UI truncates or scrolls the text appropriately, the detail view shows the full content in a scrollable area, and saving succeeds.
3.3 Phone number with extensions and pauses
- Action: Enter numbers containing “p” (pause) or “w” (wait) characters, e.g., “+1‑555‑0123p123”.
- Pass criteria: The number is stored exactly as entered, the dial‑action respects pauses/waits when initiating a call, and the UI does not strip the characters.
3.4 Contact without a phone number (email‑only)
- Action: Save a contact with only an email address (no phone).
- Pass criteria: The contact appears in the list, the phone‑call action is hidden or disabled, and tapping the email launches the default mail client.
3.5 Mixed‑type fields (photo, notes, birthday)
- Action: Attach a high‑resolution photo (>5 MB), add a multi‑line note, and set a birthday far in the past/future.
- Pass criteria: The photo is displayed with appropriate scaling, notes preserve line breaks, the birthday is shown in the locale’s date format, and no memory spikes cause OOM kills.
3.6 Rapid successive actions
- Action: Tap “Add Contact” ten times in quick succession without waiting for UI feedback.
- Pass criteria: Either the app debounces the button (ignoring extra taps) or creates exactly ten distinct contacts, each with unique placeholder data, and the list remains responsive.
3.7 Orientation change mid‑flow
- Action: Start adding a contact, rotate the device to landscape, then back to portrait before saving.
- Pass criteria: All entered values persist, the layout adapts without overlapping controls, and the save operation works as in portrait.
3.8 Accessibility‑focus order disruption
- Action: Navigate using TalkBack/VoiceOver, deliberately move focus away from a field before completing input, then return.
- Pass criteria: Focus returns to the correct element, previously entered text is retained, and no loss of context occurs.
---
Contact List Testing Checklist (2026): Accessibility (WCAG) Checks
Ensuring the contact list is usable by people with disabilities is not optional; it expands reach and satisfies legal requirements.
4.1 Touch target size
- Check: Measure the tappable area of each list item, action button, and icon.
- Pass: Minimum 48 dp × 48 dp (Android) or 44 pt × 44 pt (iOS) with adequate spacing (≥8 dp) between adjacent targets.
4.2 Color contrast
- Check: Verify foreground‑to‑background contrast for text, icons, and focus indicators.
- Pass: At least 4.5:1 for normal text, 3:1 for large text (≥18 pt or 14 pt bold), and 3:1 for UI components.
4.3 Screen‑reader labels
- Check: Run TalkBack/VoiceOver and listen to announcements for each element.
- Pass: Every button, checkbox, and image has a concise, meaningful label (e.g., “Delete contact, Ada Lovelace”). Images without decorative purpose have appropriate
contentDescriptionoraccessibilityLabel.
4.4 Dynamic type / font scaling
- Check: Increase system font size to 200 % and verify layout.
- Pass: No text is clipped, containers expand or scroll as needed, and touch targets remain usable.
4.5 Reduced motion
- Check: Enable “Reduce motion” in system settings.
- Pass: Animations (list item swipe, toast fade) are either disabled or replaced with instant transitions, preventing vestibular discomfort.
4.6 Closed captions for media
- Check: If contact cards include video previews, ensure captions are available.
- Pass: Captions are synchronized, readable, and toggleable via system controls.
4.7 Accessibility shortcuts
- Check: Confirm that long‑press on a contact invokes the accessibility menu (if supported) and that double‑tap‑to‑activate works for all actions.
- Pass: No gesture conflicts, and the shortcut does not interfere with standard interaction patterns.
4.8 Language and locale
- Check: Switch device language to a right‑to‑left locale (e.g., Arabic) and verify layout mirroring.
- Pass: All text flows correctly, icons that denote direction (e.g., forward/back) are mirrored, and no hard‑coded left‑aligned elements break the UI.
---
Contact List Testing Checklist (2026): Security and Privacy Considerations
A contact list often stores personal data that must be protected from unauthorized access and leakage.
5.1 Data at rest encryption
- Check: On rooted/jailbroken devices, attempt to read the app’s private data directory.
- Pass: The contacts database file is encrypted (AES‑256‑GCM or platform‑provided credential storage) and unreadable without the app’s key.
5.2 Transmission security
- Check: Use a proxy (e.g., mitmproxy) to inspect network traffic when syncing contacts to a backend.
- Pass: All requests use HTTPS with valid certificates; no plain‑text HTTP fallback is permitted.
5.3 Permission granularity
- Check: Request only the permissions needed for the current operation (e.g., read contacts for picker, write contacts for adding).
- Pass: The app uses runtime permissions correctly, explains why each is needed, and does not retain permission after the operation ends.
5.4 Contact sharing safeguards
- Check: Attempt to share a contact via Bluetooth, NFC, or third‑party apps.
- Pass: The shared vCard includes only the fields the user has explicitly chosen to export; no hidden metadata (like internal IDs) is leaked.
5.5 Biometric lock for sensitive actions
- Check: Enable a setting that requires fingerprint or Face ID before deleting a contact.
- Pass: The action is blocked until biometric authentication succeeds; failed attempts are logged and limited to prevent brute force.
5.6 Audit logging
- Check: Verify that the app writes an immutable log (or uses platform audit) for create, update, delete, and export operations.
- Pass: Each log entry contains timestamp, user ID (if applicable), operation type, and a hash of the affected record; logs are tamper‑evident.
5.7 Data minimization
- Check: Review the data model for unnecessary fields (e.g., storing raw device IMEI alongside contacts).
- Pass: Only fields required for the contact‑list feature are persisted; any ancillary data is discarded after use.
5.8 Secure deletion
- Check: After deleting a contact, attempt to recover it via a file‑system recovery tool.
- Pass: The storage blocks previously occupied by the contact record are overwritten or trimmed, making recovery infeasible.
---
Contact List Testing Checklist (2026): Performance and Scalability
Even a simple contact list must remain responsive under load, low‑memory conditions, and on a variety of hardware.
6.1 Launch time with empty list
- Check: Measure cold start time from app icon tap to first rendered list.
- Pass: ≤ 1 second on mid‑tier devices (e.g., Snapdragon 7‑gen 2) and ≤ 1.5 seconds on low‑end devices.
6.2 Scrolling performance with 5 000 contacts
- Check: Populate the list with 5 000 synthetic contacts, then fling quickly.
- Pass: Maintain ≥ 60 fps (or platform’s refresh rate) with no jank; use RecyclerView / FlatList with view‑recycling and asynchronous data binding.
6.3 Memory usage during bulk import
- Check: Import a VCF file with 10 000 contacts while monitoring RSS.
- Pass: Peak memory increase ≤ 150 MB; no leaks observed after import completes (checked via Android Studio Profiler or Instruments).
6.4 Battery impact of background sync
- Check: Enable automatic sync every 15 minutes, run a standard battery‑drain script (e.g., Battery Historian) for one hour.
- Pass: Additional drain ≤ 2 % compared to baseline with sync disabled.
6.5 Network‑offline resilience
- Check: Disable connectivity, perform add/edit/delete operations, then reconnect.
- Pass: All operations are queued locally, replayed in order, and conflicts are resolved with a “last write wins” or merge strategy without data loss.
6.6 Frame‑time consistency during search
- Check: Type a query that matches 2 000 contacts, measure UI thread frame times.
- Pass: 95 % of frames ≤ 16 ms (60 fps) ; occasional spikes allowed only during I/O, not UI rendering.
6.7 Startup after system‑provided low‑memory kill
- Check: Simulate a low‑memory condition (adb shell am kill) while the app is in the background, then relaunch.
- Pass: The app restores the exact scroll position and any unsaved edits are either persisted or discarded with a clear warning.
6.8 Battery‑optimization mode compatibility
- Check: Place the app in the system’s “Battery saver” list, verify that background alarms and jobs still fire as intended.
- Pass: Critical sync jobs are exempted via
setExpedited(true)(Android) orBGTaskSchedulerwith appropriate QoS, ensuring data stays up‑to‑date.
---
Contact List Testing Checklist (2026): Release Readiness and Regression
Before shipping, the team must verify that the feature integrates cleanly with the rest of the product, that documentation matches behavior, and that automated guards are in place.
7.1 Version‑control changelog compliance
- Check: Every PR touching the contact list includes a concise entry in
CHANGELOG.mdunder the “Added”, “Changed”, or “Fixed” sections. - Pass: The changelog entry accurately reflects user‑visible modifications; no “internal refactor” entries appear without a user impact note.
7.2 Automated UI test coverage
- Check: Run the existing test suite (Appium + Playwright) on a clean device/emulator.
- Pass: ≥ 90 % of the checklist items have at least one automated test; flaky tests are marked and investigated.
7.3 Regression baseline with SUSA
- Check: Execute a full autonomous exploration pass using the SUSATest agent on the latest build.
- Pass: The agent reports no new crashes, ANRs, or WCAG violations compared to the baseline run on the previous release; any new findings are triaged as either expected (feature change) or defects.
7.4 Documentation sync
- Check: Verify that the in‑app help center and online KB reflect the current UI labels and flow steps.
- Pass: All screenshots match the actual UI (allowing for theme differences), and any deprecated steps are removed or flagged.
7.5 Feature flag rollout verification
- Check: If the contact list is behind a flag, test both ON and OFF states on a clean install.
- Pass: OFF state hides the entry point completely; ON state shows the full feature with all checklist items passing.
7.6 Crash‑free user sessions (CFUS) target
- Check: Collect crash‑free session data from Firebase Crashlytics for a beta cohort of 1 000 active users over 48 hours.
- Pass: CFUS ≥ 99.9 % (i.e., ≤ 1 crash per 1 000 sessions).
7.7 Performance budget adherence
- Check: Compare key metrics (launch time, scroll jank, memory) against the defined performance budget.
- Pass: No metric exceeds its threshold; any regression triggers a performance‑budget ticket before release.
7.8 Release‑note test‑case mapping
- Check: For each item in the release notes, locate a corresponding test case in the test management system (e.g., TestRail).
- Pass: 100 % mapping coverage; untested notes are either removed or flagged for QA.
---
Applying Autonomous Exploration with SUSA to Cover the Checklist
Modern QA teams increasingly rely on tools that can exercise an application without hand‑written scripts, surfacing many of the checklist items in a single pass.
8.1 How SUSA explores a contact list
When you point SUSA at an Android APK (or a web URL that loads a contacts‑style SPA), the agent builds a behavior model from a set of personas: curious, impatient, novice, power‑user, and accessibility‑focused. Each persona drives interactions that map directly to checklist categories:
| Persona | Typical actions | Checklist areas exercised |
|---|---|---|
| Curious | Long‑press every UI element, open overflow menus, try every icon | Error handling, edge cases, accessibility |
| Impatient | Rapid taps, swipe‑away attempts, back‑button spamming | Performance, race conditions, stability |
| Novice | Follows on‑boarding hints, uses only primary buttons | Happy path, onboarding clarity |
| Power‑user | Uses shortcuts, bulk select, drag‑to‑reorder | Bulk ops, performance, edge cases |
| Accessibility‑focused | Relies on TalkBack/VoiceOver, changes font size, enables high contrast | WCAG checks, dynamic type, reduced motion |
During exploration, SUSA records every screen transition, logs network calls, and captures UI hierarchy snapshots. The agent then evaluates each observed state against a rule set that mirrors the checklist:
- Crash/ANR detection → error handling & stability.
- Duplicate contact detection → validation logic.
- Contrast and touch‑target measurement → accessibility.
- Response‑time metrics → performance.
- Permission usage tracing → security/privacy.
8.2 Example of a SUSA‑generated finding
Suppose the agent, acting as the “impatient” persona, taps the “Add Contact” button five times within 200 ms. The app, lacking debounce logic, creates five identical draft contacts. Susa flags this as a potential duplicate‑creation issue under the *Error handling* section, providing:
- Steps to reproduce (timestamped event log).
- Screenshot of the duplicate entries in the list.
- Logcat excerpt showing the repeated
INSERT INTO contactsstatements. - Suggested fix: enable
setEnabled(false)on the button while the save operation is in progress, or use a debounce wrapper.
8.3 Generating regression scripts from exploration
After a run, SUSA can export the discovered flows as Appium (Android) or Playwright (Web) test scripts. For the contact‑list flow “add → edit → delete”, the generated Appium Java snippet looks like:
@Test
public void testAddEditDeleteContact() {
// Arrange
driver.findElement(By.id("fab_add_contact")).click();
driver.findElement(By.id("input_first_name")).sendKeys("Ada");
driver.findElement(By.id("input_last_name")).sendKeys("Lovelace");
driver.findElement(By.id("input_phone")).sendKeys("+1-555-0123");
driver.findElement(By.id("btn_save")).click();
// Act – verify happy path
Assert.assertTrue(driver.findElement(By.xpath("//android.widget.TextView[@text='Ada Lovelace']")).isDisplayed());
// Edit
driver.findElement(By.xpath("//android.widget.TextView[@text='Ada Lovelace']")).click();
driver.findElement(By.id("menu_edit")).click();
driver.findElement(By.id("input_phone")).clear();
driver.findElement(By.id("input_phone")).sendKeys("+1-555-0123-456");
driver.findElement(By.id("btn_save")).click();
// Assert – edited number appears
Assert.assertTrue(driver.findElement(By.xpath("//android.widget.TextView[contains(@text,'+1-555-0123-456')]")).isDisplayed());
// Delete – swipe
MobileElement contactRow = (MobileElement) driver.findElement(By.xpath("//android.widget.TextView[@text='Ada Lovelace']/.."));
new TouchAction(driver)
.press(PointOption.point(contactRow.getCenter().getX(), contactRow.getCenter().getY()))
.waitAction(WaitOptions.waitOptions(Duration.ofMillis(500)))
.moveTo(PointOption.point(contactRow.getCenter().getX() - 500, contactRow.getCenter().getY()))
.release()
.perform();
driver.findElement(By.id("btn_confirm_delete")).click();
// Assert – contact removed
Assert.assertFalse(driver.findElements(By.xpath("//android.widget.TextView[@text='Ada Lovelace']")).isEmpty());
}
The same flow can be exported to Playwright TypeScript for a web version:
test('add edit delete contact', async ({ page }) => {
await page.click('#fab-add-contact');
await page.fill('#input-first-name', 'Ada');
await page.fill('#input-last-name', 'Lovelace');
await page.fill('#input-phone', '+1-555-0123');
await page.click('#btn-save');
await expect(page.locator('text=Ada Lovelace')).toBeVisible();
await page.click('text=Ada Lovelace');
await page.click('#menu-edit');
await page.fill('#input-phone', '+1-555-0123-456');
await page.click('#btn-save');
await expect(page.locator('text=+1-555-0123-456')).toBeVisible();
await page.locator('text=Ada Lovelace').hover();
await page.locator('text=Ada Lovelace').dispatchEvent('dblclick');
await page.click('#btn-delete');
await page.click('#btn-confirm-delete');
await expect(page.locator('text=Ada Lovelace')).not.toBeVisible();
});
These scripts become part of the CI pipeline, ensuring that any regression in happy‑path, error handling, or accessibility is caught before release.
8.4 Coverage metrics from a SUSA run
A typical 15‑minute autonomous session on a mid‑tier Android device yields the following approximate coverage of the checklist:
| Checklist category | % of items observed by SUSA | Comments |
|---|---|---|
| Happy path | 92 % | Most core flows exercised; a few deep‑nesting settings missed. |
| Error handling | 78 % | Validation and duplicate detection captured; rare permission‑denial paths need manual triggers. |
| Edge / boundary | 65 % | Large‑count and Unicode scenarios appear; extreme stress (e.g., 100 k contacts) requires dedicated scripts. |
| Accessibility | 81 % | Contrast, touch target, and screen‑reader labels auto‑checked; custom gestures need persona tweaks. |
| Security/privacy | 70 % | Network encryption and permission usage logged; data‑at‑rest encryption verified via file‑system checks. |
| Performance | 74 % | Launch time, scroll jank, and memory sampled; battery impact needs longer profiling. |
| Release readiness | 50 % | Changelog and documentation sync are manual; test‑case mapping can be derived from exported scripts. |
The numbers illustrate that autonomous exploration handles the majority of functional and non‑functional checks, leaving a focused set of manual or scripted tasks for the QA lead to complete.
---
Key Takeaways
- The Contact List Testing Checklist (2026) delivers a granular, actionable matrix that spans happy‑path validation, error handling, edge cases, accessibility, security, performance, and release criteria.
- Each item includes a concrete pass criterion and a real‑world example, enabling testers to turn the list into executable test cases or exploratory charters.
- Tables provide a quick view of persona‑driven coverage and manual vs. automated effort, helping teams allocate effort efficiently.
- Code snippets demonstrate how the checklist can be translated into Appium and Playwright regression scripts, ensuring that future changes are caught early.
- Autonomous exploration with SUSA covers a large proportion of the checklist in a single pass, surfacing crashes, ANRs, WCAG violations, and logic gaps without the need for hand‑crafted test scripts.
- For the remaining items—such as extreme boundary loads, precise battery impact, and documentation synchronization—targeted manual or scripted efforts complete the verification cycle.
By adopting this checklist, teams gain a repeatable, evidence‑based process that guarantees the contact list remains reliable, inclusive, secure, and performant across the diverse device and user landscape of 2026.
---
*End of article.*
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