# bombardier — Fast Cross-Platform HTTP Benchmarking Tool > A high-performance HTTP benchmarking utility written in Go that supports HTTP/1.x and HTTP/2, with detailed latency statistics and configurable load patterns. ## Install Save in your project root: # bombardier — Fast Cross-Platform HTTP Benchmarking Tool ## Quick Use ```bash # Install via Go go install github.com/codesenberg/bombardier@latest # Run 200 connections for 10 seconds bombardier -c 200 -d 10s http://localhost:8080 # Fixed number of requests bombardier -c 50 -n 10000 http://localhost:8080 ``` ## 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. ## Sources - https://github.com/codesenberg/bombardier - https://pkg.go.dev/github.com/codesenberg/bombardier --- Source: https://tokrepo.com/en/workflows/asset-ec6225f0 Author: AI Open Source