Apache JMeter
Apache JMeterの相関関係
サーチ…
前書き
JMeterのパフォーマンス・テストでは、相関は、サーバー・レスポンスから動的データをフェッチし、後続の要求にポストする機能を意味します。この機能は、トークンベースの保護されたアプリケーションのような、テストの多くの側面にとって重要です。
Apache JMeterの正規表現エクストラクターを使用した相関
テキスト応答から情報を抽出する必要がある場合、最も簡単な方法は正規表現を使用することです。一致するパターンは、Perlで使用されているものと非常によく似ています。飛行機のチケット購入のワークフローをテストしたいと仮定しましょう。最初のステップは、購入操作を提出することです。次のステップは、最初のリクエストで返される購入IDを使用してすべての詳細を確認できるようにすることです。最初のリクエストが、抽出する必要のあるこのタイプのIDを持つHTMLページを返すとしましょう:
<div class="container">
<div class="container hero-unit">
<h1>Thank you for you purchse today!</h1>
<table class="table">
<tr>
<td>Id</td>
<td>Your purchase id is 1484697832391</td>
</tr>
<tr>
<td>Status</td>
<td>Pending</td>
</tr>
<tr>
<td>Amount</td>
<td>120 USD</td>
</tr>
</table>
</div>
</div>
この種の状況は、JMeterの正規表現エクストラクタを使用するための最良の候補です。正規表現は、検索パターンを記述するための特別な文字列です。正規表現の作成とテストに役立つオンラインリソースはたくさんあります。それらの1つはhttps://regex101.com/です。
このコンポーネントを使用するには、「JMeter」メニューを開き、「 追加」 - >「ポストプロセッサー」 - >「正規表現エクストラクター
正規表現エクストラクターには、次のフィールドがあります。
- 参照名 - 抽出後に使用できる変数の名前
- 正規表現 - テキスト内で検索される文字列(パターン)を表す記号と文字のシーケンス
- テンプレート - グループへの参照が含まれています。正規表現は複数のグループを持つことができるので、グループ番号を$ 1 $または$ 2 $または$ 1 $$ 2 $(両方のグループを抽出)として指定することで、抽出するグループ値を指定できます。
- 一致番号 - 使用する一致を指定します(0値はランダム値/任意の正の数値と一致します.Nは、N番目の一致/負の値を選択することを意味します。ForEachコントローラで使用する必要があります)
- デフォルト - 一致するものが見つからない場合に変数に格納されるデフォルト値が変数に格納されます。
[適用先]チェックボックスは、埋め込みリソースをリクエストするサンプルを処理します。このパラメータは、正規表現をメインのサンプル結果に含めるか、組み込みリソースを含むすべての要求に適用するかを定義します。このパラメータにはいくつかのオプションがあります。
- メインサンプルとサブサンプル
- メインサンプルのみ
- サブサンプルのみ
- JMeter変数 - アサーションは、名前付き変数の内容に適用されます。この変数は、別のリクエストで埋め込むことができます
[チェックするフィールド]チェックボックスをオンにすると、正規表現をどのフィールドに適用するかを選択できます。ほとんどすべてのパラメータは自己記述的です:
- 本文 - レスポンスの本文。例えば、ウェブページの内容(ヘッダを除く)
- ボディ(エスケープされていないボディ) - レスポンスの本体で、すべてのHTMLエスケープコードが置き換えられます。 HTMLエスケープはコンテキストに関係なく処理されるため、誤った置き換えが行われる可能性があります(*このオプションはパフォーマンスに大きな影響を与えます)
- ボディ - ドキュメントとしてのボディ - Apache Tikaを介してさまざまなタイプのドキュメントからテキストを抽出します(*もパフォーマンスに影響する可能性があります)
- Body - Request Headers - HTTP以外のサンプルには存在しない可能性があります
- 本文 - レスポンスヘッダー - HTTP以外のサンプルには存在しない可能性があります
- 本文 - URL
- 応答コード - たとえば200
- 本文 - 応答メッセージ - 例OK
エクスプレッションが抽出された後は、$ {purchaseId}変数を使用して後続のリクエストで使用できます。
この表には、JMeterの正規表現でサポートされているすべての収縮が含まれています。
JMeterにおけるXPath Extractorを用いた相関
XPathを使用して、XML文書内の要素と属性をナビゲートできます。正規表現エクストラクターを使用してレスポンスのデータを抽出できない場合に役立ちます。たとえば、類似したタグから同じ属性でデータを抽出する必要があるシナリオの場合、値は異なります。 XPath ExtractorはCSS / JQuery Extractorに似ていますが、XMLコンテンツにはXPath Extractorを使用し、HTMLコンテンツにはCSS / JQuery Extractorを使用する必要があります。応答では、2番目のテーブル行から値を抽出する必要がある異なる値のテーブルがあるとしましょう。
<div id="weeklyPrices">
<tr>
<td>$56.00</td>
<td>$56.00</td>
<td>$56.00</td>
<td>$56.00</td>
<td>$60.00</td>
<td>$70.00</td>
<td>$70.00</td>
</tr>
</div>
先を見て、そのケースの正しいXPathは次のようになります: // div [@ id = 'weeklyPrices'] / tr / td 1
このコンポーネントを使用するには、「JMeter」メニューを開き、「 追加」 - >「ポストプロセッサー」 - > XPath Extractor
XPath Extractorには、「正規表現エクストラクターを使用した相関」で説明されているいくつかの一般的な構成要素が含まれています。これには、名前、適用先、参照名、一致番号(JMeter 3.2以降)およびデフォルト値が含まれます。
作成されたxpath( このような)を作成してテストするためのオンラインチートシートとエディターを備えたWebリソースがたくさんあります。しかし、以下の例に基づいて、最も一般的なxpathロケータを作成する方法を見つけることができます。
HTMLをXHTMLに解析する場合は、「Tidyを使用」オプションをチェックする必要があります。 「Tidyを使用」ステータスを決定した後、追加のオプションもあります。
'Use Tidy'がチェックされている場合:
- 静か - きちんと静かな旗を立てる
- エラーを報告する - きちんとしたエラーが発生した場合、それに応じてアサーションを設定する
- Show Warnings - Tidy show warningsオプションを設定します。
'Use Tidy'がチェックされていない場合:
- 名前空間を使用する - チェックされている場合、XMLパーサは名前空間の解決を使用します
- XMLの検証 - 指定されたスキーマと比較してドキュメントをチェックする
- 空白を無視する - 要素の空白を無視する
- Fetch External DTD - 選択すると、外部DTDが取得されます。
'テキストコンテンツの代わりにXPathフラグメント全体を返す'は自己記述的で、xpath値だけでなくxpathロケータ内の値も返す場合に使用する必要があります。デバッグの必要性に役立つかもしれません。
また、XPathロケータをテストするための非常に便利なブラウザプラグインのリストがあります。 Firefoxの場合は ' Firebug 'プラグインを使用できますが、Chromeの場合は ' XPath Helper 'が最も便利なツールです。
JMeterのCSS / JQuery Extractorを使用した相関
CSS / JQueryエクストラクタを使用すると、正規表現を使用して記述するのが難しいCSS / JQueryセレクタ構文を使用して、サーバレスポンスから値を抽出できます。ポストプロセッサとして、要求されたノード、テキストまたは属性値を要求サンプラから抽出し、その結果を所定の変数に格納するために、この要素を実行する必要があります。このコンポーネントは、XPath Extractorと非常によく似ています。 CSS、JQuery、またはXPathの選択は、通常ユーザーの好みによって異なりますが、XPathやJQueryはDOMを横切ることができますが、CSSはDOMを歩くことはできません。 Javaに関連するStack Overflowのドキュメントからすべてのトピックを抽出したいと仮定しましょう。 Firebugプラグインを使用して、FirefoxのCSS / JQueryセレクタやChromeのCSSセレクタテスタをテストできます。
このコンポーネントを使用するには、「JMeter」メニューを開き、「 追加」 - >「ポストプロセッサー」 - >「CSS / JQuery Extractor」
このエクストラクターのフィールドのほとんどは、Regular Expression Extractorフィールドと似ています。その例からその説明を得ることができます。しかし、1つの違いは、 "CSS / JQuery Extractor implementation"フィールドです。 JMeter 2.9以降は、 jsoupの実装( ここでの構文の詳細な説明)またはJODD Lagarto (詳細な構文はここにあります )の2つの異なる実装に基づいてCSS / JQuery抽出を使用することができます。どちらの実装もほぼ同じで、構文の違いはわずかです。それらの間の選択は、ユーザーの好みに基づいています。
上記の構成に基づいて、要求されたページからすべてのトピックを抽出し、「デバッグサンプラー」および「結果ツリーの表示」リスナーを使用して抽出結果を検証することができます。
JSON Extractorを使用した相関
JSONは、Webベースのアプリケーションで使用される一般的に使用されるデータ形式です。 JMeter JSON Extractorは、JMeterのJSONベースの応答から値を抽出するためにJSON Path式を使用する方法を提供します。このポストプロセッサーは、HTTPサンプラーの子として、または応答を持つ他のサンプラーに配置する必要があります。
このコンポーネントを使用するには、「JMeter」メニューを開き、「 追加」 - >「ポストプロセッサー」 - >「JSON Extractor 」を開きます。
JSON Extractorは、Regular Expression Extractorと非常によく似ています。この例では、ほとんどすべての主要フィールドが記述されています。特定のJSON Extractorパラメータは1つだけです: 'Compute concatenation var'。多くの結果が見つかった場合、この抽出プログラムは '、'区切り記号を使用して連結し、_ALLという名前のvarに格納します。
JSONでこのサーバーの応答を想定しましょう:
{
"store": {
"book": [
{ "category": "reference",
"author": "Nigel Rees",
"title": "Sayings of the Century",
"price": 8.95
},
{ "category": "fiction",
"author": "Evelyn Waugh",
"title": "Sword of Honour",
"price": 12.99
},
{ "category": "fiction",
"author": "Herman Melville",
"title": "Moby Dick",
"isbn": "0-553-21311-3",
"price": 8.99
},
{ "category": "fiction",
"author": "J. R. R. Tolkien",
"title": "The Lord of the Rings",
"isbn": "0-395-19395-8",
"price": 22.99
}
],
"bicycle": {
"color": "red",
"price": 19.95
}
}
}
以下の表は、指定されたJSONからデータを抽出するさまざまな方法の素晴らしい例を示しています。
このリンクを使用すると、JSONパス形式の詳細な説明と関連する例を見つけることができます。
BlazeMeterの「SmartJMX」を使用した自動相関
パフォーマンススクリプトを手動で記述するときは、相関関係を自分で処理する必要があります。しかし、スクリプトを作成する別のオプション、つまり自動化スクリプトの記録があります。一方では、手作業のアプローチは構造化されたスクリプトを書くのに役立ち、必要な抽出器をすべて同時に追加することができます。一方、このアプローチは非常に時間がかかる。
オートメーションスクリプトの録音は非常に簡単で、同じ作業をより迅速に行うことができます。しかし、一般的な記録方法を使用する場合、スクリプトは非常に非構造化され、通常、追加のパラメータ設定を追加する必要があります。 Blazemeterレコーダーの「Smart JMX」機能は、両方のメリットを兼ね備えています。このリンクで見つけることができます:[ https://a.blazemeter.com/app/recorder/index.html] [1 ]
登録後、「レコーダー」セクションに移動します。
スクリプト記録を開始するには、まずブラウザのプロキシを設定する必要があります( ここで説明します )。今回は、プロキシホストとBlazeMeterレコーダーが提供するポートを取得する必要があります。
ブラウザが設定されている場合は、下部にある赤いボタンを押してスクリプトの録画を進めることができます。これで、テスト対象のアプリケーションにアクセスし、録画のためのユーザーワークフローを実行できます。
スクリプトが記録されたら、結果を「スマート」JMXファイルにエクスポートできます。エクスポートされたjmxファイルには、スクリプトを設定してパラメータ化するためのオプションリストが追加作業なしで含まれています。これらの改良の1つは、「スマート」JMXが自動的に相関候補を見つけ出し、それを適切な抽出器で置き換え、さらにパラメータ化するための簡単な方法を提供することです。