跳至主要内容

oha

Overview

oha 是一款以 Rust 撰寫的現代化 HTTP 負載測試工具,最大特色是測試過程中提供即時 TUI(Terminal User Interface)顯示,讓你在終端機中即時觀察延遲分佈、請求狀態和吞吐量變化。

主要特點:

  • 🦀 Rust 撰寫 — 高效能、低資源消耗
  • 📊 即時 TUI 顯示 — 測試過程中即時呈現 histogram 和統計數據
  • 🌐 HTTP/2 & HTTP/3 支援 — 支援現代 HTTP 協定
  • 🎯 簡潔語法 — 無需複雜設定檔,命令列即可完成所有操作

Install

# macOS (Homebrew)
brew install oha

# Cargo (Rust)
cargo install oha

# Arch Linux
pacman -S oha

# Docker
docker run --rm ghcr.io/hatoo/oha http://host.docker.internal:8080

Basic Usage

最簡單的用法,對目標 URL 發送 200 個請求(預設):

oha http://localhost:8080

指定請求數量和併發數:

# 發送 1000 個請求,50 個併發連線
oha -n 1000 -c 50 http://localhost:8080

# 持續測試 30 秒
oha -z 30s -c 100 http://localhost:8080

# 限制 QPS(每秒請求數)
oha -z 30s -c 50 -q 500 http://localhost:8080

Advanced Options

HTTP 方法與自訂 Header

# POST 請求附帶 JSON body
oha -m POST -H "Content-Type: application/json" -d '{"key":"value"}' http://localhost:8080/api

# 自訂多個 Header
oha -H "Authorization: Bearer token123" -H "X-Custom: value" http://localhost:8080

協定與連線控制

# 使用 HTTP/2
oha --http2 http://localhost:8080

# 使用 HTTP/3 (QUIC)
oha --http3 https://localhost:8443

# 啟用延遲校正(Coordinated Omission 修正)
oha --latency-correction -z 30s http://localhost:8080

# 設定連線逾時
oha --timeout 10s http://localhost:8080

輸出格式

# 輸出 JSON 格式(適合 CI/CD pipeline)
oha -j http://localhost:8080

# 停用即時 TUI(僅顯示最終結果)
oha --no-tui -n 500 http://localhost:8080

Output Format

oha 的即時 TUI 顯示包含:

  • 即時 Histogram — 回應時間分佈的直方圖
  • 百分位延遲 — p50 / p90 / p95 / p99 / p99.9
  • 狀態碼統計 — 各 HTTP 狀態碼的數量與比例
  • 吞吐量 — 每秒請求數 (RPS) 即時變化
  • 錯誤統計 — 逾時、連線失敗等錯誤彙總

測試結束後的摘要報告包含完整的延遲百分位數據、成功率和平均吞吐量。

Comparison

特性ohaabwrkheyvegeta
語言RustCCGoGo
即時 TUI
HTTP/2
HTTP/3
腳本擴展Lua
恆定速率-q 限制-q 限制✅ (核心功能)
  • oha vs ab — oha 提供現代 TUI 介面與 HTTP/2 支援,ab 已停止更新且不支援現代協定
  • oha vs wrk — oha 語法更簡潔,無需撰寫 Lua 腳本;wrk 適合需要複雜請求邏輯的場景
  • oha vs hey — 兩者定位相似(簡單好用),oha 多了即時 TUI 和 HTTP/3;hey 以 Go 撰寫,安裝方式不同
  • oha vs vegeta — vegeta 專注於恆定速率測試(constant-rate),適合模擬固定流量;oha 預設為最大吞吐量測試(max-throughput),適合壓力測試

See Also