HTTP load testing, driven by YAML plans
Driller is a clean HTTP load-test drill. Describe a scenario as an Ansible-style YAML plan, run it from a single Rust binary, and read requests per second and latency percentiles per run. No fancy bits.
cargo install driller driller run http://localhost:9000/api/users --stats
What you get
- Plans as YAML. Requests, assertions, includes, tags, and loops over inline lists, ranges, or CSV rows, in a file you can review and version.
- Ad-hoc from the shell.
driller run <URL>needs no plan file, anddriller run -reads the target from standard input. - Request chaining. Assign a response to a variable and interpolate it into the next URL, header, or body.
- Assertions that fail CI. An
assertmismatch prints aFAILline and the run exits non-zero. - Stats you can script.
--stats-format jsonemits one JSON document with per-status counts and p99, p99.5, and p99.9 latencies. - Iterations or duration. Fix the iteration count, or loop the plan for
30s,5m, or1h. - Concurrency and ramp-up. Parallel iterations with a ramp-up window, and a selectable multi-thread runtime for large-body workloads.
- Compare runs.
--reportrecords every request of a run;--comparechecks a later run against it with a configurable threshold.
A plan in thirty seconds
---
concurrency: 4
base: 'http://localhost:9000'
iterations: 5
rampup: 2
plan:
- name: Fetch account
request:
url: /api/account
assign: account
- name: Fetch manager
request:
url: /api/users/{{ account.body.manager_id }}
- name: Assert status
assert:
key: account.status
value: 200
driller run --benchmark benchmark.yml --stats
Benchmark files written for the original drill run unchanged; see
Migrating from drill.