hb is an endpoint focused HTTP load testing / benchmark tool.

Related tags

Testing hb
Overview

hb

hb is an endpoint focused HTTP load testing / benchmark tool.

Description

The goal of hb is to provide a simple, robust tool to apply load against an endpoint (or set of endpoints). For example, it could replay load against a web-server, or evaluate the performance of REST APIs. It does not attempt to model workflows or user journeys.

It is similar to many other tools such as:

Features

hb supports the following features:

  • a large number (millions) of URLs (i.e. can test multiple endpoints or resources)
  • variable load concurrency (i.e. N worker threads)
  • variable request rate (N/unit of time) with optional distribution (uniform, constant, negative exponential)
  • reports latency based on percentiles
  • tracks the slowest N percentile of requests, and dumps a report after the run

Future features include:

  • ability to replay from a load-balancer log file at a time scaling multiple (link)
  • track delays due to coordinated omission (link)

Why?

Why another load testing tool? In my experience, while excellent, the above tools have various problems:

  • ApacheBench reports are extremely useful, but it has a limited feature set (e.g. only a single URL or request)
  • siege supports multiple requests (e.g. calls to various REST services behind an LB), but appears to crash with large volumes of URLs or concurrent requests
  • wrk has a good mix of features but suffers from coordinated omission
  • wrk2 is a fantastic improvement on wrk, but has limited load generation mechanisms such as negative exponential delays

A new tool also provides an opportunity to use a modern language (Rust) to support multiple platforms easily, whilst maintaining security, reliability and performance.

Getting Started

Building

At the moment the only platform supported is Linux. Future releases will include pre-built artifacts for MacOS and Windows.

Linux, static build, x86_64

This uses a Docker container to build a statically linked binary that can be run on any reasonable x86_64 environment.

alias rust-musl-builder='docker run --rm -it -v "$(pwd)":/home/rust/src ekidd/rust-musl-builder'
rust-musl-builder cargo build --release

Compiling locally

To compile it locally you'll need following dependencies

  • pkg-config
  • libssl-dev

On a clean Ubuntu 20.04 system, they can be installed by running

sudo apt install pkg-config libssl-dev

Running

Execute ./hb -h to view usage.

License

This project is licensed under the MIT license.

Acknowledgments

My gratitude to my employer SEEK who provided time and hardware to build the initial version of this tool, and an environment where we can engage in interesting work and tackle cool problems.

You might also like...
Simple goldenfile testing in Rust.

👑 Rust Goldenfile Simple goldenfile testing in Rust. Goldenfile tests generate one or more output files as they run. At the end of the test, the gene

Declarative Testing Framework

Demonstrate allows tests to be written without as a much repetitive code within the demonstrate! macro, which will generate the corresponding full tests.

Cucumber testing framework for Rust. Fully native, no external test runners or dependencies.

An implementation of the Cucumber testing framework for Rust. Fully native, no external test runners or dependencies.

🧵 Generate self-describing strings of a given length to help aid software testing
🧵 Generate self-describing strings of a given length to help aid software testing

rust-counter-strings Counter strings generator written in rust to help aid software testing What is a counterstring? "A counterstring is a graduated s

assay - A super powered testing macro for Rust

assay - A super powered testing macro for Rust as·say /ˈaˌsā,aˈsā/ noun - the testing of a metal or ore to determine its ingredients and quality. Rust

🔥 Unit testing framework for Subgraph development on The Graph protocol. ⚙️
🔥 Unit testing framework for Subgraph development on The Graph protocol. ⚙️

👋 Welcome to Matchstick - a unit testing framework for The Graph protocol. Try out your mapping logic in a sandboxed environment and ensure your hand

This is a tiny (but delightful!) utility library for exhaustive testing.

Exhaustigen This is a tiny (but delightful!) utility library for exhaustive testing. It is based (directly) on the idea and code in the following blog

Rust testing library
Rust testing library

K9 - Rust Testing Library Snapshot testing + better assertions Available test macros snapshot assert_equal assert_greater_than assert_greater_than_or_

Testing Framework for Rust
Testing Framework for Rust

Polish Polish is Test-Driven Development done right Getting Started Installing the Package The crates.io package is kept up-to-date with all the major

Owner
Mark Pritchard
Mark Pritchard
Verdun is a HTTP stress-test/benchmark tool written in Rust.

Verdun is a HTTP stress-test/benchmark tool written in Rust. ?? It supports testing a single URL, loading multiples URLs from a file or automatically navigating a website (auto discovery)

Alex Hortopan 2 Feb 23, 2022
Handle some lichess.org/tournament load with Rust, while learning Rust

lila-http Take some of the HTTP load away from lila. WIP! Arena tournaments Clients connected to a tournament page request new data about the tourname

Lichess 22 Jan 2, 2023
ArchTest is a rule based architecture testing tool for rust

ArchTest is a rule based architecture testing tool. It applies static analyses on the specified rust project to extract use relationships.

Tom Dymel 7 Sep 26, 2021
Rnp - A simple cloud-friendly tool for testing network reachability.

Rnp - A simple cloud-friendly tool for testing network reachability. Release Status Crates.io Github release Nuget packages NOTE: This project is in e

Riff 50 Dec 13, 2022
Loom is a concurrency permutation testing tool for Rust.

Loom is a testing tool for concurrent Rust code

Tokio 1.4k Jan 9, 2023
Testing Framework for Rust

Polish Polish is Test-Driven Development done right Getting Started Installing the Package The crates.io package is kept up-to-date with all the major

Fadi Hanna Al-Kass 49 Dec 18, 2022
Automated property based testing for Rust (with shrinking).

quickcheck QuickCheck is a way to do property based testing using randomly generated input. This crate comes with the ability to randomly generate and

Andrew Gallant 2k Jan 2, 2023
Hypothesis-like property testing for Rust

Proptest Introduction Proptest is a property testing framework (i.e., the QuickCheck family) inspired by the Hypothesis framework for Python. It allow

Jason Lingle 1.1k Jan 1, 2023
Simple assertion library for unit testing in python with a fluent API

Simple assertions library for unit testing in Python with a nice fluent API. Supports both Python 2 and 3.

snakedye 19 Sep 10, 2022
Viceroy provides local testing for developers working with Compute@Edge.

Viceroy provides local testing for developers working with Compute@Edge. It allows you to run services written against the Compute@Edge APIs on your local development machine, and allows you to configure testing backends for your service to communicate with.

Fastly 99 Jan 7, 2023