Skip to main content

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

CategoryDescription
functionalCore functionality works
visualUI renders correctly
dataData is saved/retrieved correctly
error_handlingErrors are handled gracefully
regressionExisting features still work

Priorities

PriorityDescription
criticalMust pass for approval
highShould pass
mediumNice to have
lowOptional 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:

  1. Read step description
  2. Perform action
  3. Take screenshot
  4. Check verification criteria
  5. 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 = ?