apibでコマンドラインからAPIを負荷テスト #apijp

これはWeb API Advent Calendar 2014、8日目のエントリです。ツールの小ネタ第二弾です。

APIのテストには、目的に応じてcurlコマンドやPostman、そしてJMeterab(Apache Bench)などさまざまなツールを使います。今回はabによく似た(そしてより進化した)シンプルなコマンドランベースの負荷・性能テストツールであるapib(API Bench)を紹介します。

特徴

  • keep-aliveやchunked encodingを含む、HTTP 1.1の正確なサポート
  • 複数のI/Oスレッドを使いマルチコアを活用
  • 大きなオブジェクトのPOSTやPUTをサポート
  • OAuth 1.0の署名をサポート
  • 実行結果はファイル出力可能(自動化のための連携が容易)

など。

インストール

MacならHomebrewで一発です:

brew install apib

それ以外のプラットフォームではGitHubからソースを取得してビルドする必要があります。

実行例

同時接続数10で30秒間、連続で目一杯リクエストを送る:

$ apib -c 10 -d 30 <ターゲットURL>
(5 / 30) 51.958 0% cpu
(10 / 30) 54.582 0% cpu
(15 / 30) 54.378 0% cpu
(20 / 30) 54.787 0% cpu
(25 / 30) 54.577 0% cpu
(30 / 30) 54.387 0% cpu
Duration:             30.012 seconds
Attempted requests:   1624
Successful requests:  1624
Non-200 results:      0
Connections opened:   10
Socket errors:        0

Throughput:           54.111 requests/second
Average latency:      184.049 milliseconds
Minimum latency:      175.175 milliseconds
Maximum latency:      384.165 milliseconds
Latency std. dev:     15.330 milliseconds
50% latency:          181.145 milliseconds
90% latency:          190.309 milliseconds
98% latency:          192.284 milliseconds
99% latency:          192.580 milliseconds

Client CPU average:    0%
Client CPU max:        0%
Client memory usage:    0%

Total bytes sent:      0.13 megabytes
Total bytes received:  0.17 megabytes
Send bandwidth:        0.03 megabits / second
Receive bandwidth:     0.05 megabits / second

apibにはメソッドやヘッダの指定、認証設定など他にも多くのオプションがあります。詳しくは、apib -hでヘルプを見たり、こちらを参照してください。

注意!

かんたんに大量のトラフィックを生成しますので、ターゲットはくれぐれも慎重に選んでください(通常は自分で開発・管理しているサーバ)。うかつに他人のサーバに負荷をかけると攻撃とみなされることがあります!