An experimental HTTP load testing application written in Rust.

Related tags

Applications Herd
Overview

Herd

Herd was a small side project in building a HTTP load testing application in Rust with a main focus on being easy to use and low on OS level dependencies such as the JVM.

Herd was developed on a pre-1.0 version of Rust, it is not unit tested and unlikley to compile on later versions of Rust, I intend to revisit this project as the Rust ecosystem matures.

Herd can spawn thousands of concurrent requests to HTTP endpoints by making use of unix process forking and multithreadding.

Herd is hardware intensive. Per each 1000 virtual users, Herd will fork itself in order to overcome hard limits set by the OS on how many active threads a process can have at any one time. Due to this, it is recomended you run Herd from a disposable machine in the cloud, high levels of virtual users can crash machines if they run out of memory or CPU resources, do not run Herd on a production machine.

Download and run

As Herd is unlikley to compile out the box, it is recomended you clone this repository and fully build from source, some alterations to the source code may be needed over time as the Rust language changes, I do not intend on continuously maintaining this project.

Dependencies:

gcc clang libssl rust cargo

Compile from source and run:
$ git clone [email protected]:imjacobclark/Herd.git && cd Herd
$ cargo build --release
$ ./target/release/herd -t <THREADS(int)> -r <REQUESTS(int)> <HOST(str)>

You can define several hosts to test with a configuration file. See example-config.yaml.

$ ./target/release/herd -c config.yaml
You might also like...
A fast data collector in Rust
A fast data collector in Rust

Flowgger is a fast, simple and lightweight data collector written in Rust. It reads log entries over a given protocol, extracts them, decodes them usi

kytan: High Performance Peer-to-Peer VPN in Rust

kytan: High Performance Peer-to-Peer VPN kytan is a high performance peer to peer VPN written in Rust. The goal is to to minimize the hassle of config

The LibreTranslate API for Rust.

libretranslate-rs A LibreTranslate API for Rust. libretranslate = "0.2.4" libretranslate allows you to use open source machine translation in your pr

Yet another pager in Rust
Yet another pager in Rust

rust-pager Yet another pager in Rust Features Vim like keybindings Search substring Mouse wheel support Install cargo install rust-pager Usage comman

A Rust serverless function to retrieve and relay a playlist for Twitch livestreams/VODs.

City17 A Rust serverless function to retrieve and relay a playlist for Twitch livestreams/VODs. By running this in specific countries and using a brow

Fork of async-raft, the Tokio-based Rust implementation of the Raft protocol.

Agreed Fork of async-raft, the Tokio-based Rust implementation of the Raft distributed consensus protocol. Agreed is an implementation of the Raft con

Rust runtime for Vercel Functions.

Rust Rust runtime for Vercel Functions. Community-maintained package to support using Rust inside Vercel Functions as a Runtime. Usage First, you'll n

Drill is a HTTP load testing application written in Rust  inspired by Ansible syntax
Drill is a HTTP load testing application written in Rust inspired by Ansible syntax

Drill Drill is a HTTP load testing application written in Rust. The main goal for this project is to build a really lightweight tool as alternative to

Drill is an HTTP load testing application written in Rust  inspired by Ansible syntax
Drill is an HTTP load testing application written in Rust inspired by Ansible syntax

Drill is an HTTP load testing application written in Rust inspired by Ansible syntax

An experimental HTTP server in Rust that supports HTTP/1.1, HTTP/2, and HTTP/3 over QUIC.

🚀 H123 An experimental HTTP server in Rust that supports HTTP/1.1, HTTP/2, and HTTP/3 over QUIC. Warning This is an experimental project and not inte

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

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

A universal load testing framework for Rust, with real-time tui support.
A universal load testing framework for Rust, with real-time tui support.

rlt A Rust Load Testing framework with real-time tui support. rlt provides a simple way to create load test tools in Rust. It is designed to be a univ

Server load testing CLI tool 🏋️

🔥 Rhea A Server Load Testing Tool Rhea is a powerful and easy-to-use command-line tool written in Rust for load testing servers. It allows you to sim

A more modern http framework benchmarker supporting HTTP/1 and HTTP/2 benchmarks.

rewrk A more modern http framework benchmark utility.

A WIP property-based testing library in Rust, built with generalized targeted-property testing in mind.

Crabcheck A WIP property-based testing library in Rust, built with generalized targeted-property testing in mind. What is property-based testing? TODO

A MITM Proxy Written in Rust 🦀! Toolkit for HTTP/1, HTTP/2, and WebSockets with SSL/TLS Capabilities. Learning Project.
A MITM Proxy Written in Rust 🦀! Toolkit for HTTP/1, HTTP/2, and WebSockets with SSL/TLS Capabilities. Learning Project.

Man In The Middle Proxy Description Rust-based Man in the Middle proxy, an early-stage project aimed at providing visibility into network traffic. Cur

Bolt is a desktop application that is designed to make the process of developing and testing APIs easier and more efficient.

Bolt ⚡ Bolt is a desktop application that is designed to make the process of developing and testing APIs easier and more efficient. Quick start 👩‍💻

Rust I18n is use Rust codegen for load YAML file storage translations on compile time, and give you a t! macro for simply get translation texts.

