Webのログイン(POST)負荷試験ツール curl-loader の使い方

Webの負荷試験ツールとしてはJmeter等が有名ですが、ユーザ同時ログインの負荷を測ることができません。そこでこのシナリオに役立つのが curl-loader というツールです。この記事ではあるWebサイトへのログイン負荷を測定するサンプルを示します。

スポンサーリンク
スポンサーリンク

シナリオ

ユーザIDおよびIPアドレスの異なる100ユーザが同時に1つのwebサイトへログイン画面のリクエスト(http GET)を送出し、戻ってきたログイン画面に対してログイン処理(http POST)を行う。

用意するもの

  • CentOS7 * 1台(それなりのスペックのもの。インターネットへ出る環境も必要)
  • ログイン負荷試験の対象となるWebサーバ(認証をするためのサーバやテスト用アカウント含む)

CentOSへのインストール

1. CentOS7 をミニマムインストールで実施します。

2. curl-loader インストールに必要な各種ツールをインストールします。

yum -y install wget
yum -y install bzip2
yum -y install gcc
yum -y install patch

3. カレントディレクトリを /usr/local/src へ移動します。

cd /usr/local/src

4. wgetによりソースファイルをダウンロードします。

wget https://sourceforge.net/projects/curl-loader/files/curl-loader-stable/curl-loader-0.56/curl-loader-0.56.tar.bz2/download

5. tar.bz2 ファイルが download というファイルになっているのでリネームします。

mv download curl-loader-0.56.tar.bz2

6. 解凍します。

tar jxvf curl-loader-0.56.tar.bz2

7. 解凍したディレクトリに移動します。

cd curl-loader-0.56

8. make して make install します。

make
make install

インストールは以上です。

スポンサーリンク

curl-loader の設定

curl-loader は基本的には -f の後にconfファイルを指定すれば動作します。

curl-loader -f XXX.conf

confファイルを以下のように作ります。(サンプルのbax.confを元にしています。)

—web-login-load-test.conf—


########### GENERAL SECTION ################################
BATCH_NAME=web-login-load-test
CLIENTS_NUM_MAX=100
CLIENTS_RAMPUP_INC=0
INTERFACE=eth0
NETMASK=24
IP_ADDR_MIN=10.1.1.101
IP_ADDR_MAX=10.1.1.200
URLS_NUM=2
CYCLES_NUM= 1
########### URL SECTION ####################################

### Login URL – cycling

# GET-part
URL=https://www.example.com/
URL_SHORT_NAME=”Login-GET”
REQUEST_TYPE=GET
TIMER_URL_COMPLETION = 0 # In msec. When positive, Now it is enforced by cancelling url fetch on timeout
TIMER_AFTER_URL_SLEEP =0
LOG_RESP_BODIES=1
LOG_RESP_HEADERS=1

# POST-part
URL=””
URL_SHORT_NAME=”Login-POST”
URL_USE_CURRENT=1
REQUEST_TYPE=POST
FORM_USAGE_TYPE=”RECORDS_FROM_FILE”
FORM_RECORDS_FILE= ./userinfo.csv
FORM_STRING=”PtUser=%s&PtPwd=%s&PtButton=Logon”
TIMER_URL_COMPLETION = 0 # In msec. When positive, Now it is enforced by cancelling url fetch on timeout
TIMER_AFTER_URL_SLEEP =1000
LOG_RESP_BODIES=1
LOG_RESP_HEADERS=1


スポンサーリンク

BATCH_NAME=web-login-load-test

単なるラベルです。任意の文字列で構いません。実行後にこのラベルでのログファイル等関連ファイルが生成されます。

CLIENTS_NUM_MAX=100

最大100クライアントを実行できます。

CLIENTS_RAMPUP_INC=0

1秒ごとに何クライアント同時に起動するかを指定します。例えば20とすれば最初に20クライアント同時に起動し、その1秒後にさらに20、2秒後に20、3秒後に20、4秒後に20と起動していきます。4秒後には100に達するため、CLIENTS_NUM_MAX=100としていれば1サイクルが終了となります

0の場合はいきなり100クライアントを起動します。

INTERFACE=eth0

パケットを送出するインタフェースを指定します。

NETMASK=24
IP_ADDR_MIN=10.1.1.101
IP_ADDR_MAX=10.1.1.200

クライアントの範囲とサブネットマスクを指定します。

上記設定であれば 10.1.1.101/24 ~ 10.1.1.200/24 を使って100台立ち上げることができます。

URLS_NUM=2

URL SECTION で記載するURLの数です。今回は「1. Web画面を表示する(GET)」、「2. Webログイン画面でログインする(POST)」の2つです。

CYCLES_NUM= 1

繰り返すサイクル数です。0の場合は無限ループとなり、Ctrl + C を押すまで止まりません。

URL=https://www.example.com/

アクセスするURLを指定します。

URL_USE_CURRENT=1 の場合はURLを空欄にすることができ、この場合は現在表示されているページに対して実行します。

FORM_USAGE_TYPE=”RECORDS_FROM_FILE”

ログインに使うIDパスワード情報をどこから持ってくるかを指定します。

今回はRECORDS_FROM_FILE というパラメータにより、CSV形式にIDパスワード情報が書かれているファイルを読み込みます。

なお、”UNIQUE_USERS_SAME_PASSWORD” や “UNIQUE_USERS_AND_PASSWORDS” というパラメータでも実現できそうなのですが、実際にやってみると%dというところがうまく数字が上がらず、100ユーザ同じIDになってしまったため、断念しました。

FORM_RECORDS_FILE= ./userinfo.csv

前述した、ログインに使うIDパスワード情報のファイルを指定します。confファイルと同ディレクトリに userinfo.csv というファイルを配置し、そこにCSV形式[ID,Password]で100アカウント分の情報を記載しました。

testuser1,testpassword1
testuser2.testpassword2
…..

スポンサーリンク

FORM_STRING=”PtUser=%s&PtPwd=%s&PtButton=Logon”

これはログイン画面へPOSTする際のFormそのものの形式に則る必要があります。今回試したログイン画面ではPOSTメソッドで以下文字列を送っていることをFirefoxの開発者ツール(F12ボタンで起動)を使って確認しました。(Wireshark だと httpsの暗号化通信はローカルであっても確認できませんので)

“PtUser=[User ID]&PtPwd=[Password]&PtButton=Logon”

1つ目の%sはcsvの1列目、つまりユーザIDを示し、2つ目の%sはcsvの2列目、つまりパスワードを示します。

これで準備完了です。

curl-loader の実行

以下コマンドで実行します。

curl-loader -f web-login-load-test.conf

実行結果は同じディレクトリに web-login-load-test.log というファイルが生成されます。

less web-login-load-test.conf
スポンサーリンク
スポンサーリンク
スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク
スポンサーリンク