0
0
Testing Fundamentalstesting~15 mins

Defect classification (severity, priority) in Testing Fundamentals - Build an Automation Script

Choose your learning style9 modes available
Classify defects by severity and priority
Preconditions (2)
Step 1: Review each defect description
Step 2: Assign a severity level: Critical, Major, Minor, or Trivial
Step 3: Assign a priority level: High, Medium, or Low
Step 4: Verify that severity and priority are assigned correctly according to rules
Step 5: Rules: Critical severity means High priority, Minor severity means Low priority, Major severity usually Medium priority
✅ Expected Result: Each defect is correctly classified with severity and priority matching the rules
Automation Requirements - pytest
Assertions Needed:
Assert severity is one of ['Critical', 'Major', 'Minor', 'Trivial']
Assert priority is one of ['High', 'Medium', 'Low']
Assert priority matches severity rules
Best Practices:
Use parameterized tests for multiple defects
Use clear assertion messages
Keep classification logic separate from test code
Automated Solution
Testing Fundamentals
import pytest

# Function to classify priority based on severity

def classify_priority(severity: str) -> str:
    severity = severity.lower()
    if severity == 'critical':
        return 'High'
    elif severity == 'major':
        return 'Medium'
    elif severity == 'minor':
        return 'Low'
    elif severity == 'trivial':
        return 'Low'
    else:
        raise ValueError(f"Unknown severity level: {severity}")

# Sample defects data
sample_defects = [
    {'id': 1, 'description': 'App crashes on launch', 'severity': 'Critical', 'priority': 'High'},
    {'id': 2, 'description': 'UI alignment issue', 'severity': 'Minor', 'priority': 'Low'},
    {'id': 3, 'description': 'Slow response time', 'severity': 'Major', 'priority': 'Medium'},
    {'id': 4, 'description': 'Typo in help text', 'severity': 'Trivial', 'priority': 'Low'}
]

@pytest.mark.parametrize('defect', sample_defects)
def test_defect_classification(defect):
    severity = defect['severity']
    priority = defect['priority']

    # Check severity is valid
    assert severity in ['Critical', 'Major', 'Minor', 'Trivial'], \
        f"Severity '{severity}' is not valid"

    # Check priority is valid
    assert priority in ['High', 'Medium', 'Low'], \
        f"Priority '{priority}' is not valid"

    # Check priority matches severity rules
    expected_priority = classify_priority(severity)
    assert priority == expected_priority, \
        f"Priority '{priority}' does not match expected '{expected_priority}' for severity '{severity}'"

This test script uses pytest to automate defect classification verification.

The classify_priority function defines the expected priority for each severity level. This keeps logic separate and clear.

The sample_defects list contains example defects with their severity and priority.

The test test_defect_classification runs for each defect using pytest.mark.parametrize. It asserts that severity and priority values are valid and that priority matches the expected value based on severity.

This approach is simple, clear, and easy to extend with more defects.

Common Mistakes - 3 Pitfalls
Hardcoding priority values in test without using a classification function
Not validating severity and priority values before assertions
Using print statements instead of assertions for verification
Bonus Challenge

Now add data-driven testing with 3 different defect inputs including edge cases

Show Hint