perf-migrator
import { Aside } from ‘@astrojs/starlight/components’;
perf-migrator converts performance test scripts between JMeter, k6, and Gatling — all 6 directions. Built in Rust for speed and correctness. 87% success rate on 115 real-world scripts with zero lint errors on output.
| Tier | Directions | Price |
|---|---|---|
| Single Direction | One direction (e.g., JMeter → k6) | £79 one-time |
| Bidirectional | All 6 directions | £149 one-time |
Platforms: Linux x86_64, Windows x86_64
Installation
Section titled “Installation”# Linuxchmod +x perf-migratorsudo mv perf-migrator /usr/local/bin/perf-migrator --version
# Windows: add perf-migrator.exe to PATHLicense Activation
Section titled “License Activation”export PERF_MIGRATOR_LICENSE=your-license-key# or pass on each invocation:perf-migrator --license your-key jmx2k6 test.jmx -o test.jsShorthand Commands
Section titled “Shorthand Commands”The fastest way to convert:
perf-migrator jmx2k6 test.jmx -o test.jsperf-migrator jmx2gatling test.jmx -o src/test/scala/Test.scalaperf-migrator k62jmx script.js -o test.jmxperf-migrator k62gatling script.js -o src/test/scala/Test.scalaperf-migrator gatling2jmx Simulation.scala -o test.jmxperf-migrator gatling2k6 Simulation.scala -o test.jsFull Convert Command
Section titled “Full Convert Command”For explicit format specification:
perf-migrator convert \ --from jmeter \ --to k6 \ input.jmx \ -o output.jsFormats: jmeter, k6, gatling
Options
Section titled “Options”| Flag | Description |
|---|---|
-o, --output <file> | Output file path (required) |
--report <file> | Write JSON conversion report |
--html-report <file> | Write HTML conversion report |
--no-report | Suppress all report output |
--progress | Show element-level conversion progress |
--verbose | Debug output |
--no-secrets-scan | Skip secrets detection in source script |
--batch | Batch mode: convert all matching files in a directory |
--license <key> | License key (or use PERF_MIGRATOR_LICENSE env var) |
Conversion Report
Section titled “Conversion Report”By default, a JSON report is printed to stdout summarising the conversion:
{ "status": "partial", "successRate": 0.91, "elements": { "converted": 43, "skipped": 4, "failed": 0 }, "skippedElements": [ {"type": "BSFSampler", "reason": "BSF scripting not supported in target"}, {"type": "JDBCSampler", "reason": "Database samplers require manual wiring"} ]}Status values: success (100% converted), partial (some elements skipped), failed (conversion aborted).
HTML report (--html-report): visual breakdown with per-element details.
Feature Support Matrix
Section titled “Feature Support Matrix”| Feature | JMeter→k6 | JMeter→Gatling | k6→JMeter | k6→Gatling | Gatling→JMeter | Gatling→k6 |
|---|---|---|---|---|---|---|
| HTTP requests | Full | Full | Full | Full | Full | Full |
| Request headers | Full | Full | Full | Full | Full | Full |
| Response assertions | Full | Full | Full | Full | Full | Full |
| Regex extractors | Full | Full | Full | Partial | Full | Full |
| JSON extractors | Full | Full | Full | Full | Full | Full |
| CSV data feed | Full | Full | Full | Full | Full | Full |
| Think times | Full | Full | Full | Full | Full | Full |
| Load profile | Full | Partial | Full | Full | Full | Full |
| Groups/transactions | Full | Full | Full | Full | Full | Full |
| Conditional logic | Partial | Partial | Partial | Partial | Partial | Partial |
| Auth (Basic/Bearer) | Full | Full | Full | Full | Full | Full |
| gRPC | Partial | — | — | — | — | Partial |
Secrets Detection
Section titled “Secrets Detection”perf-migrator scans source scripts for hardcoded secrets (API keys, passwords, Bearer tokens) before conversion. Detected secrets are reported with line numbers.
WARNING: Potential secret detected in test.jmx: line 45: Authorization header contains what appears to be a Bearer token → Replace with a variable before committing to version controlDisable with --no-secrets-scan if you’ve already handled secrets.
Batch Mode
Section titled “Batch Mode”Convert all scripts in a directory:
perf-migrator jmx2k6 tests/jmeter/ --batch -o tests/k6/Output files are named <input-name>.converted.js.
Post-Conversion Linting
Section titled “Post-Conversion Linting”Output scripts pass perf-lint with zero errors. For additional validation:
perf-migrator jmx2k6 test.jmx -o test.js && perf-lint check test.jsWith perf-ecosystem.yml configured (integrations.migrator_validate: true), perf-migrator auto-lints output and includes lint results in the conversion report.
Common Conversion Patterns
Section titled “Common Conversion Patterns”JMeter CSV Data Set → k6 SharedArray
Section titled “JMeter CSV Data Set → k6 SharedArray”JMeter’s CSV Data Set Config becomes a k6 SharedArray:
// Generated outputimport { SharedArray } from 'k6/data';const users = new SharedArray('users', function() { return JSON.parse(open('./users.csv'));});JMeter Thread Group → k6 Options
Section titled “JMeter Thread Group → k6 Options”// Generated from JMeter thread group: 50 users, ramp 60s, duration 300sexport const options = { stages: [ { duration: '60s', target: 50 }, { duration: '300s', target: 50 }, { duration: '30s', target: 0 }, ],};