Demos & training

Watch loadr work.

Twenty-two short sessions, from your first test to flow control, feeders, distributed fleets, SQL load testing, runtime protocol plugins (including one written in Go), the time-series report and the live UI. Every clip is a real recording of the actual binary against a live server — what you see is what you get. Follow them in order as a getting-started course, or jump to the feature you need.

01

The quickstart 0:24

A complete load test in 20 lines of YAML: validate it, run it, read the summary.

  • the scenarios / flow / thresholds structure
  • loadr validate before you burn a test run
  • live progress, then the k6-style summary
  • checks, latency percentiles and green thresholds

Docs: Your first test

02

Validation that respects you 0:16

Broken test in, precise diagnostics out — before a single request is sent.

  • line & column on every finding
  • did-you-mean fixes for typos
  • executor parameter checks
  • undefined-variable detection

Docs: loadr validate

03

Data, extraction & JS in one flow 0:18

The correlation workflow every real test needs.

  • CSV rows feeding each login
  • JSONPath-extracted token replayed via ${token}
  • inline ${js: crypto.uuidv4()}
  • custom metrics with exact-count thresholds

Docs: Extraction · Data · JavaScript

04

Thresholds gate your CI 0:20

What failure looks like — and how it reaches your pipeline and your team.

  • an SLO the endpoint can't meet
  • red ✗ thresholds, exit=99
  • --summary-export for machines
  • loadr report HTML for humans

Docs: Thresholds · Exit codes

05

Escape JMeter. Import k6. 0:21

Bring your existing test estate with you.

  • a JMeter .jmx plan → clean YAML
  • warnings name exactly what to review
  • a k6 script with scenarios → same
  • converted output always validates

Docs: From JMeter · From k6

06

A distributed fleet, live 0:34

Controller, agents, exact partitioning and merged percentiles — in 30 seconds.

  • loadr controller + two joining agents
  • fleet health from the API
  • 400 iterations split exactly in two
  • HDR-merged, fleet-wide percentiles

Docs: Distributed testing · Metric aggregation

07

Flow control & weighted tasks 0:23

Loops, conditionals and weighted branches — Gatling's DSL and Locust's task model in YAML.

  • while loop: browse a random number of pages
  • weighted random: 70% browse / 25% cart / 5% checkout
  • repeat and if/else for retries
  • realistic user journeys, no scripting required

Docs: Flow control

08

Feeders & throttling 0:21

Random data feeders and a hard request-rate ceiling — Gatling's feeders and reachRps.

  • a random feeder picking SKUs
  • 20 VUs, but throttle caps the scenario at 30 req/s
  • the observed rate holds at the ceiling
  • stay under a known rate limit, on any executor

Docs: Feeders & throttling

09

The live web UI 0:42

A real browser session during a 30-VU run.

  • live RPS, VU and percentile charts (SSE)
  • threshold PASS pills updating in real time
  • run page with Stop / Kill / Pause controls
  • test editor, agents view, dark mode native

Docs: The management UI

10

The agent fleet, in the UI 0:37

A controller with three live agents, managed from the browser — the distributed run from #6, seen through the web UI.

  • the fleet view: three healthy agents, live
  • 30 VUs partitioned exactly 10 / 10 / 10
  • per-agent cores, labels and heartbeat
  • the overview shows centrally-merged percentiles

Docs: Controller & agents

11

The time-series HTML report 0:28

A ramp-to-spike run, charted over time — one self-contained HTML file, no servers, no CDN.

  • throughput, latency p50/p95/p99, VUs & error rate over time
  • a shared hover crosshair reads off every chart at once
  • the spike in load, mirrored in the latency curve
  • exact aggregate tables below — one file you can email

Docs: HTML reports

12

JMESPath & fused check-chains 0:09

Extract, coerce a type, transform and validate a value in one declarative step — Gatling's check chains, in YAML.

  • a jmespath filter + projection over the JSON body
  • as: int type coercion and a transform pipeline
  • an inline check that validates before saving
  • chains and classic extractors mixed in one request

Docs: Extraction & check-chains

13

Failure breakdown, by cause 0:30

A run that fails on purpose — 4xx/5xx, a failing check and a JS exception — grouped by cause in the UI, then exported to CSV from the browser.

  • failures grouped by HTTP status, transport error, check and exception
  • per-cause counts and share-of-total bars, live over SSE
  • normalised exception messages so the same bug groups together
  • one-click CSV / HTML report download, entirely in the browser

