Skip to content

Executors

When you upload a script instead of using a scriptless builder, MaxoPerf runs it through one of many underlying load-testing and browser-automation tools. This page is the complete catalog of supported executors — every engine MaxoPerf can drive a test with.

MaxoPerf detects the executor from the file you upload — a .jmx is JMeter, a k6 .js/.ts is k6, a Taurus YAML’s executor: field names its own executor, and so on. You never pick the executor from a dropdown; upload the right file and MaxoPerf infers it, then validates the scenario against that executor’s rules.

📷 Screenshot to capture — tests-builders/engine-detection

What to show:MaxoPerf New test authoring page showing the detected engine badge above the scenario/files drop zone after a scenario file is uploaded

Scenario and files: MaxoPerf shows the detected executor as a badge once it recognizes the uploaded file — there is no manual executor picker.

The authoritative executor list is defined in packages/test-config/src/detect-taurus-executors.ts (SUPPORTED_TAURUS_EXECUTORS) and is the single source of truth for the database engine-kind enum, the Platform API DTOs, and this page. When MaxoPerf validates your upload, it checks the executor value against this same list.

ExecutorUnderlying toolEntrypoint file kindSupport levelNotes
taurusTaurus native HTTP runner.yaml / .yml (no executor: key, or executor: taurus)First-classThe default when no executor: is set. Handles HTTP requests directly — no separate engine required. Good for simple HTTP load with a single declarative YAML.
jmeterApache JMeter.jmx (referenced by scenarios.*.script) or direct .jmx uploadFirst-classThe most widely used executor. Upload your .jmx directly or reference it from a YAML. MaxoPerf validates JMX well-formedness and thread-group presence.
k6Grafana k6.js / .ts k6 scriptFirst-classFull k6 support via direct upload or a YAML reference. Your k6 script is the entrypoint.
seleniumSelenium WebDriver.py script or Selenium IDE .side fileFirst-classReal-browser tests — see Browser tests. Gets full video, step timeline, HAR, and console capture on Chrome/Chromium.
playwrightPlaywright.js / .ts Playwright scriptFirst-classReal-browser tests via Playwright. Distinguished from other JavaScript executors by content, not just extension. Same capture pipeline as Selenium tests — see Browser tests.
gatlingGatling (Scala).scala simulation fileSupportedPoint scenarios.*.script at a Gatling Scala simulation. Runs through the Gatling execution path; configure Gatling-specific settings in the YAML rather than a dedicated console UI.
locustLocust (Python)locustfile.py or any .py with from locust importSupportedManages Locust’s master/worker topology and metrics collection. Upload locustfile.py as a test asset and reference it from the YAML.
apiritifApiritif (Python HTTP client).py Apiritif scriptSupportedPython-native HTTP client framework with a recorder. Good for teams that prefer Python over YAML or JavaScript. Pure HTTP — not a browser executor.
wdioWebdriverIO.js / .ts WebdriverIO specSupportedBrowser automation via the WebdriverIO JavaScript API — similar coverage to Selenium, without the dedicated capture pipeline.
robotRobot Framework.robot keyword-driven testSupportedRuns Robot Framework keyword-driven tests as load. Good for teams already invested in Robot Framework.
siegeSiegeURL-list file or inline URLsSupportedSimple multi-threaded HTTP benchmarking. Effective for quick URL-list hammering; limited scenario expressiveness compared to JMeter or k6.
abApache Benchmark (ab)No file — URLs specified inline in the YAMLSupportedThe classic HTTP microbenchmark. Good for single-endpoint baseline measurements; not suited to multi-step flows.
vegetaVegeta (Go).txt URL-list or inline targetsSupportedHigh-performance HTTP load generator with constant-rate (rate:) attacks — better rate control than ab for sustained throughput tests.
tsungTsung (Erlang)Tsung XML configSupportedDistributed load testing for HTTP, WebSocket, XMPP, and more. Complex setup; use when you need Erlang-based distributed load or XMPP protocol support.
molotovMolotov (Python asyncio).py Molotov scenarioSupportedAsync Python load-testing library. Scenarios are Python functions decorated with @scenario.
grinderThe Grinder.py Grinder script (Jython)SupportedJava-based framework with Jython scripting. Legacy tool; prefer JMeter or k6 for new work.
junitJUnit (Java)Maven pom.xml or JARSupportedRuns Java JUnit load tests. Requires a Maven project structure; better suited to teams with existing JUnit performance tests.
testngTestNG (Java)Maven pom.xml or JARSupportedLike junit, using the TestNG framework. Same considerations apply.
mochaMocha (Node.js).js Mocha test fileSupportedRuns Node.js Mocha tests as load. Prefer k6 for new JavaScript load tests.
pbenchPbench-fio / Pbench toolsPbench configSupportedPerformance benchmarking suite from Red Hat. Niche use case — use when you specifically need Pbench’s tooling.
scalableScalable (internal)YAMLSupportedAn internal executor for distributed load-generation scenarios. Rarely needed — MaxoPerf handles distribution at the runner-fleet level.
externalExternal processAny commandSupportedRuns an arbitrary external process as the load generator. MaxoPerf validates that the command: key is set. Use only when no other executor fits.

Most new MaxoPerf tests should use one of the first-class executors:

  • taurus (native) — a single declarative YAML with no external tooling.
  • jmeter — for teams with existing JMX files, or who need JMeter’s plugin ecosystem.
  • k6 — for teams that prefer JavaScript and want fast iteration on API load tests.
  • selenium / playwright — for browser tests, see Browser tests.

The remaining supported executors work well but receive less specialized console tooling. If you hit a problem with one of them, MaxoPerf support can help.

execution:
- executor: locust # must be one of the executors listed above
concurrency: 20
hold-for: 5m
scenario: locust-scenario
scenarios:
locust-scenario:
script: locustfile.py # must be uploaded as a Test asset