QA Steps
QA steps are verification tasks generated from issue descriptions.
Generation
Steps are generated from issue acceptance criteria:
from goblin.core.qa import generate_qa_steps
steps = generate_qa_steps(issue)
QAStep Structure
@dataclass
class QAStep:
id: int
description: str
category: str # functional, visual, data, error_handling, regression
priority: str # critical, high, medium, low
verification: str
Categories
| Category | Description |
|---|---|
functional | Core functionality works |
visual | UI renders correctly |
data | Data is saved/retrieved correctly |
error_handling | Errors are handled gracefully |
regression | Existing features still work |
Priorities
| Priority | Description |
|---|---|
critical | Must pass for approval |
high | Should pass |
medium | Nice to have |
low | Optional verification |
Example Issue
## Description
Add user login functionality
## Acceptance Criteria
- User can enter email and password
- Valid credentials redirect to dashboard
- Invalid credentials show error message
- Password is masked in input field
Generated QA Steps
[
{
"id": 1,
"description": "Navigate to login page and verify form displays",
"category": "visual",
"priority": "critical",
"verification": "Login form with email and password fields visible"
},
{
"id": 2,
"description": "Enter valid credentials and submit",
"category": "functional",
"priority": "critical",
"verification": "User redirected to dashboard"
},
{
"id": 3,
"description": "Enter invalid credentials and submit",
"category": "error_handling",
"priority": "high",
"verification": "Error message displayed"
},
{
"id": 4,
"description": "Verify password field is masked",
"category": "visual",
"priority": "medium",
"verification": "Password characters shown as dots/asterisks"
}
]
Tester Execution
The Tester executes each step:
- Read step description
- Perform action
- Take screenshot
- Check verification criteria
- Record result (pass/fail)
Result Format
## QA Step Results
### QA-1: Navigate to login page [PASS]
- Screenshot: 01-login-page.png
- Notes: Form displays correctly
### QA-2: Valid login [PASS]
- Screenshot: 02-dashboard.png
- Notes: Redirected successfully
### QA-3: Invalid login [FAIL → FIXED]
- Screenshot: 03-error.png
- Issue: Error message not displayed
- Fix: FINDING-001 (commit abc123)
Serialization
QA steps are stored as JSON:
from goblin.core.qa import qa_steps_to_json, qa_steps_from_json
# Serialize
json_str = qa_steps_to_json(steps)
# Deserialize
steps = qa_steps_from_json(json_str)
Storage
QA steps stored in pipeline record:
UPDATE pipelines SET qa_steps = ? WHERE id = ?