JMeterでRailsアプリケーションの負荷テスト作ると、サーバ側にCSRFトークンが渡ってないために、フォームを使った登録処理のテストが失敗します。 それを回避するために、JMeterでCSRFトークンの取得し、登録操作などのリクエストにトークンを渡す必要があります。
環境
HTTPクッキーマネージャを追加
CSRFトークンは、Cookieに保存されるのでHTTPクッキーマネージャをスレッドグループに追加します。
スレッドグループを選択し、右クリック => 追加 =>「設定エレメント」 => 「HTTP クッキーマネージャ」を選択
CSRFトークンを取得するためのリクエストの作成
最初に画面を開く際(セッション開始時)サーバ側では、CSRFトークンが生成し、HTMLのMETAタグ内にトークンを入れてレスポンスを返しています。
CSRFトークンを取得できる任意のページを開くHTTPリクエストを作ります。
スレッドグループを選択し、右クリック => 追加 =>「サンプラー」 => 「HTTP リクエスト」を選択
以下のようにしてみました
後処理の追加
次に、後処理を追加しCSRFトークンをHTML内から取得する操作を追加します。
追加したHTTPリクエストサンプラーを右クリック => 追加 => 「後処理」 => 「CSS Selector Extractor」を選択
以下のように設定します。
参照名: csrf_token CSS Selector expression: meta[name=csrf-token] Attribute: content 一致番号: 1
デバッグの追加と結果の確認
想定したとおりにCSRFトークンを取得できていることを確認するために、変数のデバッグ操作とデバッグの内容を確認するための設定を追加します。
変数のデバッグするための設定を追加
スレッドグループを選択し、右クリック => 追加 => 「サンプラー」 => 「Debug Sampler」を選択
デバッグの内容を確認するための設定を追加
スレッドグループを選択し、右クリック => 追加 => 「リスナー」 => 「結果をツリーで表示」を選択
JMeterのテストの実行
実行すると、「結果をツリーで表示」リスナーの中に以下のように出力され、正しくCSRFトークンを取得できることを確認できます。