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 plot embeds every data point; a long high-rate run can exceed it. Use vegeta plot --threshold or attack in shorter windows for the published version.
  • Scripts run, sandboxed: allow-scripts, no allow-same-origin.
  • 60 requests/minute per token.

Try it

Comma is free — unlimited reports, unlimited commenters, unlimited revision history.

Create your first report →

Related