lightweight-browser-load-tester
Version:
A lightweight load testing tool using real browsers for streaming applications with DRM support
393 lines (341 loc) • 21.4 kB
Markdown
# Changelog
All notable changes to the Lightweight Browser Load Tester will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [Unreleased]
## [1.0.0-rc.7] - 2025-08-26
### Added
- **Full Chrome Browser Integration** - Complete Google Chrome browser support with automatic DRM detection
- Automatic Chrome browser selection when DRM configuration is detected
- Cross-platform Chrome executable path detection for macOS, Windows, and Linux
- Graceful fallback to Chromium when Chrome is unavailable with appropriate warnings
- Chrome-specific browser arguments for optimal DRM performance
- **True Widevine DRM Support** - Hardware-backed DRM capabilities with Chrome's proprietary modules
- `launchPersistentContext` with temporary profiles for secure DRM testing
- Chrome DevTools Protocol integration for protected media permissions
- Runtime verification of MediaKeySystemAccess and Widevine support
- Access to Chrome's hardware-backed security features for L1 Widevine content
- **Temporary Profile Management** - Secure temporary Chrome profiles for isolated DRM testing
- Unique temporary profiles (`/tmp/chrome-drm-profile-*`) for each DRM test instance
- Automatic profile cleanup after test completion
- Profile isolation for security and test independence
- Enhanced DRM debugging and troubleshooting capabilities
- **DRM Capability Verification** - Automatic Widevine support detection and validation
- Runtime verification of browser DRM capabilities on startup
- Comprehensive DRM support testing and validation
- Enhanced error reporting for DRM configuration issues
- DRM-specific event monitoring and logging
### Changed
- **Browser Pool Architecture** - Enhanced browser instance management with DRM awareness
- Intelligent selection between Chrome (DRM) and Chromium (performance)
- DRM-aware instance creation with automatic headless mode disabling
- Enhanced browser launch options with DRM-specific configurations
- Improved browser type detection and fallback mechanisms
- **DRM Configuration Management** - Automatic DRM detection and browser optimization
- Automatic Chrome selection and DRM-specific argument injection
- Intelligent headless mode disabling for DRM compatibility
- Enhanced DRM permissions setup using Chrome DevTools Protocol
- Comprehensive DRM event monitoring and error handling
- **CLI Interface Enhancement** - Extended command-line options for browser control
- New `--browser-type chrome|chromium` option for explicit browser selection
- Enhanced `--headless` / `--no-headless` options with DRM awareness
- Improved browser type validation and error messaging
- Better integration with DRM configuration detection
### Fixed
- **DRM Testing Reliability** - Resolved DRM compatibility and testing issues
- Fixed headless mode conflicts with DRM license acquisition
- Resolved hardware security requirement issues in DRM testing
- Enhanced Chrome browser detection and configuration
- Improved DRM permissions setup and error handling
- **Browser Launch Stability** - Enhanced browser instance creation and management
- Fixed Chrome executable path detection across platforms
- Resolved browser launch failures with proper fallback mechanisms
- Enhanced error handling for browser configuration issues
- Improved browser instance lifecycle management
- **Temporary Profile Management** - Resolved profile creation and cleanup issues
- Fixed temporary profile creation and permissions
- Enhanced profile cleanup and resource management
- Resolved profile isolation and security issues
- Improved profile path handling across platforms
### DRM Features
- **Chrome-Specific DRM Arguments** - Optimized browser flags for DRM performance
- `--enable-widevine-cdm` - Enable Widevine CDM module
- `--enable-features=VaapiVideoDecoder` - Hardware video decoding
- `--disable-component-update` - Prevent Widevine updates during testing
- `--autoplay-policy=no-user-gesture-required` - Auto-play DRM content
- Additional DRM-specific flags for optimal compatibility
- **Protected Media Permissions** - Automatic setup of DRM-required permissions
- `protectedMediaIdentifier` permission setup via Chrome DevTools Protocol
- Audio and video capture permissions for DRM contexts
- Enhanced permission validation and error handling
- Comprehensive permission status monitoring and logging
- **DRM Event System** - Comprehensive DRM-specific event monitoring
- `drmPermissionsSetup` - DRM permissions configuration status events
- `drmCapabilitiesVerified` - Widevine capability verification results
- `browserInstanceCreated` - Browser type and DRM mode logging events
- Enhanced DRM debugging and troubleshooting event data
### Testing
- **DRM Testing Framework** - Comprehensive DRM testing validation
- Enhanced DRM configuration testing with Chrome browser integration
- Temporary profile creation and cleanup testing
- DRM permissions setup and verification testing
- Chrome browser detection and fallback testing
- **Browser Pool DRM Tests** - Extensive DRM-specific browser pool testing
- Chrome browser auto-selection testing for DRM configurations
- Temporary profile management and cleanup testing
- DRM permissions setup and CDP integration testing
- Comprehensive DRM capability verification testing
### Documentation
- **Enhanced DRM Documentation** - Comprehensive DRM testing guide updates
- Updated DRM testing guide with Chrome browser requirements
- Enhanced configuration examples with Chrome-specific settings
- Improved troubleshooting guide for DRM-related issues
- Comprehensive DRM setup and verification documentation
- **Chrome Browser Integration Guide** - New documentation for Chrome vs Chromium
- Detailed Chrome browser installation and setup instructions
- Chrome vs Chromium comparison for DRM testing scenarios
- Platform-specific Chrome configuration and troubleshooting
- Enhanced DRM testing best practices and recommendations
## [1.0.0-rc.6] - 2025-08-25
### Added
- **Chrome Browser Support** - Full Google Chrome browser integration alongside Chromium
- `browserOptions.browserType` - Choose between 'chrome' and 'chromium' browsers
- Automatic Chrome selection for DRM testing with Widevine support
- Chrome executable path detection for macOS, Windows, and Linux
- Graceful fallback to Chromium when Chrome is unavailable
- **Enhanced DRM Compatibility** - Improved DRM testing with Chrome browser
- Chrome browser automatically selected when DRM configuration is detected
- Full Widevine DRM support with hardware security features
- Chrome-specific DRM arguments (`--enable-widevine-cdm`, `--autoplay-policy=no-user-gesture-required`)
- Automatic headless mode disabling for DRM content protection
- **CLI Browser Options** - Extended command-line interface for browser control
- `--browser-type <type>` - Specify Chrome or Chromium browser
- `--headless` / `--no-headless` - Control headless mode explicitly
- Environment variable support (`LOAD_TEST_BROWSER_TYPE`, `LOAD_TEST_HEADLESS`)
- **Configuration Examples** - New browser-specific configuration examples
- `examples/drm-testing.yaml` - Updated with Chrome browser configuration
- `examples/chromium-testing.yaml` - New example for Chromium-based testing
### Changed
- **Browser Pool Architecture** - Enhanced browser instance management
- Automatic browser type selection based on DRM requirements
- Chrome executable path resolution with platform detection
- Improved browser launch options with type-specific arguments
- Enhanced error handling and fallback mechanisms
- **Configuration Schema** - Extended browser options validation
- Added `browserType` field to `BrowserOptions` interface
- Updated configuration validation with Chrome/Chromium support
- Enhanced TypeScript type definitions for browser selection
### Fixed
- **Streaming Type Detection** - Critical fix for media segment classification
- Fixed `.ts` files being incorrectly classified as 'manifest' instead of 'segment'
- Prioritized file extension detection over path component matching
- Resolved issue with Transport Stream segments in manifest paths
- Improved accuracy of streaming metrics and analytics
- **DRM Testing Reliability** - Enhanced DRM content testing stability
- Chrome browser ensures full Widevine DRM compatibility
- Resolved headless mode conflicts with DRM license acquisition
- Fixed hardware security requirement issues in DRM testing
### Documentation
- **Browser Support Guide** - Comprehensive Chrome vs Chromium documentation
- Detailed comparison of Chrome and Chromium capabilities
- DRM requirements and browser selection guidance
- Installation instructions for both browsers
- Automatic vs manual browser configuration examples
- **Updated Configuration Guide** - Enhanced browser configuration documentation
- Browser type selection with automatic DRM detection
- Chrome-specific configuration examples and best practices
- Platform-specific installation and setup instructions
### Technical Details
- **Browser Detection Logic** - Intelligent browser selection system
- Automatic Chrome selection for DRM testing scenarios
- Chromium default for regular load testing (better performance)
- Platform-specific Chrome executable path detection
- Comprehensive error handling and user feedback
- **Streaming Classification** - Improved media request categorization
- File extension-based detection prioritized over path matching
- Accurate segment vs manifest classification for analytics
- Enhanced streaming metrics accuracy and reporting
## [1.0.0-rc.5] - 2025-02-08
### Added
- **Configurable Browser Options** - Full control over browser behavior and debugging capabilities
- `browserOptions.headless` - Control headless mode (true/false)
- `browserOptions.args` - Custom browser arguments for debugging, performance, and DRM optimization
- Comprehensive browser argument documentation with categorized examples
- **Automatic DRM Compatibility** - Intelligent DRM detection and browser configuration
- Automatic headless mode disabling when DRM configuration is detected
- Automatic DRM-specific browser arguments injection (`--enable-features=WidevineL1`, etc.)
- User warnings when DRM overrides browser configuration
- **Enhanced DRM Support** - Improved Widevine, PlayReady, and FairPlay compatibility
- Hardware security requirement handling for Widevine L1
- Display context requirements for DRM content protection
- EME (Encrypted Media Extensions) optimization
- **Comprehensive Browser Arguments** - Support for 50+ browser arguments across categories:
- Debugging & Development (DevTools, logging, remote debugging)
- Performance & Memory (heap size, cache management, CPU optimization)
- Media & Streaming (autoplay, hardware acceleration, codec support)
- Network & Security (SSL, CORS, proxy configuration)
- Display & Window (size, position, scaling, kiosk mode)
- DRM & Content Protection (Widevine L1, HDCP policy, content settings)
### Changed
- **TestRunner Browser Configuration** - Enhanced browser pool configuration with DRM detection
- Browser options now merge user-specified args with stability defaults
- DRM configuration automatically triggers non-headless mode and DRM-optimized arguments
- Improved browser argument handling with conflict resolution
- **Configuration Schema** - Extended configuration validation
- Added `browserOptions` schema with `headless` boolean and `args` array validation
- Updated TypeScript interfaces with new `BrowserOptions` type
- Enhanced configuration examples with browser options
### Fixed
- **DRM Playback Issues** - Resolved Widevine DRM compatibility problems
- Fixed headless mode preventing DRM license acquisition
- Resolved hardware security requirement conflicts
- Fixed EME (Encrypted Media Extensions) limitations in headless browsers
- **Browser Launch Stability** - Improved browser instance reliability
- Enhanced default browser arguments for stability and performance
- Better handling of browser argument conflicts and overrides
### Documentation
- **Enhanced Configuration Guide** - Comprehensive browser options documentation
- Detailed browser argument categories with practical examples
- DRM-specific configuration guidance with automatic behavior explanation
- Performance optimization recommendations for different use cases
- **Expanded Troubleshooting Guide** - New DRM troubleshooting section
- Detailed DRM + headless mode issue resolution
- Hardware security requirement explanations
- Step-by-step DRM debugging procedures with remote debugging setup
- **Updated README** - Clarified DRM and headless mode behavior
### Technical Details
- **Browser Pool Enhancement** - Improved browser instance management
- Dynamic browser argument merging with user preferences
- Automatic DRM detection and configuration override
- Enhanced logging and user feedback for configuration changes
- **Configuration Management** - Extended configuration system
- New `browserOptions` configuration section with validation
- Backward compatibility with existing configurations
- Environment variable support for browser options (future enhancement)
## [1.0.0-rc.4] - 2025-02-07
### Added
- Initial release of Lightweight Browser Load Tester
- Real browser testing using Playwright with Chromium
- DRM support for Widevine, PlayReady, and FairPlay
- Parameter injection for dynamic API request modification
- Comprehensive monitoring and metrics collection
- Prometheus and OpenTelemetry metrics export
- Kubernetes deployment support for local and cloud environments
- Multi-cloud support (AWS EKS, Google GKE, Azure AKS)
- Docker containerization with security hardening
- Horizontal Pod Autoscaler (HPA) for Kubernetes deployments
- Comprehensive documentation and examples
- CLI interface with configuration validation
- Programmatic API for Node.js applications
- **Request body injection support** for JSON and form data requests
- **Advanced request filtering** with streaming-only mode, allowed/blocked URL patterns
- **Comprehensive request ingestion guide** with detailed examples and troubleshooting
- **Enhanced parameter randomization** with built-in functions, array selection, and file-based data
- **Intelligent request body modification** with automatic JSON/form data detection
- **File-based data caching** for improved performance with external data sources
- **Request body injection examples** demonstrating complex JSON structure injection
- **Browser localStorage pre-population** for authenticated session simulation with multi-domain support
- **localStorage randomization support** with same functions as request parameters for unique user data per browser instance
- **Selective request targeting** with URL pattern and HTTP method filtering for parameter injection
- **Precise parameter control** allowing different parameters for different endpoints and request types
### Features
#### Core Functionality
- **Browser-based load testing**: Authentic user behavior simulation using real Chromium browsers
- **DRM license testing**: Built-in support for major DRM systems with metrics collection
- **Resource optimization**: Efficient memory and CPU usage with configurable limits
- **Real-time monitoring**: Live progress tracking with detailed metrics display
- **Flexible configuration**: YAML/JSON configuration files with environment variable overrides
#### Request Ingestion and Parameter Injection
- **URL-based selective targeting**: Primary feature for applying parameters to specific requests using URL patterns
- **HTTP method filtering**: Target specific HTTP methods (GET, POST, PUT, DELETE) for precise control
- **Multi-target parameter injection**: Support for headers, query parameters, and request bodies
- **JSON request body modification**: Automatic parsing and modification of JSON request bodies
- **Form data support**: URL-encoded form data parameter injection
- **Advanced randomization**: Built-in random functions (UUID, numbers, strings, timestamps)
- **Array-based selection**: Random selection from predefined arrays in variable context
- **File-based data sources**: Random selection from external text files with caching
- **Variable substitution**: Dynamic template variables with session and global scopes
- **Intelligent error handling**: Graceful fallback for unsupported body formats
- **Performance optimization**: File caching and efficient template processing
- **Wildcard and regex patterns**: Flexible URL pattern matching for precise request targeting
#### Kubernetes Integration
- **Multi-environment support**: Local (Minikube, Kind, Docker Desktop) and cloud deployments
- **Cloud provider optimization**: Specific configurations for AWS EKS, Google GKE, and Azure AKS
- **Scalability**: Horizontal Pod Autoscaler with CPU and memory-based scaling
- **Security**: Non-root containers, RBAC, and security contexts
- **Observability**: Prometheus metrics endpoints and service monitors
#### Metrics and Monitoring
- **Prometheus integration**: RemoteWrite support with configurable batching
- **OpenTelemetry support**: OTLP export with multiple protocols
- **Comprehensive metrics**: Request rates, response times, DRM performance, resource usage
- **Error tracking**: Detailed error logging and categorization
- **Real-time dashboards**: Live progress display with key performance indicators
#### Developer Experience
- **CLI interface**: Intuitive command-line tool with comprehensive options
- **Configuration validation**: Built-in validation with helpful error messages
- **Example configurations**: Pre-built configurations for common scenarios
- **Comprehensive documentation**: Detailed guides for all features and deployment scenarios
- **Troubleshooting support**: Extensive troubleshooting guide with common solutions
### Documentation
- Complete API documentation with TypeScript definitions
- Kubernetes deployment guide for all major cloud providers
- Configuration guide with best practices and examples
- **Request Ingestion Guide**: Comprehensive guide for parameter injection and request modification
- **Request Filtering Guide**: Advanced guide for streaming-only mode and URL pattern filtering
- **Parameter Randomization Guide**: Detailed guide for dynamic parameter generation
- Troubleshooting guide with common issues and solutions
- Contributing guidelines for open source development
### Examples
- **Organized examples directory**: All configuration examples moved to dedicated `examples/` folder
- **[basic-load-test.json](examples/basic-load-test.json)**: Basic load testing configuration
- **[drm-testing.yaml](examples/drm-testing.yaml)**: DRM testing with Widevine configuration
- **[selective-parameters.yaml](examples/selective-parameters.yaml)**: URL-based selective parameter targeting (RECOMMENDED)
- **[request-body-injection.yaml](examples/request-body-injection.yaml)**: Comprehensive request body modification examples
- **[randomization-features.yaml](examples/randomization-features.yaml)**: Advanced randomization with built-in functions, arrays, and files
- **Sample data files**: Organized data files in `examples/data/` for immediate use
- **Examples documentation**: Comprehensive README with usage instructions and best practices
### Infrastructure
- Docker multi-stage build with Alpine Linux base
- Kubernetes manifests with Kustomize overlays
- CI/CD pipeline configuration (GitHub Actions ready)
- Security scanning and vulnerability assessment
- Automated testing and quality assurance
## [1.0.0] - 2024-01-XX
### Added
- Initial public release
- All core features and functionality
- Complete documentation suite
- Kubernetes deployment capabilities
- Multi-cloud provider support
---
## Release Notes Template
### [Version] - YYYY-MM-DD
#### Added
- New features and capabilities
#### Changed
- Changes to existing functionality
#### Deprecated
- Features that will be removed in future versions
#### Removed
- Features that have been removed
#### Fixed
- Bug fixes and corrections
#### Security
- Security improvements and vulnerability fixes
---
## Contributing
When contributing to this project, please:
1. Follow the [Contributing Guidelines](CONTRIBUTING.md)
2. Update this changelog with your changes
3. Use the format specified above
4. Include relevant details about breaking changes
5. Reference related issues and pull requests
## Versioning Strategy
- **Major versions (X.0.0)**: Breaking changes, major new features
- **Minor versions (X.Y.0)**: New features, backward compatible
- **Patch versions (X.Y.Z)**: Bug fixes, security updates
## Links
- [GitHub Repository](https://github.com/YOUR_USERNAME/lightweight-browser-load-tester)
- [Issues](https://github.com/YOUR_USERNAME/lightweight-browser-load-tester/issues)
- [Pull Requests](https://github.com/YOUR_USERNAME/lightweight-browser-load-tester/pulls)
- [Releases](https://github.com/YOUR_USERNAME/lightweight-browser-load-tester/releases)