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
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 --quietOptions
| Flag / field | What it does |
|---|---|
| -b, --benchmark <file> | YAML benchmark plan to run |
| --stats | Print aggregate timing statistics |
| --quiet | Reduce per-request output |
| iterations / concurrency | Load settings in the YAML |
| plan[].request | A 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.