Simple minds think alike

より多くの可能性を

JMeter レスポンスの結果で操作を条件分岐する設定

負荷テストのシナリオを考えた時に、例えば検索画面で検索を行い、その結果に表示される件数が0件でなければ、詳細画面(検索結果の最初の1件目)に遷移するなどの条件に応じたシナリオのテストを作る必要が出てくるかと思います。

そのようなシナリオのテストは、JMeterの「HTTPリクエスト(サンプラ)」、「CSS Selector Extractor(後処理)」と「IFコントローラ(ロジックコントローラ)」という構成要素を使うことで実現できます。

今回も以下の図書館 書籍検索Webサイトの例で、実際の設定を行っていきます。(例の詳細はJMeter テストの作成方法を参照してください。)

使用するJMeterのバージョンは、5.1.1です。

[目次]

書籍検索を実行 - HTTPリクエスト(サンプラ)

まずは、HTTPリクエスト(サンプラ)書籍の検索を行います。以下のようにHTTPリクエストを設定します。

以下の設定で、検索を行うことができることを想定しています。

書籍検索の結果から件数を取得 - CSS Selector Extractor(後処理)

次に、書籍検索結果を取得するために、CSS Selector Extractorを追加します。 作った「(サンプラ)書籍検索する」を選択 => 右クリック => 「後処理」 => 「 CSS Selector Extractor」を選択します。

設定内容

  • Apply to
    • 書籍検索は1リクエストで終わり、検索後Ajax処理等行わないので「Main sample only」にします。
  • CSS Selector Extractor Implementation
    • 参考資料によるとさほど違いがないようなので「JSOUP(デフォルト)」にしておきます
  • 参照名
    • ロジックコントローラで参照する変数の名前「search_result_count」
  • CSS Selector expression
    • 検索結果のCSSセレクタは各Webサイト毎に異なりますが、ここでは「#resultTop > p > strong:n-child(1)」を指定します。(CSSセレクタの調べ方は以下に記載します)

CSSセレクタの調べ方

WebブラウザChromeを使っているので、Chromeを使ったCSSセレクタの調べ方を書いておきます。

CSSセレクタを調べたい要素の上にマウスカーソルを移動し、右クリック => 「検証」を選択し、Chrome developer toolsを起動。 Elementsタブの該当のHTMLタグ上で右クリック、「Copy」 => 「Copy Selector」でCSSセレクタをコピーします。

※今回はCSS Selector extractorを使ったテストの定義方法を記載しましたが、XPath Selector extractorを使った場合は「Copy Xpath」を選択します。 抽出方法は、CSSセレクタXPathの他に正規表現という方法もあります。

書籍検索の結果を条件に操作を変える - IFコントローラ(ロジックコントローラ)

IFコントローラを追加して、条件分岐を行ってみます。

また、条件がマッチした場合の操作(サンプラ)を、IFコントーラの下に配置します。

設定は以上です。正しく動いているかを確認するために、以下の「Debug Sampler (サンプラ)」、「結果をツリーで表示(リスナ)」を追加してみます。

Debug Sampler(サンプラ)

結果をツリーで表示(リスナ)

「(テスト計画)図書館Webサイト負荷テスト計画」を選択し、右クリック => 「追加」=> 「リスナー」=> 「結果をツリーで表示」を選択し、テストの実行結果を見れるようにします。

テストを実行すると以下のように変数の内容を確認可能です。

うまく変数に値が入らなかった時に確認すること

上記の結果ツリー表示の画面で、変数が適切に設定されていなければ、リクエストの「応答データ」を確認し、想定したレスポンスが返っているか確認します。

もし、想定していないレスポンスが返っていなければ、その原因調査・対応します。原因は色々ありますが、クッキーが有効になっていなければ、対応はHTTPクッキーマネージャを追加するになります。 想定しているレスポンスが返ってきていれば、CSSセレクタが正しくない可能性が高いので、Chrome developer toolsのconsoleでCSSセレクタが正しいか確認すると、うまく解決できるかと思います。

参考資料