Rust I18n Rust I18n is use Rust codegen for load YAML file storage translations on compile time, and give you a t! macro for simply get translation te

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

Comments
  • The future of Herd

    The future of Herd

    I wondered if you planned to take this tool any further? I'd probably not use YAML to write tests as it becomes a little tricky when writing non-trivial tests. Gatling uses a DSL, but I'd probably stick to standard Rust.

    opened by ghost 3
  • Can't build on windows

    Can't build on windows

    Herd does not work on windows machines, here is the traceback:

    src\main.rs:102:20: 102:37 error: failed to resolve. Could not find `unistd` in `nix` [E0433]
    src\main.rs:102         let _pid = nix::unistd::fork();
                                       ^~~~~~~~~~~~~~~~~
    src\main.rs:102:20: 102:37 help: run `rustc --explain E0433` to see a detailed explanation
    src\main.rs:102:20: 102:37 error: unresolved name `nix::unistd::fork` [E0425]
    src\main.rs:102         let _pid = nix::unistd::fork();
                                       ^~~~~~~~~~~~~~~~~
    src\main.rs:102:20: 102:37 help: run `rustc --explain E0425` to see a detailed explanation
    error: aborting due to 2 previous errors
    Could not compile `herd`.
    

    There would need to be a target for windows machines, either informing that it is not possible, or where another package would be used instead of nix. Probably: https://github.com/retep998/winapi-rs

    opened by lunemec 0
  • Record and persist relevant metrics

    Record and persist relevant metrics

    I was thinking of a stats module that does on the fly calculations at x intervals, including total and individual response times, max times, error rate and current RPS.

    These could be converted to a Graphite formatted text and pushed to port 2003 to be picked up by InfluxDB. Grafana can then read the data and present it in visual form.

    Another option would be to use a rest-client to write to InfluxDB via HTTP.

    opened by ghost 0
  • Calculate response times in percentiles

    Calculate response times in percentiles

    There is an argument that the mean can be a misleading metric if there is a high standard deviation.

    A more rounded set of metrics would be percentiles, I suggest printing the: 50, 75, 95, 99 percentiles to STDOUT.

    opened by ghost 0
Releases(v0.0.1)
  • v0.0.1(Jun 23, 2015)

    23.06.2015 - Version v0.0.1 (stable)

    • Linear test scenario strategy implemented
    • Scenario configuration via command line arguments
    • Workaround for hard thread limits set by OS w/ forks

    This release binary only supports darwin-x64, compile from source for other unix based systems.

    Source code(tar.gz)
    Source code(zip)
    herd-v0.0.1-darwin-x64.zip(6.99 MB)
Owner
Jacob Clark
Senior Technical Architect @BBC
Jacob Clark
A Kubernetes implementation of the Open Application Model specification

Rudr ?? NOTE: Rudr is deprecated in favor of the upcoming open application platform project as its successor. There are no plans to produce future rel

Open Application Model 1.6k Jan 4, 2023
Dragit - Application for intuitive file sharing between devices.

Dragit helps you share files between computers in the same network.

Piotr Gołąb 124 Dec 23, 2022
A genetic algorithm for bechmark problems, written to learn Rust.

Genetic Algorithm A genetic algorithm in Rust for the following benchmark problems: Ackley Griewangk Rastrigin Rosenbrock Schwefel Sphere Usage: Insta

Andrew Schwartzmeyer 73 Dec 25, 2022
interative assembly shell written in rust

Overview this project is inspired by https://github.com/poppycompass/asmshell Preview Build from source git clone https://github.com/keystone-engine/k

Xargin 236 Dec 23, 2022
A purpose-built proxy for the Linkerd service mesh. Written in Rust.

This repo contains the transparent proxy component of Linkerd2. While the Linkerd2 proxy is heavily influenced by the Linkerd 1.X proxy, it comprises

Linkerd 1.7k Jan 7, 2023
Full fake REST API generator written with Rust

Weld Full fake REST API generator. This project is heavily inspired by json-server, written with rust. Synopsis Our first aim is to generate a fake ap

Seray Uzgur 243 Dec 31, 2022
A GPU-accelerated cross-platform terminal emulator and multiplexer written by @wez and implemented in Rust

Wez's Terminal A GPU-accelerated cross-platform terminal emulator and multiplexer written by @wez and implemented in Rust User facing docs and guide a

Wez Furlong 6.7k Jan 2, 2023
pastebin written in pure rust. A rewrite of ptpb/pb.

rspb rust fork of ptpb/pb TL;DR Create a new paste from the output of cmd: cmd | curl -F c=@- https://pb.mgt.moe/ Usage Creating pastes > echo hi | c

mgt 39 Jan 4, 2023
Distributed compute platform implemented in Rust, and powered by Apache Arrow.

Ballista: Distributed Compute Platform Overview Ballista is a distributed compute platform primarily implemented in Rust, powered by Apache Arrow. It

Ballista 2.3k Jan 3, 2023
Userspace WireGuard® Implementation in Rust

BoringTun BoringTun is an implementation of the WireGuard® protocol designed for portability and speed. BoringTun is successfully deployed on millions

Cloudflare 4.8k Jan 8, 2023