artillery-engine-thrift
v0.0.5
Published
Artillery engine for Apache Thrift RPC load testing
Downloads
156
Maintainers
Readme
artillery-engine-thrift
Artillery engine for Apache Thrift RPC load testing. This engine allows you to use Artillery to perform load testing on Thrift-based services.
Installation
npm install artillery-engine-thrift --save-devRequirements
- Node.js >= 14.0.0
- Artillery >= 2.0.0
Usage
1. Install Artillery
npm install artillery --save-dev2. Generate Thrift Service Code
First, generate your Thrift service JavaScript code:
thrift --gen js:node your-service.thrift3. Configure Artillery
Create an Artillery configuration file (e.g., artillery-config.yml):
config:
target: "thrift://localhost:8080"
engines:
thrift:
services:
YourServiceName:
module: "./gen-nodejs/YourService.js" # Path to generated Thrift service module
qName: "com.example.YourService" # Fully qualified service name
host: "localhost" # Thrift server host
port: 8080 # Thrift server port
transport: "TFramedTransport" # Transport: TBufferedTransport, TFramedTransport
protocol: "TBinaryProtocol" # Protocol: TBinaryProtocol, TCompactProtocol, TJSONProtocol
connectTimeout: 5000 # Connection timeout in ms (default: 5000)
timeout: 10000 # Request timeout in ms (default: 10000)
# maxAttempts: 3 # Optional: enable thrift reconnect attempts (disabled by default)
# retryMaxDelay: 1000 # Optional: max reconnect delay in ms (only with maxAttempts)
scenarios:
- name: "Thrift Load Test"
engine: "thrift"
flow:
- thrift:
service: "YourServiceName"
method: "yourMethod"
args: [{ param1: "{{ $randomString() }}" }]
capture:
resultVar: "$.response.field"
match:
"$.status": "success"4. Run the Test
artillery run artillery-config.ymlConfiguration Options
Service Configuration
- module: Path to the generated Thrift service JavaScript file
- qName: Fully qualified service name (e.g.,
com.example.ServiceName) - host: Thrift server hostname or IP address
- port: Thrift server port number
- transport: Transport type (
TBufferedTransportorTFramedTransport) - protocol: Protocol type (
TBinaryProtocol,TCompactProtocol, orTJSONProtocol) - connectTimeout: Connection timeout in milliseconds (default: 5000)
- timeout: Request timeout in milliseconds (default: 10000)
- maxAttempts: Optional reconnect attempts (disabled by default). When set, the thrift library will retry the connection on failure. Note: the library prints
thrift: Couldn't get thrift connection...to the console when these attempts are exhausted, which is why retry is off by default for load testing. - retryMaxDelay: Maximum reconnect delay in milliseconds (only takes effect when
maxAttemptsis set)
Scenario Step Options
- service: Service name (must match the key in
engines.thrift.services) - method: Method name to call
- args: Array of arguments to pass to the method (supports Artillery template variables)
- capture: Capture response data to variables using JSONPath
- match: Validate response values using JSONPath
- continueOnError: Continue scenario execution on error (default: false)
Features
- ✅ Support for multiple Thrift services
- ✅ Connection pooling and client caching
- ✅ Automatic retry with configurable attempts
- ✅ Support for Artillery template variables in arguments
- ✅ Response data capture using JSONPath
- ✅ Response validation using JSONPath
- ✅ Custom metrics tracking
- ✅ Multiple transport and protocol options
Example
See the examples directory for complete working examples.
License
MPL-2.0
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
