この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。
今回はJMeterでauthenticity_tokenを取得する方法をご紹介します。
■ 概要
【環境】
Mac OS X 10.6.7
JMeter2.9
Rails2.0からCSRF対策として、Formに自動的にauthenticity_tokenが付加されるようになりました。
JMeterでPOSTする際などもこのauthenticity_tokenを正しくセットしないとアプリケーション外からのリクエストとして弾かれてしまいます。
■ テスト計画構成と正規表現抽出
例えばテスト計画の下に「ログイン」というスレッドグループがあるとします。
さらに、その下に「ログイン画面」と「ログインアクション」という2つのサンプラー(HTTPリクエスト)がぶら下がるような設定です。
テスト計画
・ログイン
・ログイン画面
・ログインアクション
この場合、authenticity_tokenはログイン画面のFormに自動的に付加されていることと思います。
authenticity_tokenはログインアクションの際にパラメータとして必要なので、ログイン画面表示時にどうにかして、このauthenticity_tokenの値を取得しないといけないわけです。
そこで使用するのがJMeterの「正規表現抽出」という機能です。
正規表現抽出ではサンプラー(HTTPリクエスト)の後処理として設定することで、HTML BODY内の任意の値を正規表現で抽出し、次のサンプラーに渡すことができるのです。
■ 正規表現抽出追加
ログイン画面のサンプラーを右クリック
→追加
→後処理
→正規表現抽出
これでログイン画面の下に正規表現抽出という項目が追加されたはずです。
■ 正規表現抽出項目設定
では各項目を設定しましょう。
Apply to:
調査中
(例)Main sample only
Responce Field to check:
チェックするフィールド
(例)Body
参照名:
後続するリスナーで指定する名前
(例)hidden_TOKEN
正規表現:
マッチする文字列の正規表現
(例)<input name=”authenticity_token” type=”hidden” value=”(.*)” />
※都合上全角の括弧(<>)となっているのでご注意ください。実際は半角になります。
テンプレート:
マッチした正規表現の何番目を取得するか。0だと全体
(例)$1$
※上記正規表現例の括弧内を取得
一致番号(0から乱数)
調査中
(例)空白
初期値:
初期の値
(例)is_not_Exist
■ 値の取得(ログインアクション設定)
最後に設定した正規表現の値を取得する方法です。
後続のリスナー(ログインアクション)のHTTP リクエスト – Parametersの追加
名前:authenticity_token
値:${hidden_TOKEN}
Encode?:チェックON
※このチェックをONにしないと、取得した値の間に半角スペースが入る場合がありました
統合含む?:チェックON
※他のパラメータ(ログインID、パスワード)等は適宜設定してください
以上で設定は完了です。
この状態でテストを実行すれば、ログイン画面のauthenticity_tokenを自動で取得し、POSTのパラメータに含めることが可能となります。