Docs: The management UI

14

Load-test SQL databases 0:20

Drive PostgreSQL and MySQL directly — the query is the request, against real databases.

  • postgres:// and mysql:// targets, one query per request
  • parameterised SELECT/INSERT, bound safely by the driver
  • per-VU connection pooling via sqlx
  • sql_req_duration, sql_rows metrics + thresholds

Docs: SQL (PostgreSQL & MySQL)

15

Install the MongoDB plugin 0:24

Install a runtime protocol plugin, then drive MongoDB directly — insert, find and aggregate against a real database.

  • loadr plugin install mongo — sha256-verified, ABI-checked
  • a mongodb:// request routes straight to the plugin
  • insert / find / aggregate operations, one per request
  • mongo_reqs, mongo_req_duration, mongo_docs metrics

Docs: MongoDB plugin · Plugins

16

Install the PostgreSQL plugin 0:24

Pull the PostgreSQL driver at runtime, then drive parameterised queries against a real database — the query is the request.

  • loadr plugin install postgres — driver loads at runtime
  • postgres:// targets, parameterised SELECT/INSERT
  • $1, $2 placeholders bound safely, pooled per VU via sqlx
  • postgres_reqs, postgres_req_duration, postgres_rows

Docs: PostgreSQL plugin · Plugins

17

Install the MySQL plugin 0:24

Install the MySQL driver on demand, then run a steady query workload against a real database over the wire protocol.

  • loadr plugin install mysql — never baked into the binary
  • mysql:// targets over the MySQL wire protocol
  • ? placeholders bound safely, pooled per VU via sqlx
  • mysql_reqs, mysql_req_duration, mysql_rows

Docs: MySQL plugin · Plugins

18

Install the Redis plugin 0:24

Install a runtime protocol plugin, then drive Redis directly over RESP — SET, GET and INCR against a real cache.

  • loadr plugin install redis — sha256-verified, ABI-checked
  • a redis:// request routes straight to the plugin
  • one RESP command per request — SET / GET / INCR
  • redis_reqs, redis_req_duration metrics

Docs: Redis plugin · Plugins

19

Install the Kafka plugin 0:24

Pull the Kafka driver at runtime, then produce and fetch messages against a real broker — a pure-Rust client, no librdkafka.

  • loadr plugin install kafka — pure-Rust rskafka client
  • kafka://broker:9092/topic — broker authority, topic path
  • produce and fetch operations, one per request
  • kafka_reqs, kafka_req_duration, kafka_msgs

Docs: Kafka plugin · Plugins

20

Install the RabbitMQ plugin 0:24

Install the AMQP driver on demand, then publish and drain a queue against a real RabbitMQ broker — the pure-Rust lapin client.

  • loadr plugin install rabbitmq — pure-Rust lapin client
  • amqp:// / amqps:// targets, AMQP 0.9.1
  • publish and get operations, queues declared inline
  • rabbitmq_reqs, rabbitmq_req_duration, rabbitmq_msgs

Docs: RabbitMQ plugin · Plugins

21

Install the Elasticsearch plugin 0:24

Pull the Elasticsearch driver at runtime, then index, bulk-load and search against a real cluster over HTTP/JSON.

  • loadr plugin install elasticsearch — over hyper + hyper-rustls
  • elasticsearch:// / es:// targets, plain HTTP/JSON
  • index / get / search / bulk operations, one per request
  • elasticsearch_reqs, elasticsearch_req_duration, elasticsearch_docs

Docs: Elasticsearch plugin · Plugins

22

Write a plugin in Go 0:34

loadr plugins aren't Rust-only. Build a protocol plugin in Go with go build -buildmode=c-shared, install it, and drive it with the real binary — loaded over loadr's frozen C ABI.

  • a Go shared library, not Rust — built with go build -buildmode=c-shared
  • exports four extern "C" symbols over loadr's frozen C ABI
  • serves the goecho:// scheme; the host auto-detects the C ABI at load
  • goecho_reqs — status 200 + body assertions pass, 0% failed

Docs: Plugins in other languages (C ABI) · source: go-echo

Ready to run it yourself?

Everything in these demos ships in the binary, and the repo includes 15 runnable examples covering every feature shown here — and the ones we didn't fit in.