Files
stroke/examples/README.md
2025-09-12 17:01:54 +03:00

262 lines
6.0 KiB
Markdown

# Stroke Example Configurations
This directory contains example configurations for different stress testing scenarios.
## Basic Examples
### 1. Simple API Health Check
```yaml
# examples/basic-health-check.yaml
target:
url: "https://api.example.com/health"
method: "GET"
timeout: 10
load:
requests: 1000
concurrency: 20
duration: "2m"
pattern: "constant"
reporting:
format: ["console", "json"]
output_dir: "./results"
```
### 2. POST API with Authentication
```yaml
# examples/authenticated-post.yaml
target:
url: "https://api.example.com/api/v1/users"
method: "POST"
headers:
Content-Type: "application/json"
Authorization: "Bearer your-jwt-token-here"
body: |
{
"username": "testuser",
"email": "test@example.com",
"role": "user"
}
timeout: 30
load:
requests: 5000
concurrency: 100
duration: "5m"
pattern: "ramp"
ramp_up: "30s"
rate_limiting:
enabled: true
requests_per_second: 200
reporting:
format: ["console", "html", "json"]
output_dir: "./test-results"
percentiles: [50, 90, 95, 99]
```
## Advanced Scenarios
### 3. E-commerce Checkout Simulation
```yaml
# examples/ecommerce-checkout.yaml
target:
url: "https://shop.example.com/api/checkout"
method: "POST"
headers:
Content-Type: "application/json"
X-API-Key: "your-api-key"
User-Agent: "Stroke/1.0 LoadTester"
body: |
{
"items": [
{"sku": "ITEM-001", "quantity": 2, "price": 29.99},
{"sku": "ITEM-002", "quantity": 1, "price": 49.99}
],
"customer": {
"email": "loadtest@example.com",
"shipping_address": {
"street": "123 Test St",
"city": "Test City",
"country": "US"
}
},
"payment": {
"method": "card",
"token": "test_token_12345"
}
}
timeout: 60
load:
requests: 10000
concurrency: 150
duration: "10m"
pattern: "spike"
rate_limiting:
enabled: true
requests_per_second: 100
failure_injection:
enabled: true
network_delay: "50ms"
drop_rate: 0.02 # 2% packet loss
error_rate: 0.01 # 1% forced errors
reporting:
format: ["console", "html", "json", "csv"]
output_dir: "./checkout-stress-results"
percentiles: [50, 75, 90, 95, 99, 99.9]
```
### 4. High-Load Database API Test
```yaml
# examples/database-api-test.yaml
target:
url: "https://api.example.com/api/v2/users/search"
method: "POST"
headers:
Content-Type: "application/json"
Authorization: "Bearer high-load-test-token"
body: |
{
"query": "active users",
"filters": {
"created_after": "2023-01-01",
"status": "active",
"limit": 100
},
"sort": "created_at desc"
}
timeout: 45
load:
requests: 50000
concurrency: 500
duration: "15m"
pattern: "ramp"
ramp_up: "2m"
rate_limiting:
enabled: true
requests_per_second: 1000
failure_injection:
enabled: true
network_delay: "25ms"
drop_rate: 0.005 # 0.5% packet loss
error_rate: 0.02 # 2% server errors
reporting:
format: ["console", "html", "json"]
output_dir: "./database-load-results"
percentiles: [50, 90, 95, 99, 99.5, 99.9]
```
### 5. Microservice Chain Test
```yaml
# examples/microservice-chain.yaml
target:
url: "https://gateway.example.com/api/v1/orders/process"
method: "POST"
headers:
Content-Type: "application/json"
X-Request-ID: "stroke-test-{{.RequestID}}"
Authorization: "Bearer microservice-test-token"
body: |
{
"order_id": "ORDER-{{.Timestamp}}-{{.WorkerID}}",
"customer_id": "CUST-{{.RandomInt}}",
"items": [
{
"product_id": "PROD-{{.RandomChoice:123,456,789}}",
"quantity": {{.RandomInt:1,5}},
"price": {{.RandomFloat:10.00,99.99}}
}
],
"metadata": {
"source": "load_test",
"test_run": "{{.TestRunID}}"
}
}
timeout: 120
load:
requests: 25000
concurrency: 200
duration: "20m"
pattern: "constant"
rate_limiting:
enabled: true
requests_per_second: 300
failure_injection:
enabled: true
network_delay: "100ms"
drop_rate: 0.01 # 1% packet loss
error_rate: 0.03 # 3% server errors
reporting:
format: ["console", "html", "json", "csv"]
output_dir: "./microservice-test-results"
percentiles: [50, 75, 90, 95, 99, 99.9]
```
## Usage Instructions
### Running Examples
```bash
# Run a basic health check
stroke -config examples/basic-health-check.yaml
# Run with custom settings
stroke -config examples/authenticated-post.yaml -concurrency 50
# Override specific parameters
stroke -config examples/ecommerce-checkout.yaml -duration 3m -rps 50
```
### Customizing Configurations
1. **Update URLs**: Replace example URLs with your actual endpoints
2. **Set Authentication**: Add your actual API keys, tokens, or credentials
3. **Adjust Load**: Modify concurrency and request counts based on your needs
4. **Configure Outputs**: Choose reporting formats and output directories
### Load Patterns
- **constant**: Steady rate throughout the test
- **ramp**: Gradually increase load over ramp_up duration
- **spike**: Sudden bursts of high load
### Rate Limiting Strategies
- **Fixed Rate**: Set `requests_per_second` for consistent throttling
- **Burst**: Allow short bursts above the rate limit
- **Adaptive**: Automatically adjust based on response times and errors
## Best Practices
1. **Start Small**: Begin with low concurrency and gradually increase
2. **Monitor Resources**: Watch server CPU, memory, and database connections
3. **Test Incrementally**: Run multiple tests with increasing load
4. **Document Results**: Save reports and analyze trends over time
5. **Respect Rate Limits**: Don't overwhelm production systems
## Safety Notes
⚠️ **WARNING**: These examples can generate significant load. Always:
- Test against staging/test environments first
- Get permission before testing production systems
- Monitor system resources during tests
- Have a plan to stop tests if issues arise
- Consider the impact on other users/services
---
**Pro Tip**: Use the `-verbose` flag to see detailed configuration before starting the test!