apibでコマンドラインからAPIを負荷テスト #apijp
これはWeb API Advent Calendar 2014、8日目のエントリです。ツールの小ネタ第二弾です。
APIのテストには、目的に応じてcurlコマンドやPostman、そしてJMeterやab(Apache Bench)などさまざまなツールを使います。今回はabによく似た(そしてより進化した)シンプルなコマンドランベースの負荷・性能テストツールであるapib(API Bench)を紹介します。
特徴
- keep-aliveやchunked encodingを含む、HTTP 1.1の正確なサポート
- 複数のI/Oスレッドを使いマルチコアを活用
- 大きなオブジェクトのPOSTやPUTをサポート
- OAuth 1.0の署名をサポート
- 実行結果はファイル出力可能(自動化のための連携が容易)
など。
実行例
同時接続数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でヘルプを見たり、こちらを参照してください。
注意!
かんたんに大量のトラフィックを生成しますので、ターゲットはくれぐれも慎重に選んでください(通常は自分で開発・管理しているサーバ)。うかつに他人のサーバに負荷をかけると攻撃とみなされることがあります!