JMeter で Rails のCSRFトークンを取得する方法

JMeterRailsアプリケーションの負荷テスト作ると、サーバ側にCSRFトークンが渡ってないために、フォームを使った登録処理のテストが失敗します。 それを回避するために、JMeterCSRFトークンの取得し、登録操作などのリクエストにトークンを渡す必要があります。

今回は、そのCSRFトークンの取得方法を書いておきます。

環境

HTTPクッキーマネージャを追加

CSRFトークンは、Cookieに保存されるのでHTTPクッキーマネージャをスレッドグループに追加します。

スレッドグループを選択し、右クリック => 追加 =>「設定エレメント」 => 「HTTP クッキーマネージャ」を選択

CSRFトークンを取得するためのリクエストの作成

最初に画面を開く際(セッション開始時)サーバ側では、CSRFトークンが生成し、HTMLのMETAタグ内にトークンを入れてレスポンスを返しています。 f:id:moritamorie:20190615213433p:plain

CSRFトークンを取得できる任意のページを開くHTTPリクエストを作ります。

スレッドグループを選択し、右クリック => 追加 =>「サンプラー」 => 「HTTP リクエスト」を選択

以下のようにしてみました f:id:moritamorie:20190615212934p:plain

後処理の追加

次に、後処理を追加しCSRFトークンをHTML内から取得する操作を追加します。

追加したHTTPリクエスサンプラーを右クリック => 追加 => 「後処理」 => 「CSS Selector Extractor」を選択

以下のように設定します。

参照名: csrf_token
CSS Selector expression: meta[name=csrf-token]
Attribute: content
一致番号: 1

f:id:moritamorie:20190615213740p:plain

デバッグの追加と結果の確認

想定したとおりにCSRFトークンを取得できていることを確認するために、変数のデバッグ操作とデバッグの内容を確認するための設定を追加します。

変数のデバッグするための設定を追加

スレッドグループを選択し、右クリック => 追加 => 「サンプラー」 => 「Debug Sampler」を選択

デバッグの内容を確認するための設定を追加

スレッドグループを選択し、右クリック => 追加 => 「リスナー」 => 「結果をツリーで表示」を選択

JMeterのテストの実行

実行すると、「結果をツリーで表示」リスナーの中に以下のように出力され、正しくCSRFトークンを取得できることを確認できます。

f:id:moritamorie:20190615214627p:plain