1
This commit is contained in:
262
examples/README.md
Normal file
262
examples/README.md
Normal file
@@ -0,0 +1,262 @@
|
||||
# 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!
|
Reference in New Issue
Block a user