Test Case Writing (English)
中文版: See skill test-case-writing .
Prompt: this directory's prompts/test-case-writing_EN.md .
When to Use
-
User mentions test case writing, test case design, case design
-
Need to design test cases based on requirements
-
Trigger examples: "Write test cases for the following requirements" or "Design test cases for login functionality"
Output Format Options
This skill defaults to Markdown (Standard-version template). To get another format, add one of the following at the end of your request:
Format Description How to request (example)
Markdown Default; good for reading and version control No extra instruction
Excel Tab-separated, paste into Excel "Please output as tab-separated table for pasting into Excel"
CSV Comma-separated, header row first "Please output as CSV"
JSON For tooling/parsing "Please output as JSON"
TestRail TestRail import format "Please output in TestRail format"
Details and examples: output-formats.md in this directory.
How to Use
-
Open the relevant file in this directory's prompts/ and copy the content below the dashed line.
-
Append your requirements and context (business flow, environment, constraints, acceptance criteria).
-
If you need non-Markdown output, append the request sentence from output-formats.md at the end.
Reference Files
-
prompts/test-case-writing_EN.md — Test case writing Standard-version prompt
-
output-formats.md — Markdown / Excel / CSV / JSON request instructions
Code Examples
This skill provides the following real-world code examples:
Test Case Design Patterns (Planned) - Complete test case design examples
-
Equivalence partitioning examples (10+)
-
Boundary value analysis examples (8+)
-
Decision table testing examples (5+)
-
State transition testing examples (3+)
-
Real project test case sets (50+)
Test Case Generation Tool (Coming soon)
Test Case Quality Checker (Coming soon)
Additional examples are planned in a future update.
Common Pitfalls
-
❌ Only testing happy paths → ✅ Cover normal, exception, and boundary scenarios
-
❌ Unclear test case descriptions → ✅ Use explicit steps and expected results
-
❌ Missing test data → ✅ Provide specific test data
-
❌ Inappropriate granularity → ✅ Maintain appropriate granularity, not too coarse or too fine
-
❌ Ignoring preconditions → ✅ Clearly state preconditions and environment requirements
-
❌ No priority → ✅ Mark test case priority (P0/P1/P2/P3)
-
❌ Dependencies between cases → ✅ Keep test cases independent
Best Practices
- Test Case Structure
Standard test case format:
TC-001: Test Case Title
Priority: P0 / P1 / P2 / P3 Type: Functional / UI / Performance / Security / Compatibility Preconditions:
- Condition 1
- Condition 2
Test Steps:
- Step 1
- Step 2
- Step 3
Test Data:
- Data item 1: Value
- Data item 2: Value
Expected Results:
- Result 1
- Result 2
Actual Results: [Fill during execution] Status: Pass / Fail / Blocked / Skip Notes: [Optional]
- Test Design Methods
Equivalence Partitioning
Divide input domain into equivalence classes, select representative data from each class:
Example: Age input (valid range 18-65)
Equivalence Class Type Test Value Expected Result
< 18 Invalid 10, 17 Reject
18-65 Valid 18, 30, 65 Accept
65 Invalid 66, 100 Reject
Boundary Value Analysis
Test boundary values and values near boundaries:
Example: Age input (valid range 18-65)
Test Value Type Expected Result
17 Lower boundary-1 Reject
18 Lower boundary Accept
19 Lower boundary+1 Accept
64 Upper boundary-1 Accept
65 Upper boundary Accept
66 Upper boundary+1 Reject
Decision Table
Handle scenarios with multiple condition combinations:
Example: Login validation
Condition Rule 1 Rule 2 Rule 3 Rule 4
Username correct ✓ ✓ ✗ ✗
Password correct ✓ ✗ ✓ ✗
Result Login success Password error Username error Both error
State Transition
Test object transitions between different states:
[Not logged in] --Login--> [Logged in] --Logout--> [Not logged in] | | +----Login failed------+
- Test Case Priority
P0 (Critical):
-
Core business processes
-
Blocking issues
-
Must execute before each release
P1 (High):
-
Important features
-
Common scenarios
-
Should execute before each release
P2 (Medium):
-
General features
-
Non-core scenarios
-
Can be selectively executed
P3 (Low):
-
Edge cases
-
Rarely used features
-
Execute when time permits
- Test Case Writing Principles
SMART Principles:
-
Specific: Steps and results are clear
-
Measurable: Results are verifiable
-
Achievable: Can be actually executed
-
Relevant: Related to requirements
-
Time-bound: Execution time is reasonable
3C Principles:
-
Clear: Anyone can understand
-
Concise: Not redundant
-
Complete: Contains all necessary information
- Coverage Goals
-
Requirements coverage: 100% (all requirements have corresponding test cases)
-
Code coverage: 80%+ (automated tests)
-
Scenario coverage: Cover normal, exception, and boundary cases
-
Priority distribution: P0(20%) + P1(30%) + P2(30%) + P3(20%)
Troubleshooting
Issue 1: Don't Know How to Start Writing Test Cases
Symptoms: Facing requirements document, don't know where to start
Solution:
Use 5W1H analysis method:
-
What (What to test): Identify functional points
-
Who (Who uses): Identify user roles
-
When (When): Identify trigger conditions
-
Where (Where): Identify usage scenarios
-
Why (Why): Understand business goals
-
How (How): Design test steps
Example:
Requirement: User login functionality
5W1H Analysis
What:
- Username password validation
- Remember me feature
- Forgot password link
Who:
- Registered users
- Unregistered users
- Administrators
When:
- First visit
- After session expires
- After active logout
Where:
- Web
- Mobile
- Different browsers
Why:
- Protect user data
- Personalized experience
- Permission control
How:
- Enter username and password
- Click login button
- Validate and redirect
Test Case Design
Based on above analysis, design following test cases:
- Normal login (P0)
- Username error (P1)
- Password error (P1)
- Remember me feature (P2)
- Forgot password flow (P2) ...
Issue 2: Incomplete Test Coverage
Symptoms: Many missed scenarios found after testing
Solution:
Use test coverage checklist:
Test Coverage Checklist
Functional Dimension
- Normal flow
- Exception flow
- Boundary conditions
- Error handling
Data Dimension
- Valid data
- Invalid data
- Empty/null values
- Special characters
- Oversized data
- Wrong data types
User Dimension
- Different roles
- Different permissions
- Not logged in users
- Logged in users
Environment Dimension
- Different browsers
- Different operating systems
- Different screen sizes
- Different network conditions
State Dimension
- Initial state
- Intermediate state
- Final state
- Exception state
Time Dimension
- First use
- Repeated use
- Timeout scenarios
- Concurrent scenarios
Issue 3: Too Many Test Cases, Can't Execute All
Symptoms: Huge number of test cases, not enough testing time
Solution:
Priority sorting:
-
Execute P0 and P1 test cases first
-
P2 and P3 selectively based on time
Risk assessment:
-
Increase test cases in high-risk areas
-
Reduce test cases in low-risk areas
Automation:
-
Automate repetitive test cases
-
Manual testing focuses on exploratory testing
Test case merging:
-
Merge similar test cases
-
One test case validates multiple checkpoints
Example:
Before optimization (5 test cases)
TC-001: Login success TC-002: Display username after login TC-003: Display avatar after login TC-004: Display menu after login TC-005: Redirect to homepage after login
After optimization (1 test case)
TC-001: Login success and verify user information
Test Steps:
- Enter correct username and password
- Click login button
Expected Results:
- ✓ Login successful
- ✓ Display username
- ✓ Display user avatar
- ✓ Display navigation menu
- ✓ Redirect to homepage
Issue 4: Unclear Test Case Description
Symptoms: Others have difficulty understanding when executing test cases
Solution:
Use Given-When-Then format:
TC-001: Add product to shopping cart
Given (Preconditions):
- User is logged in
- Product stock is sufficient (> 10 items)
- Shopping cart is empty
When (Test Steps):
- Visit product detail page
- Select quantity: 2
- Click "Add to Cart" button
Then (Expected Results):
- Display "Added successfully" message
- Shopping cart icon shows number 2
- Product appears in shopping cart list
- Product quantity shows 2
- Total price = Unit price × 2
Issue 5: Difficult Test Data Preparation
Symptoms: Spend a lot of time preparing data for each test case execution
Solution:
- Create test data sets:
Test Data Sets
User Data
| Username | Password | Role | Status | Purpose |
|---|---|---|---|---|
| admin@test.com | Admin123! | Admin | Normal | Admin function testing |
| user1@test.com | User123! | User | Normal | Normal flow testing |
| user2@test.com | User123! | User | Locked | Exception state testing |
Product Data
| Product ID | Name | Price | Stock | Purpose |
|---|---|---|---|---|
| P001 | Product A | 100 | 999 | Normal purchase testing |
| P002 | Product B | 200 | 1 | Insufficient stock testing |
| P003 | Product C | 0 | 100 | Free product testing |
Use data generation tools:
-
Faker.js (JavaScript)
-
Faker (Python)
-
Custom data generation scripts
Database snapshots:
-
Save test database snapshots
-
Restore snapshots before each test
Issue 6: High Test Case Maintenance Cost
Symptoms: Need to update many test cases after requirement changes
Solution:
- Modular design:
Common Steps Library
Login Steps
Step ID: COMMON-LOGIN Steps:
- Visit login page
- Enter username: {username}
- Enter password: {password}
- Click login button
Add Product to Cart
Step ID: COMMON-ADD-TO-CART Steps:
- Visit product detail page: {product_id}
- Select quantity: {quantity}
- Click "Add to Cart"
Test Cases
TC-001: Purchase product flow
Steps:
- Execute COMMON-LOGIN (username=user1, password=User123!)
- Execute COMMON-ADD-TO-CART (product_id=P001, quantity=2)
- Click shopping cart icon
- Click "Checkout" button ...
- Parameterized test cases:
TC-001: Login validation (Parameterized)
| Case ID | Username | Password | Expected Result |
|---|---|---|---|
| TC-001-1 | valid@test.com | Valid123! | Login success |
| TC-001-2 | invalid@test.com | Valid123! | Username error |
| TC-001-3 | valid@test.com | Invalid | Password error |
| TC-001-4 | Valid123! | Username empty | |
| TC-001-5 | valid@test.com | Password empty |
Issue 7: Don't Know How to Verify Complex Expected Results
Symptoms: Expected results involve multiple systems or complex calculations
Solution:
Break down verification points:
TC-001: Order submission
Expected Results:
1. Frontend Display
- Display "Order submitted successfully" message
- Redirect to order detail page
- Order number format correct (ORD-YYYYMMDD-XXXXX)
- Order status shows "Pending payment"
2. Database Verification
- New record added to orders table
- Corresponding product records added to order_items table
- Product stock decreased by corresponding quantity
- User points increased
3. Third-party Systems
- Send order confirmation email
- Push order notification to mobile
- Sync order to ERP system
4. Log Verification
- Record order creation log
- Record stock change log
- Record points change log
Get More Help
If the issue persists:
-
Check FAQ.md
-
Review example README.md files
-
Refer to test case templates
-
Consult team's test lead
Related skills: requirements-analysis-en, functional-testing-en, test-case-reviewer-en, test-strategy-en.
Target Audience
-
QA engineers and developers executing this testing domain in real projects
-
Team leads who need structured, reproducible testing outputs
-
AI users who need fast, format-ready deliverables for execution and reporting
Not Recommended For
-
Pure production incident response without test scope/context
-
Decisions requiring legal/compliance sign-off without expert review
-
Requests lacking minimum inputs (scope, environment, expected behavior)
Critical Success Factors
-
Provide clear scope, environment, and acceptance criteria before generation
-
Validate generated outputs against real system constraints before execution
-
Keep artifacts traceable (requirements -> test points -> defects -> decisions)
Output Templates and Parsing Scripts
-
Template directory: output-templates/
-
template-word.md (Word-friendly structure)
-
template-excel.tsv (Excel paste-ready)
-
template-xmind.md (XMind-friendly outline)
-
template-json.json
-
template-csv.csv
-
template-markdown.md
-
Parser scripts directory: scripts/
-
Parse (generic): parse_output_formats.py
-
Parse (per-format): parse_word.py , parse_excel.py , parse_xmind.py , parse_json.py , parse_csv.py , parse_markdown.py
-
Convert (generic): convert_output_formats.py
-
Convert (per-format): convert_to_word.py , convert_to_excel.py , convert_to_xmind.py , convert_to_json.py , convert_to_csv.py , convert_to_markdown.py
-
Batch convert: batch_convert_templates.py (outputs into artifacts/ )
Examples:
python3 scripts/parse_json.py output-templates/template-json.json python3 scripts/parse_markdown.py output-templates/template-markdown.md python3 scripts/convert_to_json.py output-templates/template-markdown.md python3 scripts/convert_output_formats.py output-templates/template-json.json --to csv python3 scripts/batch_convert_templates.py --skip-same