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?
| Cecha | Korzyść |
|---|---|
| Rust + Tokio | Wysoka wydajność i bezpieczeństwo |
| TUI | Czytelna wizualizacja w terminalu |
| Open Source | Możliwość modyfikacji i integracji |
| Niskie zasoby | Idealne do testów lokalnych i CI/CD |
| Eksport danych | Łatwe raportowanie i analiza |
| Integracja z Dockerem | Szybkie 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 😉