Share a Vegeta load test
Vegeta's plot is the useful artifact of a load test, because latency is a shape rather than a number. The p99 was 840 ms tells you almost nothing. The p99 was flat for ninety seconds and then stepped up and stayed there tells you exactly where to look.
vegeta plot renders that shape as one interactive HTML file. Then it
goes into a terminal redirect on someone's laptop.
Publish it
vegeta attack -targets targets.txt -rate 200 -duration 120s \
> results.bin
vegeta plot results.bin > plot.html
curl -fsS -X PATCH \
"https://commareports.com/api/v1/reports/$COMMA_REPORT_ID" \
-H "Authorization: Bearer $COMMA_API_TOKEN" \
-H "Content-Type: application/json" \
-d "$(jq -n --rawfile html plot.html \
--arg title "Load — checkout — 200 rps — $(date +%F)" \
'{title: $title, html: $html}')"
Or drag plot.html into the app.
One report id per scenario — checkout at 200 rps is a different thing
from search at 1000 rps and deserves its own history. PATCH appends a
revision per run, which is what makes "did the pool change help" a
question the URL answers.
Worth adding: pipe vegeta report into a small HTML page above the plot,
so the percentile table and the shape arrive together.
What the URL changes
- The spike gets a note. "This is the cache warming, ignore the first 20s" pinned to the region of the chart. See commenting on HTML.
- Run-to-run comparison. Revisions at one URL. See revisions and diffs.
- Capacity conversations get an artifact. Rather than a screenshot in a doc that nobody can zoom into.
- Private by default — see the sharing model.
Limits
- HTML body: 5 MB.
vegeta plotembeds every data point; a long high-rate run can exceed it. Usevegeta plot --thresholdor attack in shorter windows for the published version. - Scripts run, sandboxed:
allow-scripts, noallow-same-origin. - 60 requests/minute per token.
Try it
Comma is free — unlimited reports, unlimited commenters, unlimited revision history.