Skip to content
Latchkey

drill: YAML-Driven HTTP Load Testing

drill --benchmark <file.yml> runs a YAML-defined load plan of HTTP requests with configurable concurrency and iterations.

drill describes a load test as a YAML plan (base URL, iterations, concurrency, and a list of requests), which keeps multi-step scenarios in version control rather than long command lines.

What it does

drill reads a benchmark YAML that defines global settings (base, iterations, concurrency) and an ordered plan of requests, then executes them and reports timing. --stats adds aggregate statistics, and --quiet trims per-request output. It can chain requests using captured values.

Common usage

Terminal
drill --benchmark benchmark.yml --stats
# a minimal benchmark.yml
# ---
# base: 'https://staging.example.com'
# iterations: 1000
# concurrency: 50
# plan:
#   - name: home
#     request:
#       url: /
drill --benchmark benchmark.yml --quiet

Options

Flag / fieldWhat it does
-b, --benchmark <file>YAML benchmark plan to run
--statsPrint aggregate timing statistics
--quietReduce per-request output
iterations / concurrencyLoad settings in the YAML
plan[].requestA request step (url, method, body)
--timeout <s>Per-request timeout

In CI

Keep benchmark.yml in the repo so the load scenario is reviewed like code. drill returns a non-zero exit when requests fail, so a step that runs drill --benchmark already gates on connectivity; add assertions in the plan for status-code expectations.

Common errors in CI

"Error: benchmark file not found" means the --benchmark path is wrong relative to the working directory. A YAML parse error like "invalid type: string, expected a sequence for key plan" means the plan is not a list. "error sending request ... connection refused" means the base host is unreachable from the runner.

Related guides

Run this faster and cheaper on Latchkey managed runners. Start free →