lightweight-browser-load-tester
Version:
A lightweight load testing tool using real browsers for streaming applications with DRM support
187 lines (162 loc) • 5.15 kB
YAML
# Example configuration demonstrating selective parameter injection
# This shows how to target specific requests using URL patterns and HTTP methods
concurrentUsers: 8
testDuration: 300
rampUpTime: 30
streamingUrl: "https://api.example.com/streaming"
streamingOnly: true
# Resource limits
resourceLimits:
maxMemoryPerInstance: 512
maxCpuPercentage: 80
maxConcurrentInstances: 15
# Selective parameter injection examples
requestParameters:
# 1. Apply to ALL requests (no urlPattern or method specified)
- target: header
name: "X-Global-Request-ID"
valueTemplate: "{{random:uuid}}"
scope: global
# 2. Apply only to API authentication endpoints
- target: header
name: "Authorization"
valueTemplate: "Bearer {{randomFromFile:./examples/data/auth-tokens.txt}}"
scope: per-session
urlPattern: "*/api/auth/*" # Only match auth API calls
# 3. Apply only to streaming manifest requests
- target: header
name: "X-Manifest-Request-ID"
valueTemplate: "manifest_{{random:uuid}}"
scope: global
urlPattern: "*.m3u8" # Only HLS manifest files
# 4. Apply only to license requests (DRM)
- target: header
name: "X-DRM-Session-ID"
valueTemplate: "drm_{{sessionId}}_{{random:alphanumeric}}"
scope: per-session
urlPattern: "*/license*" # Only license endpoints
# 5. Apply only to POST requests to analytics endpoints
- target: body
name: "sessionMetadata"
valueTemplate: |
{
"sessionId": "{{sessionId}}",
"timestamp": {{timestamp}},
"requestCount": {{requestCount}},
"userAgent": "{{randomFrom:userAgents}}"
}
scope: per-session
urlPattern: "*/analytics/*"
method: "POST" # Only POST requests
# 6. Apply only to segment requests (media files)
- target: query
name: "segment_id"
valueTemplate: "seg_{{requestCount}}"
scope: global
urlPattern: "*.ts" # Only transport stream segments
# 7. Apply to specific API version endpoints
- target: header
name: "X-API-Version"
valueTemplate: "{{randomFrom:apiVersions}}"
scope: per-session
urlPattern: "*/api/v2/*" # Only v2 API endpoints
# 8. Apply only to PUT/PATCH requests for user data
- target: body
name: "lastModified"
valueTemplate: "{{timestamp}}"
scope: global
urlPattern: "*/api/user/*"
method: "PUT" # Only PUT requests to user endpoints
# 9. Apply to specific streaming server using regex pattern
- target: header
name: "X-CDN-Preference"
valueTemplate: "{{randomFrom:cdnRegions}}"
scope: per-session
urlPattern: "/^https:\\/\\/cdn[0-9]+\\.example\\.com/" # Regex for CDN servers
# 10. Apply only to WebSocket upgrade requests
- target: header
name: "X-WebSocket-Session"
valueTemplate: "ws_{{sessionId}}_{{random:timestamp}}"
scope: per-session
urlPattern: "*/websocket*"
method: "GET" # WebSocket upgrades are GET requests
# 11. Apply to heartbeat/ping endpoints
- target: body
name: "heartbeat"
valueTemplate: |
{
"timestamp": {{timestamp}},
"sessionId": "{{sessionId}}",
"status": "alive"
}
scope: global
urlPattern: "*/heartbeat"
method: "POST"
# 12. Apply different auth tokens based on environment
- target: header
name: "X-Environment-Token"
valueTemplate: "{{randomFromFile:./examples/data/staging-tokens.txt}}"
scope: per-session
urlPattern: "*staging*" # Only staging environment requests
# 13. Apply to specific content type requests
- target: header
name: "Accept"
valueTemplate: "application/vnd.apple.mpegurl"
scope: global
urlPattern: "*/playlist*" # Only playlist requests
# 14. Apply custom headers to analytics POST requests
- target: header
name: "X-Analytics-Version"
valueTemplate: "{{randomFrom:analyticsVersions}}"
scope: per-session
urlPattern: "*/track*"
method: "POST"
# 15. Apply user context to profile API calls
- target: body
name: "userContext"
valueTemplate: |
{
"userId": {{random:1-10000}},
"tier": "{{randomFrom:userTiers}}",
"region": "{{randomFrom:regions}}",
"deviceType": "{{randomFrom:deviceTypes}}"
}
scope: per-session
urlPattern: "*/api/profile/*"
method: "GET"
# Variable context for randomFrom functions
variableContext:
userAgents:
- "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
- "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36"
- "Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X) AppleWebKit/605.1.15"
apiVersions:
- "2.0"
- "2.1"
- "2.2"
cdnRegions:
- "us-east"
- "us-west"
- "eu-central"
analyticsVersions:
- "1.0"
- "1.1"
- "2.0"
userTiers:
- "free"
- "premium"
- "enterprise"
regions:
- "us"
- "eu"
- "asia"
deviceTypes:
- "mobile"
- "desktop"
- "tablet"
# Prometheus metrics export
prometheus:
enabled: true
remoteWriteUrl: "http://localhost:9090/api/v1/write"
batchSize: 50
flushInterval: 30