Apache Bench(abコマンド)で変数使ったり複数種類のURLリクエストを送りたい

デフォルトのabコマンドでは、指定できるURLは固定ですが複数のURLを送る方法を探したら、以下の方が作成していたのでありがたく使わせていただきました。

chrismiles.livejournal.com

使い方

以下のようにパラメータを入れたテキストを準備します。

name=foo&age=10
name=bar&age=20
name=hoge&age=30

abコマンドのオプションで-R オプションが追加されるので、先ほどのパラメータテキストファイルを指定します。

ab -R ./params.txt -c 5 -n 20 http://localhost:8080/index.php?

サーバのログを見るとテキストファイルの内容でパラメータを変えながらリクエスト送ることができています。

index.php?name=foo&age=10
index.php?name=bar&age=20
index.php?name=foo&age=10
index.php?name=bar&age=20
index.php?name=hoge&age=30
index.php?name=bar&age=20

-c オプション使っているのでランダムに見えますが、内部的にはファイルの内容を順次処理しているようです。

取得からビルドまで

ソースからビルドする必要があるので少々面倒です。

まず、以下のURLからapache2.2.xのソースをダウンロードしてきます。

https://httpd.apache.org/download.cgi#apache22

ここでは 2.2.32 をダウンロードしてきました。

以下のように展開し、

# ダウンロードしたファイルを解凍
tar xf httpd-2.2.32.tar.gz
# abのディレクトリに移動
cd ~/httpd-2.2.32/support
# 元のファイルを退避
mv ab.c{,.original}
# -Rオプション付きのab.cをダウンロード
wget http://chrismiles.info/dev/testing/ab/ab.c

ビルドをします。

cd ../   
pwd   #->~/httpd-2.2.32
./configure
make

以下のバージョンになっていればOKです。 -R オプションが使えるようになっています。

$ ~/httpd-2.2.32/support/ab -V
This is ApacheBench, Version 2.0.40-dev-CM <$Revision: 1.146 $> apache-2.0
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Copyright 2006 The Apache Software Foundation, http://www.apache.org/

$ ~/httpd-2.2.32/support/ab -h
<省略>
-R reqfile      File containing lines to append to each request URL

後は適当にコピーするなどして使います。