負荷テストツールといえばab(apache bench)が有名です。
abは単一のURLに対して大量のリクエストを投げて、レスポンスを計測するというもので、リクエストパラメータやパスをランダムにすることができません。
(そういうパッチもあるみたいですが)
ランダムないくつかのパスやパラメータに対してリクエストを投げる負荷テストツールを探していて、siegeというのがあると知ったので試してみました。
準備
ランダムにリクエストする場合は、URLをテキストに書いておきます
urls.txt
http://localhost:8000/book/1/ http://localhost:8000/book/2/ http://localhost:8000/book/3/ http://localhost:8000/book/4/ http://localhost:8000/book/5/
テスト実行
concurentが同時接続数
repsが接続ごとのリクエスト数
internetを指定するとランダムにリクエストするようです
$ siege --concurrent=2 --reps=20 --internet --file=urls.txt --log=result.log
結果は標準出力に表示されます。
** SIEGE 2.72 ** Preparing 2 concurrent users for battle. The server is now under siege.. done. Transactions: 40 hits Availability: 100.00 % Elapsed time: 11.31 secs Data transferred: 2.79 MB Response time: 0.02 secs Transaction rate: 3.54 trans/sec Throughput: 0.25 MB/sec Concurrency: 0.06 Successful transactions: 40 Failed transactions: 0 Longest transaction: 0.02 Shortest transaction: 0.01
-
- logを指定していればファイルに以下の形式でログが表示されます
Date & Time, Trans, Elap Time, Data Trans, Resp Time, Trans Rate, Throughput, Concurrent, OKAY, Failed 2013-01-30 22:35:52, 40, 11.31, 2, 0.02, 3.54, 0.18, 0.06, 40, 0
[おまけ]cookieを渡す
こんな感じで--headerパラメータとして渡せばいいみたいです。
--header=Cookie: xxxx=xxxx; yyyy=yyyy;
参考: Wiki: Siege