From qa-skills
Generate boundary value, equivalence partitioning, and edge case test data for input validation testing.
How this skill is triggered — by the user, by Claude, or both
Slash command
/qa-skills:input-validation-testerThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Generate comprehensive input validation test cases using boundary value analysis, equivalence partitioning, and special character testing. Covers strings, numbers, dates, emails, files, and custom formats.
Generate comprehensive input validation test cases using boundary value analysis, equivalence partitioning, and special character testing. Covers strings, numbers, dates, emails, files, and custom formats.
Use this skill when the user asks for tasks like:
Use this skill for:
Do not use this skill for:
security-test-generator)api-test-generator)references/boundary-value-analysis.mdreferences/special-characters.mdreferences/data-type-edge-cases.mdOption A: From source code
# Find validation rules in code
grep -rn "required\|min_length\|max_length\|MinLength\|MaxLength\|@Valid\|@NotNull\|@Size\|@Pattern\|@Email\|validator\|Yup\.\|Zod\.\|pydantic" --include="*.py" --include="*.java" --include="*.ts" --include="*.js" . | head -30
# Find model/schema definitions
grep -rn "class.*Model\|class.*Schema\|interface.*Request\|type.*Input\|class.*DTO" --include="*.py" --include="*.java" --include="*.ts" --include="*.js" . | head -20
Option B: From API spec
find . -maxdepth 3 -name "openapi.*" -o -name "swagger.*" | head -5
Parse request body schemas for field types, constraints, and required flags.
Option C: User-provided field definitions
Parse user description for field names, types, and constraints.
For each field, determine:
| Need | Read this file |
|---|---|
| Boundary value methodology | references/boundary-value-analysis.md |
| Special char / encoding test data | references/special-characters.md |
| Type-specific edge cases | references/data-type-edge-cases.md |
| Category | Test values |
|---|---|
| Empty/null | "", null, undefined, whitespace-only " " |
| Boundary length | min-1, min, min+1, max-1, max, max+1 characters |
| Unicode | "名前", "Ümit", "🎉🚀", RTL text "مرحبا" |
| Special chars | "<script>alert(1)</script>", "'; DROP TABLE--", "../../etc/passwd" |
| Long strings | 1000 chars, 10000 chars, max_int chars |
| Whitespace | leading, trailing, multiple internal spaces, tabs, newlines |
| Encoding | UTF-8 BOM, Latin-1, null bytes "\x00" |
| Category | Test values |
|---|---|
| Boundaries | min-1, min, min+1, max-1, max, max+1 |
| Zero | 0, -0, +0 |
| Negative | -1, MIN_INT |
| Large | MAX_INT, MAX_INT+1, MAX_FLOAT |
| Decimal precision | 0.1+0.2, very small (1e-10), very large (1e308) |
| Non-numeric | "abc", "12.34.56", "1e999", "", NaN, Infinity |
| Category | Test values |
|---|---|
| Boundaries | 1970-01-01, 2038-01-19, 9999-12-31, 0000-01-01 |
| Invalid dates | 2024-02-30, 2024-13-01, 2024-00-00 |
| Leap year | 2024-02-29 (valid), 2023-02-29 (invalid) |
| Timezones | UTC, UTC+14, UTC-12, DST transition dates |
| Formats | ISO 8601, Unix timestamp, human-readable |
| Edge | Midnight, 23:59:59, daylight saving transitions |
| Category | Test values |
|---|---|
| Valid | "[email protected]", "[email protected]", "[email protected]" |
| Invalid | "@example.com", "user@", "[email protected]", "user@@example.com", no-at-sign |
| Edge | 254 char email, special local parts, IP domain "user@[127.0.0.1]" |
| Category | Test values |
|---|---|
| Type | Allowed MIME types, disallowed types, double extensions (.jpg.exe) |
| Size | 0 bytes, 1 byte, max size, max+1 byte |
| Name | Special chars in filename, very long name, no extension, path traversal (../../../) |
| Content | Empty file, corrupted content with valid extension, polyglot files |
| Category | Test values |
|---|---|
| Empty | [], missing field |
| Size | 1 item, max items, max+1 items |
| Duplicates | All same values, mixed |
| Nested | Deeply nested arrays, mixed types |
Output format based on user preference:
A. Structured test data table (default)
### Field: <field_name> (<type>, <constraints>)
| # | Input | Category | Expected Result | Reason |
|---|---|---|---|---|
| 1 | `""` | empty | 400/reject | required field |
| 2 | `"a"` | boundary-min | 200/accept | meets min length |
| ... | ... | ... | ... | ... |
B. Parameterized test code (if user requests)
@pytest.mark.parametrize("value,expected_status", [
("", 400),
("a", 200),
("a" * 256, 400),
(None, 400),
("<script>alert(1)</script>", 400),
])
def test_field_name_validation(client, value, expected_status):
response = client.post("/endpoint", json={"field_name": value})
assert response.status_code == expected_status
C. JSON test data set
{
"field_name": {
"valid": ["value1", "value2"],
"invalid": [
{"value": "", "reason": "empty string", "expected": 400},
{"value": null, "reason": "null value", "expected": 400}
]
}
}
## Input Validation Test Data Report
- **Target**: <endpoint/form/module>
- **Fields analyzed**: <count>
- **Test cases generated**: <count>
### Per Field Summary
| Field | Type | Constraints | Valid cases | Invalid cases | Total |
|---|---|---|---|---|---|
| <name> | <type> | <constraints> | <n> | <n> | <n> |
### Coverage
- Boundary values: ✓
- Equivalence partitions: ✓
- Special characters: ✓
- Unicode/encoding: ✓
- Null/empty: ✓
- Type mismatch: ✓
Action:
Action:
references/boundary-value-analysis.mdreferences/special-characters.mdreferences/data-type-edge-cases.mdnpx claudepluginhub umitozdemirf/qa-skills --plugin qa-skillsIdentify and test boundary values for input validation. Use when designing test cases for numeric ranges, dates, and string lengths.
Generates systematic test cases for requirements or features using equivalence partitioning, boundary value analysis, decision tables. Outputs markdown tables with categories like positive, negative, boundary; optional .NET xUnit code.
Generates realistic test data, fixtures, factories, seeds, and edge cases using Faker.js, Fishery, pytest fixtures for JS/TS/Python apps and databases.