2 / 71 · 11 Manual Testing Fundamentals · Writing Test Cases← prev⊞ allnext →☰ Read as one page
1.2Anatomy of a Good Test Case
Every test case, regardless of your tooling (TestRail, Zephyr, Google Sheets, or plain Markdown), should include these fields:
| Field | Purpose | Example |
|---|---|---|
| ID | Unique reference for traceability | TC-LOGIN-004 |
| Title | One-line summary of what is being verified | Verify login fails with expired password |
| Preconditions | State the system must be in before starting | User account exists with password expired 1 day ago |
| Steps | Numbered, atomic actions | 1. Navigate to /login 2. Enter email 3. Enter expired password 4. Click Submit |
| Expected Result | Observable, measurable outcome | Error message "Your password has expired" is displayed; user is not redirected to dashboard |
| Actual Result | Filled during execution | (blank until run) |
| Test Data | Specific values needed | Email: expired@test.com, Password: OldPass123! |
| Priority | Execution order importance | High |
The ID Convention
Use a consistent naming pattern across your project. Common formats:
TC-MODULE-NNN(e.g., TC-LOGIN-004, TC-CART-012)FEATURE.SCENARIO.NNN(e.g., AUTH.EXPIRED_PW.001)- Auto-incrementing numeric IDs from your test management tool
The format matters less than consistency. Pick one and enforce it.
Title Best Practices
The title should answer "what is being verified?" in one line. Start with a verb:
- Good: "Verify login fails with expired password"
- Good: "Confirm item quantity updates in cart after increment"
- Bad: "Login test" (too vague)
- Bad: "Test that when a user who has an expired password tries to log in the system shows an error" (too long)