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.
--inspectwith 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.