Web Dev Tools

Load Testing & Benchmarking

Stress-testing APIs and benchmarking individual functions.

Load / stress testing (APIs and apps)

  • Grafana k6 — JS-scripted load tests; runs as a single binary; cloud option for distributed runs. The default in 2026.
  • Artillery — JS-config load tests; great for HTTP, WebSocket, Socket.io. Hosted reporting available.
  • Autocannon — fastest "give me a quick number" Node HTTP benchmarker. CLI + library.
  • Vegeta — Go-based, simple, great for sustained constant load.
  • wrk / wrk2 — venerable C HTTP benchmarkers.
  • Locust — Python-based; nice for complex scenarios.
  • JMeter — Java; massive feature surface; old-school.
  • Gatling — Scala; great for big-load realistic-scenario tests.

Browser / real-user-simulating

  • Playwright — repurpose your E2E tests for soak runs.
  • Sitespeed.io — synthetic browser monitoring with real Chromium.
  • WebPageTest — single-page deep performance reports; free public instance.

Function-level micro-benchmarks

  • Mitata — fastest TS micro-benchmarker; produces reliable numbers.
  • Tinybench — Vitest-friendly benchmark library.
  • benchmark.js — older, ubiquitous.
  • hyperfine (CLI) — for benchmarking shell commands.
  • isolated-vm — Node module for sandboxed comparison runs.

Database load testing

  • pgbench — Postgres built-in.
  • HammerDB — multi-DB stress.
  • sysbench — Linux benchmark suite.
  • YCSB — distributed DB benchmarks.

Profiling production performance

  • Clinic.js (Doctor / BubbleProf / Flame) — Node profiling toolkit.
  • 0x — flame graphs for Node.
  • --inspect with Chrome DevTools — built-in profiling.
  • Speedscope — beautiful flame graph viewer.
  • See also Observability for production traces.

CI integration

  • k6 Action for GitHub Actions — run k6 in CI on every PR.
  • Artillery Cloud — store results, diff over time.
  • Lighthouse CI — for browser performance budgets in CI.
  • Foundry — newer, GitHub-native perf budgets.

Patterns to know

  • Spike, soak, stress, capacity — different test shapes; k6 / Artillery support all.
  • Think time — between requests; matters for realism.
  • Steady-state baseline — always run the same baseline; compare changes against it.
  • Don't load-test prod without a heads-up — coordinate with infra and your CDN provider.
  • Bench in the same env multiple times — variance kills small claims.

Pick this if…

  • Default API load test: k6.
  • WebSocket-heavy: Artillery.
  • One-off "is this fast?": Autocannon.
  • Function micro-bench: Mitata or Tinybench.
  • Browser perf budgets in CI: Lighthouse CI.
  • Profile a slow Node service: Clinic.js Flame.

On this page