oha – szybki generator obciążenia HTTP w Rust z TUI

Co to jest oha?

oha to lekki, szybki i estetyczny program do generowania obciążenia HTTP, napisany w Rust z użyciem Tokio i terminalowego interfejsu użytkownika (TUI) inspirowanego przez rakyll/hey. Pozwala na testowanie wydajności aplikacji webowych w czasie rzeczywistym, z dynamiczną wizualizacją wyników.

Działa lokalnie, jest open-source i idealnie nadaje się do testów serwerów, API, mikroserwisów i aplikacji webowych – szczególnie w środowisku Linuksa.

Co zawiera repozytorium?

Repozytorium oha zawiera:

  • kod źródłowy w Rust (99.7%),
  • wsparcie dla HTTP/1, HTTP/2 i eksperymentalnie HTTP/3,
  • interfejs TUI z animacjami i statystykami,
  • obsługę wielu opcji: nagłówki, metody, proxy, TLS, timeouty,
  • eksport wyników do JSON, CSV, tekstu,
  • wsparcie dla testów z plików URL, regexów, burstów i rate limitów,
  • integrację z Dockerem i PGO (Profile-Guided Optimization).

Jak to działa?

oha pozwala na:

  • wysłanie określonej liczby żądań (-n),
  • równoległe połączenia (-c),
  • ograniczenie zapytań na sekundę (-q),
  • testy przez określony czas (-z),
  • generowanie losowych URL-i (--rand-regex-url),
  • czytanie URL-i z pliku (--urls-from-file),
  • korekcję latencji (--latency-correction),
  • wyłączenie keep-alive (--disable-keepalive),
  • eksport wyników (--output-format json/csv).

Przykład:

oha -n 1000 -c 100 -q 200 --latency-correction https://example.com

Jak zainstalować w Linuksie?

🔹 Przez Cargo:

cargo install oha

🔹 Z repozytorium Azlux (Debian/Ubuntu):

echo "deb [signed-by=/usr/share/keyrings/azlux-archive-keyring.gpg] http://packages.azlux.fr/debian/ stable main" | sudo tee /etc/apt/sources.list.d/azlux.list
sudo wget -O /usr/share/keyrings/azlux-archive-keyring.gpg https://azlux.fr/repo.gpg
sudo apt update
sudo apt install oha

🔹 Przez Docker:

docker run --rm -it --network=host hatoo/oha:latest https://example.com

Dlaczego warto używać oha w Linuksie?

CechaKorzyść
Rust + TokioWysoka wydajność i bezpieczeństwo
TUICzytelna wizualizacja w terminalu
Open SourceMożliwość modyfikacji i integracji
Niskie zasobyIdealne do testów lokalnych i CI/CD
Eksport danychŁatwe raportowanie i analiza
Integracja z DockeremSzybkie uruchamianie bez instalacji

Dla programistów backendu, DevOps, testerów – oha to narzędzie, które pozwala szybko sprawdzić wydajność aplikacji webowej bez konieczności uruchamiania ciężkich frameworków.

Przykłady użycia

  • Test API z 500 równoległymi połączeniami:
oha -n 5000 -c 500 https://api.example.com
  • Test przez 30 sekund z ograniczeniem QPS:
oha -z 30s -q 100 https://example.com
  • Test z losowymi URL-ami:
oha --rand-regex-url http://127.0.0.1/[a-z][a-z][0-9]
  • Test z pliku URL-i:
oha --urls-from-file urls.txt

Przykładowe raporty z testów endpointa HTTP wykonywanych narzędziem oho

Do testów możesz postawić sobie sprawnie endpoint HTTP wystawiony we wpisie, w którym stawiamy klaster kubernetes na lokalnej maszynie Linux narzędziem kind. Dzięki tej instrukcji poniższe testy narzędzia oho wykonasz w 2 minuty!


