Awesome
Load Testing Toolkit
“I have enough trouble with useful information, never mind being burdened with what is useless.”
― Erlend Loe, Naïve. Super
Collection of open-source tools for debugging, benchmarking, load and stress testing your code or services.
NOTE: Unfortunately I've found this original awesome collection too late: awesome-http-benchmark.
Feel free to follow and contribute to it instead of this collection, which remains my personal variation and working copy.
In alphabetical order.
Contents
- Debugging & API testing
- Benchmarking & load testing
- DoS/DDoS penetration testing
- Traffic replay
- Latency simulation
Debugging & API testing
- baloo - Expressive and versatile end-to-end HTTP API testing made easy in
Go
. - bat - A curl-like tool for humans, inspired by httpie, written in
Go
. - curl - A command line tool and library for transferring data with URL syntax.
C
- curlie - The power of curl, the ease of use of httpie.
Go
- curlx - Supercharge curl with history, collections and more.
JavaScript
- hitt - File based HTTP testing tool focused on speed and simplicity.
Rust
- hopp-cli - An HTTP CLI client for hoppscotch, an alternative to curl, httpie.
Go
- httpcat - A simple utility for constructing raw HTTP requests on the command line.
Python
- httpie - Modern command line HTTP client, user-friendly curl alternative with intuitive UI, JSON support, syntax highlighting, wget-like downloads, extensions, etc.
Python
- httpie-go - httpie-like HTTP client written in
Go
. - httping - A ping-like utility for HTTP requests.
C
- httpstat - curl statistics visualization in a way of beauty and clarity.
Python
- hurl - A command line tool to perform HTTP requests defined in a simple plain text format.
Rust
- wuzz - Interactive command line tool for HTTP inspection.
Go
- xh – Yet another httpie clone in
Rust
.
Benchmarking & load testing
http/s
- ab - ApacheBench, single-threaded Apache HTTP server benchmarking tool.
C
- ali - A load testing tool capable of performing real-time analysis, inspired by vegeta, written in
Go
. - apachebench-ab - Standalone version of ab, Apache HTTP server benchmarking tool.
C
- apib - A simple, fast HTTP and API benchmarking tool.
C++
- autocannon - Fast HTTP/1.1 benchmarking tool written in
Node.js
, greatly inspired by wrk and wrk2, with support for HTTP pipelining and HTTPS. - ballast - A simple API load testing tool to compare performance snapshots of your API.
Rust
- baton - HTTP load testing written in
Go
. - beast - Stress testing for RESTful APIs.
Go
- beeswithmachineguns - An utility for arming (creating) many bees (micro EC2 instances) to attack (load test) targets (web applications).
Python
- benchttp - HTTP server benchmarking tool, implements the most commonly used features of ab.
Go
- bender - An easy-to-use library for creating load testing applications.
Go
- bfg - A modular tool and framework for load generation with HTTP/2 support.
Python
- blast - A simple, protocol agnostic tool for API load testing and batch jobs.
Go
- bombardier - Fast cross-platform HTTP benchmarking tool written in
Go
. - boom - A replacement for ab, written in
Python
. - carrot - Distributed WebSocket and HTTP load testing framework in
Go
. - cassowary - Modern cross-platform HTTP load testing tool written in
Go
. - chaperon - HTTP service performance & load testing framework.
Elixir
- clobbr - A tool to check the speed and resilience of API endpoints against multiple parallel or sequence requests.
JavaScript
- curl-loader - A load generating tool written in
C
, simulating HTTP/S, FTP/S and TLS/SSL clients each with own IP-address. - drill - A HTTP load testing application, written in
Rust
, inspired by Ansible syntax. - encarno - Load generator for HTTP with high throughput and high precision.
Go
- f1 - A flexible load testing framework using
Go
for test scenarios. - fasthttploader - HTTP benchmark (kinda ab) with autoadjustment and charts based on fasthttp library.
Go
- fbender - A load testing command line tool for generic network protocols, originally based on bender library.
Go
- fortio - Load testing library, command line tool, advanced echo server and web UI in
Go
. - freeloader - Super easy load testing framework, with load scenarios in
JavaScript
. - go-meter - A HTTP benchmark tool written in
Go
. - go-wrk - A small heavy duty HTTP/S benchmark tool, similar to wrk, but written in
Go
. - goad - An AWS Lambda powered, highly distributed, load testing tool.
Go
- gobench - HTTP/S load testing and benchmarking tool.
Go
- gocannon - A lightweight HTTP benchmarking tool, intended to measure changes in backend application performance over time.
Go
- gohttpbench - An ab-like benchmark tool run on multi-core cpu.
Go
- goku - HTTP load testing application written in
Rust
. - goku-bench - An HTTP load testing tool built out of a need to drill HTTP services inspired by drill and vegeta.
Rust
- goose - A
Rust
load testing tool inspired by locust. - gopayloader - HTTP/S benchmark/load testing cross-platform tool with optional JWT generation, inspired by bombardier.
Go
- goperf -
Go
based load tester with a simple intuitive command line syntax. - hargo -
Go
library and command line utility that parses HAR files, can convert to curl format, and serve as a load test driver. - hey - HTTP load generator, ab replacement.
Go
- htstress - Fast HTTP benchmarking tool, similar to ab but provides multithreading support.
C
- http_bench - An HTTP(/1/2/3) and WebSockets stress testing tool, with both single and distributed modes.
Go
- httperf - A tool for measuring web server performance.
C
- httpit - A rapid HTTP/S benchmark tool, written in
Go
. - httpress - High performance HTTP server stress & benchmark utility, inspired by weighttp.
C
- hulken - Stress testing tool for everything speaking HTTP.
JavaScript
- hurl - HTTP server load test and parallel curl utilities.
C++
- iago2 - A load generator, built for engineers.
Scala
- jbender - A port of bender to the JVM platform with Quasar lightweight threads (fibers) and channels.
Java
- jetty-load-generator - An API for load testing HTTP servers, based on Jetty's HttpClient and
Java
11+. - legion - A
JavaScript
-based load testing tool for HTTP servers and other kinds of software. - loadtest - A
JavaScript
package for load testing with HTTP/S and WebSockets support and API for easy integration. - loadtesttoolbox - Lightweight tools for load testing web applications, written in
C#
. - mgun - A modern tool for load testing HTTP servers, written in
Go
. - minigun - Simple Kubernetes native HTTP benchmark tool, written in
Go
. - molotov - Simple
Python
3.7+ tool to write load tests. - nbomber - Very simple load testing framework for Pull and Push scenarios, written in
F#
and targeting .NET Core and full .NET Framework. - netling - Load testing client for easy web testing.
C#
- node-ab - A command line tool to test the performance of HTTP services.
Node.js
- node-vegeta -
Node.js
bindings for the vegeta load testing library. - oha - HTTP load generator, inspired by hey with tui animation.
Rust
- pandora - A load generator in
Go
, with built-in HTTP/S and HTTP/2 support and load scenarios inGo
. - pewpew - Flexible HTTP command line stress tester for websites and web services.
Go
- plow - A high-performance HTTP benchmarking tool with real-time web UI and terminal displaying.
Go
- ponos - Simple yet powerful load generator written in
Erlang
. - pounce – HTTP benchmark utility, written in
C
. - pronk - A small command line application for load testing web servers.
Haskell
- reqstress - A benchmarking & stressing tool that can send raw HTTP requests, written in
Go
. - rewrk - A modern HTTP framework benchmarking utility supporting HTTP/1 and HTTP/2 benchmarks.
Rust
- salvo - Like boom, but based on molotov.
Python
- sb - SuperBenchmarker, ApacheBench (ab) on steroids.
C#
- siege - A HTTP load tester and benchmarking utility.
C
- slapper - Simple load testing tool with real-time updated histogram of request timings.
Go
- slow_cooker - A load tester focused on lifecycle issues and long-running tests.
Go
- sniper - Powerful and high-performance HTTP load tester, written in
Go
. - stress - Simple
Node.js
tool for stress testing HTTP services. - terjang - Scalable HTTP load testing tool built on vegeta.
Go
- thrash -
Go
HTTP micro benchmarker. - vegeta - HTTP load testing tool and library.
Go
- vex - A small
PHP
app that sends some load to a web application. - weighttp - A lightweight and simple webserver benchmarking tool.
C
- welle - An ab-like benchmarking tool written in
Rust
. - wrk - Modern HTTP benchmarking tool.
C
- wrk2 - A constant throughput, correct latency recording variant of wrk.
C
non-http/s
- amoc - A simple framework for running massively parallel XMPP tests in a distributed environment.
Erlang
- bench - A generic latency benchmarking library.
Go
- bomberman - SMTP performance and load testing tool.
Go
- dhammer - DHCP stress tester and benchmark tool.
Go
- massive-attack - Load testing Thrift, made simple.
Scala
- rpc-perf - A tool for benchmarking RPC services.
Rust
- rtmp_load - A load testing tool for RTMP servers.
C
- srs-bench - A HTTP/RTMP/HLS load testing and benchmarking tool.
C++
- ssh-hammer - A SSH load testing tool.
Go
- tcpkali - Fast multi-core TCP and WebSockets load generator.
C
dns
- dnsblast - A DNS performance testing utility.
Go
- dnsblast - A simple and stupid load testing tool for DNS resolvers.
C
- dnsmeter - A tool for testing performance of nameservers and the infrastructure around it.
C++
- dnsperf - DNS performance testing tools.
C
- dnstress - A DNS stress testing tool.
C
- flamethrower - A DNS performance and functional testing utility, originally built as an alternative to dnsperf.
C++
grpc
- ghz - Simple gRPC benchmarking and load testing tool.
Go
- strest-grpc - A load tester for stress testing gRPC intermediaries.
Go
kafka
- kafka-stress - CLI tool to stress Apache Kafka clusters.
Go
- sangrenel - Apache Kafka load testing.
Go
mq
- emqtt-bench - A simple MQTT v5.0 benchmark tool written in
Erlang
. - flotilla - Automated message queue orchestration for scaled-up benchmarking.
Go
- mqperf - A benchmark of message queues with data replication and at-least-once delivery guarantees.
Scala
- mqtt-benchmark - A simple MQTT (broker) benchmarking tool.
Go
- mqtt-stresser - Load testing tool to stress MQTT message broker.
Go
- mqttloader - Load testing tool for MQTT, capable of benchmark test for both MQTT v5.0 and v3.1.1 brokers.
Java
- mqttwrk - A wrk/wrk2-inspired tool for scale and performance testing MQTT brokers.
Rust
- rabbitmq-perf-test - RabbitMQ performance testing tool.
Java
multi-protocol
- artillery - A modern load and functional testing toolkit written in
Node.js
, with test scenario scripting inJavaScript
. - ddosify - High-performance load testing and DDOS attack simulation tool, written in
Go
. - gatling - A load and performance testing framework based on
Scala
, Akka and Netty. - grinder - A distributed load testing framework written in
Java
, with test scenario scripting inJython
andClojure
. - jagger - An open-source framework for Continuous Performance Testing written in
Java
. - jmeter - A
Java
tool designed to load test functional behavior and measure performance of a variety of services, with a focus on web applications. - k6 - A modern load testing tool, using
Go
andJavaScript
. - locust - Scalable distributed load testing tool written in
Python
. - multi-mechanize - Performance and load testing framework written in
Python
. - mzbench - Expressive, scalable load testing tool, with multiple protocols support.
Erlang
- ngrinder - Enterprise level performance testing solution based on The Grinder.
Java
- predator - A distributed open-source platform for load testing APIs using custom version of artillery as load testing engine.
Node.js
- tank - A cloud native load testing platform.
Java
- tsung - A multi-protocol distributed load testing tool, developed in
Erlang
. - yandex-tank - An extendable load testing tool which is especially good as a part of an automated load testing suite.
Python
,C
nosql
- memtier_benchmark - A high-throughput benchmarking tool for Redis & Memcached.
C++
- redisbench - Redis & Redis cluster benchmarking tool.
Go
storage
data store
- go-ycsb - A Go port of Yahoo! Cloud Serving Benchmark (YCSB).
Go
- ndbench - Netflix Data Store Benchmark, a pluggable cloud-enabled benchmarking tool that can be used across any data store system.
Java
- ycsb - Yahoo! Cloud Serving Benchmark (YCSB), a framework and common set of workloads for evaluating the performance of different "key-value" and "cloud" serving stores.
Java
io
- diskspd - A storage performance testing tool from the Windows, Windows Server and Cloud Server Infrastructure engineering teams at Microsoft.
C++
- fio - Flexible I/O tester.
C
- ioarena - Embedded storage benchmarking tool.
C
object storage
- cosbench - A benchmark tool for cloud object storage service.
Java
- gosbench - Distributed S3 performance benchmark tool with Prometheus exporter,
Go
reimplementation of cosbench. - mongoose - Distributed storage performance testing tool.
Java
- os-benchmark - Handy tool for object storage performance benchmarking.
Python
- ostorebench - A benchmark tool for distributed object storage systems.
Go
- s3-benchmark - S3 benchmarking tool.
Go
- warp - S3 benchmarking tool.
Go
time-series
- prometheus-benchmark - Benchmark for Prometheus-compatible systems on production-like workload.
Go
- tsbs - Time Series Benchmark Suite, a tool for comparing and evaluating databases for time series data.
Go
k8s
- k8s-bench-suite - Simple scripts to benchmark Kubernetes cluster features.
Shell
- k8s-netperf - Running networking performance tests against Kubernetes.
Go
- k-bench - Workload benchmark for Kubernetes.
Go
- kboom - The Kubernetes scale & soak load tester, equivalent of boom, written in
Go
. - kube-burner - A tool aimed at stressing Kubernetes clusters by creating or deleting a high quantity of objects.
Go
- kubestr - A collection of tools to discover, validate and evaluate Kubernetes storage options.
Go
- perf-tests - Kubernetes-related performance testing tools and benchmarks.
Go
graphql
- easygraphql-load-tester - A
Node.js
library created to make load testing on GraphQL based on the schema. - graphql-bench - A versatile tool for benchmarking and load testing GraphQL services, as a CLI application or via programmatic API.
TSQL
blockchain
- caliper - A blockchain benchmark framework to measure performance of multiple blockchain solutions.
JavaScript
- gohammer - A blockchain test tool designed to get performance metrics of the nodes and operation system by deploying a smart contract and calling smart contract's methods.
Go
DoS/DDoS penetration testing
For educational and security/stress testing (as part of development) purposes only.
- finshir - A coroutines-driven Low & Slow traffic sender, written in
Rust
. - golden-eye - HTTP DoS test tool using HTTP Keep Alive + NoCache as attack vector.
Python
- goloris - Slowloris implementation for nginx DoS written in
Go
. - hulk - Original HULK web server DoS attack tool ported to
Go
with some additional features. - hulk-v3 -
Python
3 compatible async HULK script for DDoS attacks. - lor-axe - A multi-threaded, low-bandwidth HTTP DoS tool, written in
Rust
. - rip - An HTTP load testing and UDP flood attack tool.
Go
- slowhttptest - A highly configurable application layer DoS attack simulator.
C++
- slowloris - Low bandwidth DoS tool, rewrite in
Python
. - wreckuests - Yet another one hard-hitting tool to run DDoS attacks with HTTP-flood.
Python
Traffic replay
- goreplay - A network monitoring tool which can record live traffic, and use it for shadowing, load testing, monitoring and detailed analysis.
Go
- ripley - HTTP traffic replay tool at multiples of the original rate.
Go
- shadowreader - Serverless load testing tool for replaying website traffic by collecting traffic patterns from access logs, powered by AWS Lambda, S3 and ELB.
Python
- tcpcopy - A TCP stream replay tool to support real testing of server applications.
C
Latency simulation
- clumsy - Makes your network condition on Windows significantly worse, but in a controlled and interactive manner.
C
- comcast - A tool designed to simulate common network problems like latency, bandwidth restrictions, and dropped/reordered/corrupted packets.
Go
- speedbump - A TCP proxy for simulating variable, yet predictable network latency.
Go
- toxiproxy - A TCP proxy to simulate network and system conditions for chaos and resiliency testing.
Go
Contribute
Contributions are welcome!
Read the CONTRIBUTING guidelines first.