Introduction
bombardier is a fast cross-platform HTTP benchmarking tool written in Go. It saturates a target URL with configurable concurrency and duration, then reports throughput, latency percentiles, and error rates in a clean terminal output.
What bombardier Does
- Generates high-concurrency HTTP load with minimal client-side overhead
- Supports both duration-based and request-count-based benchmarks
- Reports latency percentiles (p50, p75, p90, p95, p99) and average RPS
- Handles HTTP/1.1 and HTTP/2 connections
- Prints a real-time progress bar with live throughput during the test
Architecture Overview
bombardier spawns a pool of goroutines, each maintaining a persistent HTTP connection to the target. It uses Go's built-in net/http client with configurable timeouts and TLS settings. Each goroutine fires requests in a tight loop, recording latency in a lock-free histogram. At the end of the run, the main routine aggregates the histogram into percentile statistics and computes throughput.
Self-Hosting & Configuration
- Install via go install, Homebrew, or download static binaries from GitHub releases
- Set concurrency with -c and duration with -d (e.g., -c 100 -d 30s)
- Add custom headers with -H and set the HTTP method with -m (GET, POST, PUT, etc.)
- Supply a request body with -b for POST/PUT benchmarks
- Use --http2 to force HTTP/2 connections
Key Features
- Single static binary with no runtime dependencies
- Real-time throughput and latency display during benchmarks
- Detailed percentile latency distribution in the final report
- Cross-platform: runs on Linux, macOS, and Windows
- Low resource footprint on the client side even at high concurrency
Comparison with Similar Tools
- wrk — C-based benchmarker with Lua scripting; bombardier is simpler to install and cross-platform
- hey — similar Go-based tool; bombardier adds a real-time progress bar and HTTP/2 support
- ab (Apache Bench) — classic but single-threaded; bombardier uses goroutines for higher throughput
- vegeta — constant-rate load testing with rich reporting; bombardier focuses on max-throughput saturation
- k6 — full load-testing framework with scripting; bombardier is a lightweight single-command tool
FAQ
Q: What is the difference between -d and -n modes? A: -d runs for a fixed duration (e.g., 30s), while -n sends an exact number of requests regardless of time.
Q: Does bombardier support HTTPS? A: Yes. It handles TLS automatically. Use -k to skip certificate verification for self-signed certs.
Q: Can I send POST requests with a body? A: Yes. Use -m POST -b '{"key":"value"}' -H "Content-Type: application/json" to benchmark POST endpoints.
Q: How does it compare to wrk for raw throughput? A: wrk can achieve slightly higher RPS due to C and epoll, but bombardier is within the same order of magnitude and far easier to build and distribute.