~$ oha -n 5000 -c 500 -H "Host: echo.local" http://localhost:8080
Summary:
  Success rate:	100.00%
  Total:	883.2270 ms
  Slowest:	701.8327 ms
  Fastest:	5.9885 ms
  Average:	83.7874 ms
  Requests/sec:	5661.0591

  Total data:	58.59 KiB
  Size/request:	12 B
  Size/sec:	66.34 KiB

Response time histogram:
    5.989 ms [1]    |
   75.573 ms [4029] |■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  145.157 ms [428]  |■■■
  214.742 ms [69]   |
  284.326 ms [44]   |
  353.911 ms [62]   |
  423.495 ms [30]   |
  493.079 ms [76]   |
  562.664 ms [164]  |■
  632.248 ms [76]   |
  701.833 ms [21]   |

Response time distribution:
  10.00% in 20.9004 ms
  25.00% in 26.3630 ms
  50.00% in 37.4528 ms
  75.00% in 60.3191 ms
  90.00% in 166.6611 ms
  95.00% in 496.4003 ms
  99.00% in 578.2795 ms
  99.90% in 680.0211 ms
  99.99% in 701.8327 ms


Details (average, fastest, slowest):
  DNS+dialup:	33.2197 ms, 0.5530 ms, 59.8707 ms
  DNS-lookup:	0.0213 ms, 0.0115 ms, 0.2395 ms

Status code distribution:
  [200] 5000 responses








~$ oha -z 30s -q 100 -H "Host: echo.local" http://localhost:8080
Summary:
  Success rate:	100.00%
  Total:	30002.2573 ms
  Slowest:	30.3159 ms
  Fastest:	0.7315 ms
  Average:	2.9648 ms
  Requests/sec:	100.0925

  Total data:	35.16 KiB
  Size/request:	12 B
  Size/sec:	1.17 KiB

Response time histogram:
   0.731 ms [1]    |
   3.690 ms [2759] |■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
   6.648 ms [188]  |■■
   9.607 ms [36]   |
  12.565 ms [5]    |
  15.524 ms [4]    |
  18.482 ms [2]    |
  21.441 ms [3]    |
  24.399 ms [1]    |
  27.357 ms [0]    |
  30.316 ms [1]    |

Response time distribution:
  10.00% in 2.4700 ms
  25.00% in 2.6404 ms
  50.00% in 2.7859 ms
  75.00% in 2.9837 ms
  90.00% in 3.3318 ms
  95.00% in 5.1457 ms
  99.00% in 7.3591 ms
  99.90% in 20.3391 ms
  99.99% in 30.3159 ms


Details (average, fastest, slowest):
  DNS+dialup:	0.3147 ms, 0.2567 ms, 0.5908 ms
  DNS-lookup:	0.0339 ms, 0.0229 ms, 0.1423 ms

Status code distribution:
  [200] 3000 responses

Error distribution:
  [3] aborted due to deadline

Podsumowanie

oha to szybkie, lekkie i estetyczne narzędzie do testowania wydajności aplikacji webowych. Napisane w Rust, działa świetnie na Linuksie i pozwala na:

  • szybkie testy lokalne,
  • integrację z CI/CD,
  • analizę wydajności API,
  • eksport wyników do raportów,
  • wizualizację w terminalu.

Repozytorium: https://github.com/hatoo/oha

Uwaga!

Testowanie obciążenia aplikacji internetowych to dziedzina w fazie kontroli jakości i tworzenia/utrzymania oprogramowania. Nigdy nie używaj narzędzi Open Source w celach innych niżeli rozwój, edukacja i tworzenie lepszego świata Open Source! Świat Open Source wynagrodzi Tobie wyrozumiałość i zaangażowanie 😉

About the author

Autor "BIELI" to zapalony entuzjasta otwartego oprogramowania, który dzieli się swoją pasją na blogu poznajlinuxa.pl. Jego wpisy są skarbnicą wiedzy na temat Linuxa, programowania oraz najnowszych trendów w świecie technologii. Autor "BIELI" wierzy w siłę społeczności Open Source i zawsze stara się inspirować swoich czytelników do eksplorowania i eksperymentowania z kodem.