---
description: Create a new test specification
---
# Create Test Specification
Guide for creating Checkmate test specifications.
## Test Spec Structure
```yaml
name: "Suite Name"
description: "What this test suite covers"
env:
base_url: "http://localhost:8080" # Optional, uses config if not set
timeout_ms: 5000
requests:
request_name:
body:
field: "value"
headers:
Authorization: "Bearer token"
tests:
test_name:
description: "What this test verifies"
endpoint: /api/endpoint
method: POST # GET, POST, PUT, DELETE, PATCH
requests: [request_name]
expect_status: 200
assertions:
- query: "$[doc][field]"
expect: "expected_value"
```
## Assertion Types
```yaml
assertions:
# Exact value match
- query: "$[doc][status]"
expect: "active"
# Type checking
- query: "$[doc][count]"
expect_type: number
# Existence check
- query: "$[doc][optional_field]?"
expect: true
# Comparisons
- query: "$[doc][count]"
expect_gte: 1
expect_lte: 100
# Array length
- query: "$[doc][items].length()"
expect_gte: 0
```
## Multi-Request Tests
For testing stateful behavior (counters, rate limits):
```yaml
tests:
counter_increments:
requests: [same_request, same_request, same_request]
skip_first: true # Don't assert on first request
assertions:
- query: "$[doc][counter]"
expect_gte: 1
- query: "$[@prev][counter]" # Compare to previous
expect_lt: "$[doc][counter]"
```
## Best Practices
1. One concern per spec file
2. Use descriptive test names
3. Include failure messages
4. Group related requests together