Uses new Rust 2021
|0.5.3||Jul 16, 2022|
|0.5.1||Mar 29, 2022|
|0.4.7||Oct 15, 2021|
|0.4.6||Jul 5, 2021|
|0.2.1||Mar 29, 2020|
#7 in Profiling
450 downloads per month
oha is a tiny program that sends some load to a web application and show realtime tui inspired by rakyll/hey.
This program is built on stable Rust.
cargo install oha
cargo install --no-default-features --features rustls oha
pacman -S oha
brew install oha
On Debian (Azlux's repository)
echo "deb http://packages.azlux.fr/debian/ buster main" | sudo tee /etc/apt/sources.list.d/azlux.list wget -qO - https://azlux.fr/repo.gpg.key | sudo apt-key add - apt update apt install oha
- Linux - Tested on Ubuntu 18.04 gnome-terminal
- Windows 10 - Tested on Windows Powershell
- MacOS - Tested on iTerm2
-q option works different from rakyll/hey. It's set overall query per second instead of for each workers.
oha 0.5.3 hatoo <firstname.lastname@example.org> Ohayou(おはよう), HTTP load generator, inspired by rakyll/hey with tui animation. USAGE: oha [FLAGS] [OPTIONS] <url> ARGS: <URL> Target URL. OPTIONS: -n <N_REQUESTS> Number of requests to run. [default: 200] -c <N_WORKERS> Number of workers to run concurrently. You may should increase limit to number of open files for larger `-c`. [default: 50] -z <DURATION> Duration of application to send requests. If duration is specified, n is ignored. Examples: -z 10s -z 3m. -q <QUERY_PER_SECOND> Rate limit for all, in queries per second (QPS) --latency-correction Correct latency to avoid coordinated omission problem. It's ignored if -q is not set. --no-tui No realtime tui --fps <FPS> Frame per second for tui. [default: 16] -m, --method <METHOD> HTTP method [default: GET] -H <HEADERS> Custom HTTP header. Examples: -H "foo: bar" -t <TIMEOUT> Timeout for each request. Default to infinite. -A <ACCEPT_HEADER> HTTP Accept Header. -d <BODY_STRING> HTTP request body. -D <BODY_PATH> HTTP request body from file. -T <CONTENT_TYPE> Content-Type. -a <BASIC_AUTH> Basic authentication, username:password --http-version <HTTP_VERSION> HTTP version. Available values 0.9, 1.0, 1.1, 2. --host <HOST> HTTP Host header --disable-compression Disable compression. -r, --redirect <REDIRECT> Limit for number of Redirect. Set 0 for no redirection. [default: 10] --disable-keepalive Disable keep-alive, prevents re-use of TCP connections between different HTTP requests. --ipv6 Lookup only ipv6. --ipv4 Lookup only ipv4. --insecure Accept invalid certs. --connect-to <CONNECT_TO> Override DNS resolution and default port numbers with strings like 'example.org:443:localhost:8443' -h, --help Print help information -V, --version Print version information
oha uses default options inherited from rakyll/hey but you may need to change options to stress test in more realistic condition.
I suggest to run
oha with following options.
oha <-z or -n> -c <number of concurrent connections> -q <query per seconds> --latency-correction --disable-keepalive <target-address>
In real, user doesn't query same URL using Keep-Alive. You may want to run without
You can avoid
Coordinated Omission Problemby using
Feel free to help us!
Here are some issues to improving.
- Write tests
- Improve tui design.
- Show more information?
- There are no color in realtime tui now. I want help from someone who has some color sense.
- Improve speed
- I'm new to tokio. I think there are some space to optimize query scheduling.
- Output like CSV or JSON format.
- Improve histogram in summary output
- It uses very simple algorithm now.