lightweight-browser-load-tester
Version:
A lightweight load testing tool using real browsers for streaming applications with DRM support
191 lines (168 loc) • 4.47 kB
YAML
# Example configuration demonstrating request body injection
# This shows how to inject parameters into JSON and form data request bodies
concurrentUsers: 8
testDuration: 300
rampUpTime: 30
streamingUrl: "https://api.example.com/streaming"
streamingOnly: true
# Resource limits
resourceLimits:
maxMemoryPerInstance: 512
maxCpuPercentage: 80
maxConcurrentInstances: 15
# Request parameter injection with focus on body injection
requestParameters:
# Header parameters for authentication and tracking
- target: header
name: "Authorization"
valueTemplate: "Bearer {{randomFromFile:./examples/data/auth-tokens.txt}}"
scope: per-session
- target: header
name: "X-Request-ID"
valueTemplate: "{{random:uuid}}"
scope: global
- target: header
name: "Content-Type"
valueTemplate: "application/json"
scope: global
# Query parameters
- target: query
name: "sessionId"
valueTemplate: "{{sessionId}}"
scope: per-session
# Simple body parameters (will be added to JSON objects)
- target: body
name: "userId"
valueTemplate: "{{random:1-10000}}"
scope: per-session
- target: body
name: "requestId"
valueTemplate: "req_{{requestCount}}"
scope: per-session
- target: body
name: "timestamp"
valueTemplate: "{{timestamp}}"
scope: global
# Complex JSON body parameter
- target: body
name: "clientInfo"
valueTemplate: |
{
"deviceId": "{{randomFromFile:./examples/data/device-ids.txt}}",
"deviceType": "{{randomFrom:deviceTypes}}",
"userAgent": "{{randomFrom:userAgents}}",
"sessionId": "{{sessionId}}",
"capabilities": {
"drm": ["widevine", "playready"],
"codecs": ["h264", "h265", "av1"],
"maxResolution": "4k",
"hdr": true
},
"timestamp": {{timestamp}},
"version": "{{randomFrom:clientVersions}}"
}
scope: per-session
# User context information
- target: body
name: "userContext"
valueTemplate: |
{
"id": {{random:1-10000}},
"tier": "{{randomFrom:userTiers}}",
"region": "{{randomFrom:regions}}",
"preferences": {
"quality": "{{randomFrom:qualities}}",
"language": "{{randomFrom:languages}}",
"subtitles": {{randomFrom:booleans}}
}
}
scope: per-session
# Streaming-specific metadata
- target: body
name: "streamingMetadata"
valueTemplate: |
{
"requestType": "{{randomFrom:requestTypes}}",
"bandwidth": {{random:1000-50000}},
"bufferSize": {{random:5-30}},
"adaptiveBitrate": true,
"drmEnabled": {{randomFrom:booleans}},
"analytics": {
"trackingId": "{{random:uuid}}",
"sessionStart": {{timestamp}},
"platform": "{{randomFrom:platforms}}"
}
}
scope: per-session
# Variable context for randomFrom functions
# Note: In actual implementation, this would be passed to the RequestInterceptor constructor
variableContext:
deviceTypes:
- "mobile"
- "tablet"
- "desktop"
- "smart-tv"
- "streaming-device"
- "gaming-console"
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 (X11; Linux x86_64) AppleWebKit/537.36"
- "Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X) AppleWebKit/605.1.15"
- "Mozilla/5.0 (Android 14; Mobile; rv:121.0) Gecko/121.0 Firefox/121.0"
clientVersions:
- "2.1.0"
- "2.2.0"
- "2.3.0"
- "3.0.0"
- "3.1.0"
userTiers:
- "free"
- "basic"
- "premium"
- "enterprise"
regions:
- "us-east"
- "us-west"
- "eu-central"
- "eu-west"
- "ap-southeast"
- "ap-northeast"
qualities:
- "240p"
- "480p"
- "720p"
- "1080p"
- "4k"
languages:
- "en"
- "es"
- "fr"
- "de"
- "ja"
- "zh"
- "pt"
- "ru"
booleans:
- true
- false
requestTypes:
- "manifest"
- "segment"
- "license"
- "analytics"
- "heartbeat"
platforms:
- "web"
- "android"
- "ios"
- "roku"
- "apple-tv"
- "fire-tv"
- "chromecast"
# Prometheus metrics export
prometheus:
enabled: true
remoteWriteUrl: "http://localhost:9090/api/v1/write"
batchSize: 50
flushInterval: 30