UNPKG

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
# 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