-
18 はじめに
- 18.1 サンプラー
- 18.2 ロジックコントローラー
- 18.3 リスナー
- 18.4 構成要素
- 18.5 アサーション
- 18.6 タイマー
- 18.7 プリプロセッサ
- 18.8 ポストプロセッサ
- 18.9 その他の機能
18 はじめに ¶
18.1 サンプラー¶
サンプラーは、JMeter の実際の作業を実行します。各サンプラー ( Flow Control Actionを除く) は、1 つ以上のサンプル結果を生成します。サンプル結果にはさまざまな属性 (成功/失敗、経過時間、データ サイズなど) があり、さまざまなリスナーで表示できます。
FTP リクエスト¶
レイテンシーは、ログインにかかる時間に設定されます。
パラメータ ¶
HTTP リクエスト¶
このサンプラーを使用すると、HTTP/HTTPS 要求を Web サーバーに送信できます。また、JMeter が画像やその他の埋め込みリソースの HTML ファイルを解析し、それらを取得するために HTTP 要求を送信するかどうかを制御することもできます。次の種類の埋め込みリソースが取得されます。
- 画像
- アプレット
- スタイルシート (CSS) およびそれらのファイルから参照されるリソース
- 外部スクリプト
- フレーム、iframe
- 背景画像(本体、表、TD、TR)
- 背景音
デフォルトのパーサーはorg.apache.jmeter.protocol.http.parser.LagartoBasedHtmlParser です。これは、プロパティ「 htmlparser.className」を使用して変更できます。詳細については、 jmeter.propertiesを参照してください。
複数の要求を同じ Web サーバーに送信する場合は、HTTP 要求の既定の 構成要素を使用することを検討してください。これにより、HTTP 要求ごとに同じ情報を入力する必要がなくなります。
または、HTTP リクエストを手動で追加する代わりに、JMeter のHTTP(S) テスト スクリプト レコーダーを使用して作成することもできます。これにより、多数の HTTP リクエストまたは多数のパラメーターを含むリクエストがある場合に、時間を節約できます。
サンプラーを定義するために使用される 3 つの異なるテスト要素があります。
- AJP/1.3 サンプラー
- Tomcat mod_jk プロトコルを使用します (Apache httpd を必要とせずに AJP モードで Tomcat をテストできます)。AJP Sampler は複数ファイルのアップロードをサポートしていません。最初のファイルのみが使用されます。
- HTTP リクエスト
- これには、使用する HTTP プロトコルの実装を選択する実装ドロップダウン ボックスがあります。
- ジャワ
- JVM が提供する HTTP 実装を使用します。これには、HttpClient 実装と比較していくつかの制限があります。以下を参照してください。
- HTTPClient4
- Apache HttpComponents HttpClient 4.x を使用します。
- ブランク値
- HTTP サンプラーの実装を設定しないため、存在する場合は HTTP 要求のデフォルトに依存するか、jmeter.propertiesで定義されたjmeter.httpsamplerプロパティに依存します
- GraphQL HTTP リクエスト
- これはHTTP リクエストの GUI バリエーションであり、GraphQL Query、Variables、およびOperation Nameを表示または編集するためのより便利な UI 要素を提供し、同じサンプラーを使用して内部でそれらを HTTP Arguments に自動的に変換します。以下の UI 要素は、HTTP/HTTPS リクエストを介した GraphQL にとってあまり便利ではないか、無関係であるため、非表示にするかカスタマイズします。
- メソッド: GraphQL over HTTP 仕様に準拠した POST メソッドと GET メソッドのみが使用可能です。デフォルトでは POST メソッドが選択されています。
- [パラメーター] タブと[投稿本文] タブ: 代わりに、クエリ、変数、および操作名の UI 要素を使用して、パラメーターの内容を表示または編集できます。
- [ファイルのアップロード] タブ: GraphQL クエリとは関係ありません。
- [Advanced] タブの [ Embedded Resources from HTML Files ] セクション: GraphQL JSON 応答には関係ありません。
Java HTTP 実装にはいくつかの制限があります。
- 接続の再利用方法を制御することはできません。接続が JMeter によって解放されると、同じスレッドによって再利用される場合とされない場合があります。
- API はシングル スレッドでの使用に最適です。さまざまな設定がシステム プロパティによって定義されるため、すべての接続に適用されます。
- Kerberos 認証のサポートなし
- Keystore Config を使用したクライアント ベースの証明書のテストはサポートされていません。
- 再試行メカニズムの制御の向上
- 仮想ホストはサポートしていません。
- 次のメソッドのみをサポートします: GET、POST、HEAD、OPTIONS、PUT、DELETEおよびTRACE
- DNS Cache Managerによる DNS キャッシングの制御の向上
要求がサーバーまたはプロキシのログイン認証を必要とする場合 (つまり、ブラウザーがポップアップ ダイアログ ボックスを作成する場合)、HTTP Authorization Manager構成要素も追加する必要があります。通常のログイン (つまり、ユーザーがフォームにログイン情報を入力する場所) の場合、フォーム送信ボタンが何をするかを理解し、適切なメソッド (通常はPOST ) とフォーム定義から適切なパラメーターを使用して HTTP リクエストを作成する必要があります。 . ページが HTTP を使用している場合は、JMeter プロキシを使用してログイン シーケンスを取得できます。
スレッドごとに個別の SSL コンテキストが使用されます。単一の SSL コンテキスト (ブラウザの標準的な動作ではない) を使用する場合は、JMeter プロパティを設定します。
https.sessioncontext.shared=trueデフォルトでは、バージョン 5.0 以降、SSL コンテキストはスレッド グループの反復中に保持され、テストの反復ごとにリセットされます。テスト計画で同じユーザーが複数回反復する場合は、これを false に設定する必要があります。
httpclient.reset_state_on_thread_group_iteration=true
https.default.protocol=SSLv3
JMeter では、プロパティhttps.socket.protocolsを変更することで、追加のプロトコルを有効にすることもできます。
リクエストで Cookie を使用する場合は、 HTTP Cookie Managerも必要になります 。これらの要素のいずれかをスレッド グループまたは HTTP 要求に追加できます。認証または Cookie が必要な HTTP リクエストが複数ある場合は、要素をスレッド グループに追加します。これにより、すべての HTTP 要求コントローラーが同じ承認マネージャーと Cookie マネージャーの要素を共有します。
リクエストが「URL 書き換え」と呼ばれる手法を使用してセッションを維持する場合は、 追加の構成手順についてセクション6.1 URL 書き換えによるユーザー セッションの処理を参照してください。
パラメータ ¶
- HTTP Request Defaultsによって提供されます。
- または、スキーム、ホスト、ポートを含む完全な URL ( scheme://host:port ) が[パス]フィールドに設定されます。
Duration アサーションを使用して、完了するまでに時間がかかりすぎる応答を検出できます。
JMeter プロパティhttpsampler.user_defined_methodsを使用して、HttpClient4 用にさらに多くのメソッドを事前定義できます 。
「リダイレクトがリクエストされましたが、followRedirects が無効になっています」これは無視できます。
JMeter は、絶対リダイレクト URL と相対リダイレクト URL の両方で、 「 /../segment 」の形式のパスを折りたたみます。たとえば、http://host/one/../twoはhttp://host/twoに折りたたまれます。必要に応じて、JMeter プロパティhttpsampler.redirect.removeslashdotdot=falseを設定することで、この動作を抑制することができます。
さらに、各パラメータを URL エンコードするかどうかを指定できます。これが何を意味するのかわからない場合は、おそらくそれを選択することをお勧めします。値に次のような文字が含まれている場合、通常はエンコードが必要です。
- ASCII 制御文字
- 非 ASCII 文字
- 予約文字: URL では、構文を定義する際に特別な用途に使用される文字がいくつかあります。これらの文字が URL 内の特別な役割で使用されていない場合は、エンコードする必要があります。例: 「$」、「&」、「+」、「、」、「/」、「:」、「」。', ' = ', ' ? '、' @ '
- 安全でない文字: 一部の文字は、さまざまな理由で URL 内で誤解される可能性があります。これらの文字も常にエンコードする必要があります。例: ' '、' < '、' > '、' # '、' % '、…
POST、PUT 、またはPATCHリクエストで、「パラメータ名」属性 (下記) が省略されたファイルが 1 つある場合、そのファイルはリクエストの本文全体として送信されます。つまり、ラッパーは追加されません。これにより、任意の本文を送信できます。この機能は、POSTリクエストだけでなく、PUTリクエストにもあります。 パラメータ処理の詳細については、以下を参照してください。
ソース アドレス値を区別するには、次のタイプを選択します。
- IP/ホスト名を選択して、特定の IP アドレスまたは (ローカル) ホスト名を使用します
- [デバイス]を選択して、そのインターフェイスで使用可能な最初のアドレスを選択します。これは IPv4 または IPv6 のいずれかです。
- デバイス IPv4を選択して、デバイス名の IPv4 アドレスを選択します ( eth0、lo、em0など)。
- [ Device IPv6 ] を選択して、デバイス名の IPv6 アドレス ( eth0、lo、em0など)を選択します。
このプロパティは、IP スプーフィングを有効にするために使用されます。このサンプルのデフォルトのローカル IP アドレスをオーバーライドします。JMeter ホストには、複数の IP アドレス (つまり、IP エイリアス、ネットワーク インターフェイス、デバイス) が必要です。値には、ホスト名、IP アドレス、または「eth0」、「lo」、「wlan0」などのネットワーク インターフェイス デバイスを指定できます。
プロパティhttpclient.localaddressが定義されている場合、それがすべての HttpClient リクエストに使用されます。
次のパラメーターは、 GraphQL HTTP Requestでのみ使用できます。
パラメータ ¶
パラメーターの処理:
POSTおよびPUT
メソッドの場合
、送信するファイルがなく、パラメーターの名前が省略されている場合、パラメーターのすべての値を連結して本文が作成されます。行末文字を追加せずに値が連結されることに注意してください。これらは、値フィールドで__char()関数を使用して追加できます。これにより、任意の本文を送信できます。encoding フラグが設定されている場合、値はエンコードされます。送信されるcontent-typeリクエスト ヘッダーを
制御する方法については、上記の MIME タイプも参照してください。
他のメソッドでは、パラメーターの名前が欠落している場合、パラメーターは無視されます。これにより、変数で定義されたオプションのパラメーターを使用できます。
リクエストに名前のないパラメーターしかない場合 (またはパラメーターがまったくない場合) に、[本文データ] タブに切り替えるオプションがあります。このオプションは、次の場合に役立ちます (特に)。
- GWT RPC HTTP リクエスト
- JSON REST HTTP リクエスト
- XML REST HTTP リクエスト
- SOAP HTTP リクエスト
Body Dataモードでは、最後の行を除いて、各行に CRLF が追加されて送信さ れます。データの最後の行の後にCRLFを送信するには、その後に空の行があることを確認してください。(これは、カーソルを次の行に置くことができるかどうかに注目しない限り、見ることができません。)
メソッド処理:
GET 、 DELETE 、 POST 、 PUT 、およびPATCHリクエスト メソッドは同様に機能しますが、3.1 の時点ではPOSTメソッドのみがマルチパート リクエストまたはファイル アップロードをサポートする点が異なります。PUTおよびPATCHメソッド本体は、次のいずれかとして提供する必要があります。
- 空のパラメータ名フィールドを持つファイルとして本文を定義します。この場合、MIME タイプが Content-Type として使用されます
- 名前のないパラメーター値として本体を定義します
- 本文データタブを使用する
GET、DELETE、およびPOSTメソッドには、[パラメーター] タブを使用してパラメーターを渡す追加 の方法があります。 GET、DELETE、PUT、およびPATCHには Content-Type が必要です。ファイルを使用しない場合は、ヘッダー マネージャーをサンプラーにアタッチし、そこで Content-Type を定義します。
JMeter は、埋め込みリソースからの応答をスキャンします。htmlParser、cssParser、wmlParserなどのパーサー ID のリストであるHTTPResponse.parsersプロパティを使用します。見つかった ID ごとに、JMeter はさらに 2 つのプロパティをチェックします。
- id.types - コンテンツ タイプのリスト
- id.className - 埋め込まれたリソースを抽出するために使用されるパーサー
設定の詳細については、 jmeter.propertiesファイルを参照してください。HTTPResponse.parserプロパティが設定されていない場合、JMeter は以前の動作に戻ります。つまり、text/html応答のみがスキャンされます。
低速接続のエミュレート:HttpClient4とJava Sampler は低速接続のエミュレーションをサポートしています。jmeter.propertiesの次のエントリを参照してください。
# 低速接続をエミュレートするには、1 秒あたりの文字数 > 0 を定義します #httpclient.socket.http.cps=0 #httpclient.socket.https.cps=0ただし、Javaサンプラーは低速の HTTPS 接続のみをサポートします。
応答サイズの計算
の実装では、応答本文のサイズにオーバーヘッドが含まれるため、値が応答コンテンツのバイト数よりも大きくなる場合があります。
再試行の処理
デフォルトでは、HttpClient4 と Java の両方の実装で再試行は 0 に設定されています。つまり、再試行は試行されません。
HttpClient4 の場合、関連する JMeter プロパティを設定することで再試行回数をオーバーライドできます。次に例を示します。
httpclient4.retrycount=3
httpclient4.request_sent_retry_enabled=true
http.java.sampler.retries=3
注: 証明書はアルゴリズムの制約に準拠していません
次のエラーが発生する場合があります: java.security.cert.CertificateException:
SSL 証明書 (それ自体またはMD2 を使用する署名アルゴリズム ( md2WithRSAEncryption など) または 1024 ビット未満のサイズの SSL 証明書を使用する信頼チェーン内の SSL 証明書。
このエラーは、Java 8 でのセキュリティの強化に関連しています。
HTTPS 要求を実行できるようにするには、Java jdk.certpath.disabledAlgorithmsプロパティを編集して、Java インストールのセキュリティをダウングレードします。ケースに応じて、MD2 値またはサイズの制約を削除します。
このプロパティは次のファイルにあります。
JAVA_HOME/jre/lib/security/java.security
詳細については 、 バグ 56357を参照してください。
JDBC リクエスト¶
このサンプラーを使用すると、JDBC リクエスト (SQL クエリ) をデータベースに送信できます。
これを使用する前に、 JDBC 接続構成構成要素 をセットアップする必要があり ます
変数名リストが指定されている場合、Select ステートメントによって返される行ごとに、対応する列の値を使用して変数が設定され (変数名が指定されている場合)、行数も設定されます。たとえば、Select ステートメントが 2 行 3 列を返し、変数リストがA,,Cの場合、次の変数が設定されます。
A_#=2 (行数) A_1=列 1、行 1 A_2=列 1、行 2 C_#=2 (行数) C_1=列 3、行 1 C_2=列 3、行 2
Select ステートメントがゼロ行を返す場合、A_#およびC_#変数は0に設定され、他の変数は設定されません。
古い変数は必要に応じてクリアされます。たとえば、最初の選択で 6 行が取得され、2 番目の選択で 3 行しか返されない場合、4、5、6 行の追加の変数が削除されます。
パラメータ ¶
- ステートメントを選択
- 更新ステートメント - 挿入と削除にもこれを使用します
- 呼び出し可能なステートメント
- プリペアード Select ステートメント
- 準備された更新ステートメント - これを挿入と削除にも使用します
- 専念
- ロールバック
- 自動コミット (false)
- 自動コミット(true)
- 編集 - これは、上記のいずれかに評価される変数参照である必要があります
- select * from t_customers where id=23
-
CALL SYSCS_UTIL.SYSCS_EXPORT_TABLE (ヌル、?、?、ヌル、ヌル、ヌル)
- パラメータ値: tablename、filename
- パラメータの型: VARCHAR、VARCHAR
値のいずれかにコンマまたは二重引用符が含まれている場合、リストは二重引用符で囲む必要があり、埋め込まれた二重引用符はすべて二重引用符で囲む必要があります。たとえば、次のようにします。
"Dbl-Quote: "" and Comma: ,"
これらはクラスjava.sql.Typesのフィールドとして定義されています。たとえば、
Javadoc for java.sql.Typesを参照してください。
指定されていない場合、" IN " と見なされます。つまり、" DATE " は " IN DATE "と同じです。 タイプがjava.sql.Types
にあるフィールドのいずれでもない場合、JMeter は対応する整数も受け入れます。たとえば、OracleTypes.CURSOR == -10であるため、「 INOUT -10 」を使用できます。
ステートメント内のプレースホルダーと同じ数の型が必要です。
columnValue = vars.getObject("resultObject").get(0).get("列名");
- 文字列として保存 (デフォルト) - 変数名リストのすべての変数は文字列として保存され、リストに存在する場合、ResultSetを反復処理しません。CLOBは文字列に変換されます。BLOBは、UTF-8 でエンコードされたバイト配列であるかのように文字列に変換されます。CLOBとBLOBの両方がjdbcsampler.max_retain_result_sizeバイト後に切り取られます。
- オブジェクトとして保存- 変数名リストのResultSetタイプの変数はオブジェクトとして保存され、後続のテスト/スクリプトでアクセスして反復できますが、 ResultSetを反復しません。CLOBは、 Store As Stringが選択されているかのように処理されます。BLOBはバイト配列として格納されます。CLOBとBLOBの両方がjdbcsampler.max_retain_result_sizeバイト後に切り取られます。
- Count Records - ResultSetタイプの変数は、結果としてレコードの数を表示することによって反復されます。変数は文字列として格納されます。BLOBの場合、オブジェクトのサイズが格納されます。
Java リクエスト¶
このサンプラーを使用すると、 org.apache.jmeter.protocol.java.sampler.JavaSamplerClientインターフェイスを実装する Java クラスを制御できます 。このインターフェースの独自の実装を作成することにより、JMeter を使用して、複数のスレッド、入力パラメーター制御、およびデータ収集を利用できます。
プルダウン メニューには、クラスパスで JMeter によって検出されたすべての実装のリストが表示されます。パラメータは、実装で定義されているように、以下の表で指定できます。2 つの簡単な例 ( JavaTestとSleepTest ) が提供されています。
JavaTestサンプル サンプラーは、ほぼすべてのフィールドに値を設定できるため、テスト計画を確認するのに役立ちます 。これらはアサーションなどで使用できます。フィールドでは変数を使用できるため、これらの値を簡単に確認できます。
パラメータ ¶
次のパラメーターは、SleepTestおよびJavaTestの実装に適用されます。
パラメータ ¶
の量: スリープ時間は次のように計算されます。
totalSleepTime = SleepTime + (System.currentTimeMillis() % SleepMask)
次のパラメーターは、JavaTest実装に追加で適用されます。
パラメータ ¶
LDAP リクエスト¶
複数の要求を同じ LDAP サーバーに送信する場合は 、各 LDAP 要求に同じ情報を入力する必要がないように、 LDAP 要求の既定の構成要素を使用することを検討してください。
ログイン構成要素がログインとパスワードにも使用する のと同じ方法。LDAP サーバーをテストするためのテスト ケースを作成するには、2 つの方法があります。
- 組み込みのテスト ケース。
- ユーザー定義のテスト ケース。
LDAP をテストする 4 つのテスト シナリオがあります。テストは以下のとおりです。
- テストを追加
- 組み込みテスト:
これにより、事前定義されたエントリが LDAP サーバーに追加され、実行時間が計算されます。テストの実行後、作成されたエントリは LDAP サーバーから削除されます。
- ユーザー定義のテスト:
これにより、LDAP サーバーにエントリが追加されます。ユーザーはテーブルにすべての属性を入力する必要があります。エントリはテーブルから収集されて追加されます。実行時間が計算されます。作成したエントリは、テスト後に削除されません。
- 組み込みテスト:
- テストの変更
- 組み込みテスト:
これにより、最初に定義済みのエントリが作成され、次に LDAP サーバーで作成されたエントリが変更されます。そして、実行時間が計算されます。テストの実行後、作成されたエントリは LDAP サーバーから削除されます。
- ユーザー定義のテスト:
これにより、LDAP サーバーのエントリが変更されます。ユーザーはテーブルにすべての属性を入力する必要があります。テーブルからエントリが収集され、変更されます。実行時間が計算されます。エントリは LDAP サーバーから削除されません。
- 組み込みテスト:
- 検索テスト
- 組み込みテスト:
これにより、最初にエントリが作成され、次に属性が使用可能かどうかが検索されます。検索クエリの実行時間を計算します。実行の最後に、作成されたエントリは LDAP サーバーから削除されます。
- ユーザー定義のテスト:
これにより、検索ベース (ユーザーによって定義された) でユーザー定義のエントリ (検索フィルター) が検索されます。エントリは、LDAP サーバーで使用できる必要があります。実行時間が計算されます。
- 組み込みテスト:
- テストの削除
- 組み込みテスト:
これにより、最初に定義済みのエントリが作成され、次に LDAP サーバーから削除されます。実行時間が計算されます。
- ユーザー定義のテスト:
これにより、LDAP サーバー内のユーザー定義のエントリが削除されます。エントリは、LDAP サーバーで使用できる必要があります。実行時間が計算されます。
- 組み込みテスト:
パラメータ ¶
LDAP 拡張リクエスト¶
複数の要求を同じ LDAP サーバーに送信する場合は、 LDAP 要求ごとに同じ情報を入力する必要がないように、 LDAP 拡張要求デフォルト構成要素の使用を検討してください。
9 つのテスト操作が定義されています。これらの操作を以下に示します。
- スレッドバインド
-
LDAP 要求はすべて LDAP セッションの一部であるため、最初に行う必要があるのは、LDAP サーバーへのセッションを開始することです。このセッションを開始するには、スレッド バインドが使用されます。これは、LDAP の「バインド」操作と同じです。ユーザーは、セッションを開始するために使用されるユーザー名(識別名) とパスワードを提供するように要求されます。パスワードが指定されていない場合、または間違ったパスワードが指定されている場合は、匿名セッションが開始されます。パスワードを省略してもこのテストに失敗することはありません。パスワードが間違っていても失敗します。(NB これはテスト計画に暗号化されずに保存されます)
パラメーター
属性説明必須名前ツリーに表示されるこのサンプラーのわかりやすい名前。いいえサーバー名LDAP サーバーの名前 (または IP アドレス)。はいポートLDAP サーバーが listen しているポート番号。これを省略した場合、JMeter は LDAP サーバーがデフォルト ポート (389) でリッスンしていると想定します。いいえDN後続の操作に使用される基本オブジェクトの識別名。すべての操作の開始点として使用できます。この DN よりも高いレベルで操作を開始することはできません!いいえユーザー名バインドするユーザーの完全識別名。いいえパスワード上記のユーザーのパスワード。省略した場合、匿名バインドになります。正しくない場合、サンプラーはエラーを返し、匿名バインドに戻ります。(NB これはテスト計画に暗号化されずに保存されます)いいえ接続タイムアウト (ミリ秒単位)接続のタイムアウト。超過した場合は接続が中止されますいいえセキュア LDAP プロトコルを使用するldap://の代わりにldaps://スキームを使用するいいえすべての証明書を信頼するすべての証明書を信頼します。[セキュア LDAP プロトコルを使用する]がオンになっている場合にのみ使用されますいいえ - スレッドアンバインド
-
これは単にセッションを終了するための操作です。これは、LDAP の「アンバインド」操作と同じです。
パラメーター
属性説明必須名前ツリーに表示されるこのサンプラーのわかりやすい名前。いいえ - シングルバインド/アンバインド
-
これは、LDAP の「バインド」操作と「バインド解除」操作の組み合わせです。これは、任意のユーザーの認証要求/パスワード チェックに使用できます。ユーザーとパスワードの組み合わせの有効性を確認するためだけに、新しいセッションを開き、セッションを再度終了します。
パラメーター
属性説明必須名前ツリーに表示されるこのサンプラーのわかりやすい名前。いいえユーザー名バインドするユーザーの完全識別名。はいパスワード上記のユーザーのパスワード。省略した場合、匿名バインドになります。正しくない場合、サンプラーはエラーを返します。(NB これはテスト計画に暗号化されずに保存されます)いいえ - エントリの名前を変更
-
これは、LDAP の「moddn」操作です。エントリの名前を変更するために使用できますが、エントリまたは完全なサブツリーを LDAP ツリー内の別の場所に移動するためにも使用できます。
パラメーター
属性説明必須名前ツリーに表示されるこのサンプラーのわかりやすい名前。いいえ旧エントリー名スレッド バインド操作で指定された DN に関連する、名前変更または移動するオブジェクトの現在の識別名。はい新しい識別名名前を変更または移動するオブジェクトの新しい識別名。スレッド バインド操作で指定された DN に相対的です。はい - テストを追加
-
これが LDAP の「追加」操作です。これを使用して、あらゆる種類のオブジェクトを LDAP サーバーに追加できます。
パラメーター
属性説明必須名前ツリーに表示されるこのサンプラーのわかりやすい名前。いいえエントリ DNスレッド バインド操作で指定された DN に関連する、追加するオブジェクトの識別名。はいテストを追加オブジェクトに使用する属性とその値のリスト。複数値の属性を追加する必要がある場合は、同じ属性をそれぞれの値とともにリストに数回追加する必要があります。はい - テストを削除
-
これは LDAP の「削除」操作です。LDAP ツリーからオブジェクトを削除するために使用できます。
パラメーター
属性説明必須名前ツリーに表示されるこのサンプラーのわかりやすい名前。いいえ消去スレッド バインド操作で指定された DN に関連する、削除するオブジェクトの識別名。はい - 検索テスト
-
これは LDAP の「検索」操作であり、検索の定義に使用されます。
パラメーター
属性説明必須名前ツリーに表示されるこのサンプラーのわかりやすい名前。いいえ検索ベーススレッド バインド操作で指定された DN に関連する、検索対象のサブツリーの識別名。いいえ検索フィルターsearchfilter は、LDAP 構文で指定する必要があります。はい範囲baseobject-には0、onelevel- には1、サブツリー検索には2を使用します。(デフォルト = 0 )いいえサイズ制限サーバーから返される結果の最大数を指定します。(デフォルト = 0、つまり制限なし。)サンプラーが結果の最大数に達すると、エラーコード4で失敗します。いいえ制限時間サーバーが検索に費やすことができる最大 (CPU) 時間 (ミリ秒単位) を指定します。これは応答時間については何も言っていないことに注意してください。(デフォルトは0で、制限なしを意味します)いいえ属性返す属性をセミコロンで区切って指定します。空のフィールドはすべての属性を返しますいいえオブジェクトを返すオブジェクトが返されるか ( true )、返されないか ( false )。デフォルト = falseいいえ逆参照エイリアスtrue の場合、エイリアスを逆参照します。falseの場合、それらに従いません (デフォルト = false )いいえ検索結果を解析しますか?true の場合、検索結果が応答データに追加されます。falseの場合、結果が見つかったかどうかに関係なく、マーカーが応答データに追加されます。いいえ - 改造試験
-
これが LDAP の「変更」操作です。オブジェクトの変更に使用できます。属性の値を追加、削除、または置換するために使用できます。
パラメーター
属性説明必須名前ツリーに表示されるこのサンプラーのわかりやすい名前。いいえエントリー名スレッド バインド操作で指定された DN に関連する、変更するオブジェクトの識別名はい改造試験attribute-value-opCode のトリプル。opCodeは、任意の有効な LDAP operationCode (
add 、 delete 、 removeまたはreplace )にすることができます。削除操作で 値を指定しない場合、指定された属性のすべての値が削除されます。削除操作で 値を指定すると、指定された値のみが削除されます。 この値が存在しない場合、サンプラーはテストに失敗します。はい - 比較
-
これが LDAP の「比較」操作です。特定の属性の値を既知の値と比較するために使用できます。実際には、これは主に、特定の人が何らかのグループのメンバーであるかどうかを確認するために使用されます。このような場合、ユーザーの DN を特定の値として、groupOfNamesタイプのオブジェクトの属性「 member 」の値と比較できます。比較操作が失敗した場合、このテストはエラーコード49で失敗します。
パラメーター
属性説明必須名前ツリーに表示されるこのサンプラーのわかりやすい名前。いいえエントリ DNスレッド バインド操作で指定された DN に関連する、属性を比較するオブジェクトの現在の識別名。はいフィルタを比較「属性=値」の形式ではい
アクセスログサンプラー¶
AccessLogSampler は、アクセス ログを読み取り、http 要求を生成するように設計されています。アクセス ログに慣れていない方のために説明すると、アクセス ログとは、ウェブサーバーが受け付けたすべてのリクエストを保持するログです。これは、すべての画像、CSS ファイル、JavaScript ファイル、html ファイルなどを意味します。
Tomcat は、アクセス ログに共通の形式を使用します。これは、共通ログ形式を使用するすべての Web サーバーが AccessLogSampler を使用できることを意味します。一般的なログ形式を使用するサーバーには、Tomcat、Resin、Weblogic、および SunOne が含まれます。一般的なログ形式は次のようになります。
127.0.0.1 - - [21/Oct/2003:05:37:21 -0500] "GET /index.jsp?%2Findex.jsp= HTTP/1.1" 200 8343
将来的には、応答コード200を持たないエントリを除外するとよいでしょう。サンプラーの拡張はかなり簡単です。実装する必要がある 2 つのインターフェイスがあります。
- org.apache.jmeter.protocol.http.util.accesslog.LogParser
- org.apache.jmeter.protocol.http.util.accesslog.Generator
AccessLogSampler の現在の実装では、ジェネレーターを使用して新しい HTTPSampler を作成します。サーバー名、ポート、および取得イメージは、AccessLogSampler によって設定されます。次に、整数1を指定してパーサーが呼び出され、 1 つのエントリを解析するように指示されます。その後、 HTTPSampler.sample()を呼び出してリクエストを行います。
サンプル = (HTTPSampler) GENERATOR.generateRequest(); samp.setDomain(this.getDomain()); samp.setPort(this.getPort()); samp.setImageParser(this.isImageParser()); PARSER.parse(1); res = samp.sample(); res.setSampleLabel(samp.toString());LogParser で必要なメソッドは次のとおりです。
- setGenerator(ジェネレータ)
- パース(整数)
Generatorインターフェイスを 実装するクラスは、すべてのメソッドの具体的な実装を提供する必要があります。いずれかのインターフェースを実装する方法の例については、 StandardGeneratorおよびTCLogParserを参照してください。
(ベータコード)
パラメータ ¶
TCLogParser は、スレッドごとに独立してアクセス ログを処理します。SharedTCLogParserとOrderPreservingLogParserはファイルへのアクセスを共有します。つまり、各スレッドはログの次のエントリを取得します。
SessionFilterは 、スレッド間で Cookie を処理することを目的としています。エントリを除外するのではなく、特定の IP の Cookie が一度に 1 つのスレッドで処理されるように Cookie マネージャーを変更します。2 つのスレッドが同じクライアント IP アドレスからのサンプルを処理しようとすると、一方は他方が完了するまで待機することを余儀なくされます。
LogFilterは 、アクセス ログ エントリをファイル名と正規表現でフィルタリングし、ファイル拡張子を置換できるようにすることを目的としています。ただし、現時点では GUI から設定することはできないため、実際には使用できません。
BeanShell サンプラー¶
このサンプラーを使用すると、BeanShell スクリプト言語を使用してサンプラーを作成できます。
BeanShell の使用の詳細については、BeanShell の Web サイトを参照してください。
テスト要素は、ThreadListenerおよびTestListenerインターフェイス メソッドをサポートします。これらは初期化ファイルで定義する必要があります。定義の例 については、ファイルBeanShellListeners.bshrcを参照してください。
BeanShell サンプラーは、Interruptibleインターフェースもサポートしています。interrupt()メソッドは、スクリプトまたは init ファイルで定義できます。
パラメータ ¶
- パラメーター
- パラメータを単一の変数として含む文字列
- bsh.args
- パラメータを含む文字列配列、空白で分割
プロパティ「beanshell.sampler.init」が定義されている場合、ソース ファイルの名前としてインタープリターに渡されます。これは、共通のメソッドと変数を定義するために使用できます。bin ディレクトリにサンプルの初期化ファイルがあります: BeanShellSampler.bshrc。
スクリプト ファイルが指定されている場合はそれが使用され、指定されていない場合はスクリプトが使用されます。
BeanShell は現在、ジェネリックや拡張 for ループなどの Java 5 構文をサポートしていません。
スクリプトを呼び出す前に、いくつかの変数が BeanShell インタープリターに設定されます。
Parameters フィールドの内容は、変数「 Parameters 」に入れられます。また、文字列は区切り文字として 1 つのスペースを使用して個別のトークンに分割され、結果のリストは文字列配列bsh.argsに格納されます。
セットアップされる BeanShell 変数の完全なリストは次のとおりです。
- log -ロガー
- Label - サンプラーのラベル
- FileName - ファイル名 (存在する場合)
- パラメータ- パラメータ フィールドのテキスト
- bsh.args - 上記のように分割されたパラメーター
- SampleResult - 現在のSampleResultへのポインタ
- ResponseCodeのデフォルトは200 です
- ResponseMessageのデフォルトは「OK」
- IsSuccessのデフォルトはtrue
- ctx - JMeterContext
-
vars - JMeterVariables - 例
vars.get("VAR1"); vars.put("VAR2","値"); vars.remove("VAR3"); vars.putObject("OBJ1",新しいオブジェクト());
-
props - JMeterProperties (クラスjava.util.Properties ) - 例
props.get("START.HMS"); props.put("PROP1","1234");
スクリプトが完了すると、制御が Sampler に返され、次のスクリプト変数の内容がSampleResult内の対応する変数にコピーされます。
- ResponseCode - 例: 200
- ResponseMessage - 例: 「OK」
- IsSuccess - trueまたはfalse
SampleResult ResponseData は、スクリプトの戻り値から設定されます。スクリプトが null を返す場合、メソッドSampleResult.setResponseData(data)を使用して、応答を直接設定できます 。ここで、データは文字列またはバイト配列のいずれかです。データ型のデフォルトは「テキスト」ですが、メソッドSampleResult.setDataType(SampleResult.BINARY)を使用してバイナリに設定できます 。
SampleResult変数により、スクリプトはSampleResultのすべてのフィールドとメソッドに完全にアクセスできます。たとえば、スクリプトはメソッド setStopThread(boolean)およびsetStopTest(boolean ) にアクセスできます。以下は、単純な (あまり役に立ちません!) サンプル スクリプトです。
if (bsh.args[0].equalsIgnoreCase("StopThread")) { log.info("停止スレッドが検出されました!"); SampleResult.setStopThread(true); } 「ラベル付きのサンプルからのデータ」+ラベルを返します。 //また SampleResult.setResponseData("マイデータ"); null を返します。
別の例:
プロパティbeanshell.sampler.init=BeanShellSampler.bshrcがjmeter.propertiesで定義されていることを確認します。次のスクリプトは、 ResponseDataフィールド
のすべての変数の値を表示します。
getVariables(); を返します。
さまざまなクラス ( JMeterVariables、SampleResultなど) で 使用できるメソッドの詳細については、Javadoc またはソース コードを確認してください。ただし、メソッドを誤用すると、見つけにくい微妙な障害が発生する可能性があることに注意してください。
JSR223 サンプラー¶
JSR223 Sampler を使用すると、JSR223 スクリプト コードを使用して、変数の作成/更新に必要なサンプルまたは計算を実行できます。
SampleResult.setIgnore();この呼び出しには、次の影響があります。
- SampleResult は、View Results Tree、Summariser などの SampleListeners には配信されません。
- SampleResult はアサーションでもポストプロセッサでも評価されません
- SampleResult は、最後のサンプル ステータス (${JMeterThread.last_sample_ok}) を計算するために評価され、ThreadGroup の「Sampler エラー後に実行されるアクション」(JMeter 5.4 以降)
JSR223 テスト要素には、パフォーマンスを大幅に向上させる機能 (コンパイル) があります。この機能を活用するには:
- インライン化する代わりに、スクリプト ファイルを使用します。この機能が ScriptEngine で利用可能な場合、JMeter はそれらをコンパイルし、キャッシュします。
- または、スクリプト テキストを使用し、[利用可能な場合はコンパイル済みスクリプトをキャッシュする]プロパティをオンにします。
この機能を使用する場合は、スクリプト コードで JMeter 変数または JMeter 関数呼び出しをスクリプト コードで直接使用しないようにしてください。キャッシュは最初の置換のみをキャッシュするためです。代わりにスクリプト パラメータを使用します。キャッシングとコンパイルの恩恵を受けるには、スクリプトに使用される言語エンジンが JSR223 Compilableインターフェースを実装する必要があります (Groovy はこれらの 1 つですが、java、beanshell、javascript はそうではありません)。Groovy をスクリプト言語として使用し、利用可能な場合はコンパイル済みスクリプトをキャッシュするをチェックしない場合(キャッシュが推奨されます)、 バージョン 2.4.6 での Groovy メモリ リークのため、 この JVM プロパティ-Dgroovy.use.classvalue=trueを設定する必要があります。以下を参照してください。
jsr223.compiled_scripts_cache_size=100
props.get("START.HMS"); props.put("PROP1","1234");
パラメータ ¶
Velocity などの一部の言語では、JSR223 変数に異なる構文を使用する場合があることに注意してください。
$log.debug("こんにちは" + $vars.get("a"));ベロシティ用。
スクリプト ファイルが指定されている場合はそれが使用され、指定されていない場合はスクリプトが使用されます。
スクリプトを呼び出す前に、いくつかの変数が設定されます。これらは JSR223 変数であることに注意してください。つまり、スクリプトで直接使用できます。
- log -ロガー
- Label - サンプラーのラベル
- FileName - ファイル名 (存在する場合)
- パラメータ- パラメータ フィールドのテキスト
- args - 上記のように分割されたパラメータ
- SampleResult - 現在のSampleResultへのポインタ
- sampler - ( Sampler ) - 現在の Sampler へのポインタ
- ctx - JMeterContext
-
vars - JMeterVariables - 例
vars.get("VAR1"); vars.put("VAR2","値"); vars.remove("VAR3"); vars.putObject("OBJ1",新しいオブジェクト());
-
props - JMeterProperties (クラスjava.util.Properties ) - 例
props.get("START.HMS"); props.put("PROP1","1234");
- OUT - System.out - 例: OUT.println("message")
SampleResult ResponseData は、スクリプトの戻り値から設定されます。スクリプトがnullを返す場合、メソッドSampleResult.setResponseData(data)を使用して、応答を直接設定でき ます。ここで、 data は文字列またはバイト配列です。データ型のデフォルトは「テキスト」ですが、メソッドSampleResult.setDataType(SampleResult.BINARY)を使用してバイナリに設定できます 。
SampleResult 変数により、スクリプトは SampleResult のすべてのフィールドとメソッドに完全にアクセスできます。たとえば、スクリプトはメソッド setStopThread(boolean)およびsetStopTest(boolean ) にアクセスできます。
BeanShell サンプラーとは異なり、JSR223 サンプラーは、スクリプト変数を介してResponseCode、ResponseMessage、およびサンプル ステータスを設定しません。現在、これらを変更する唯一の方法は、SampleResultメソッドを使用することです。
- SampleResult.setSuccessful(真/偽)
- SampleResult.setResponseCode("コード")
- SampleResult.setResponseMessage("メッセージ")
TCP サンプラー¶
TCP サンプラーは、指定されたサーバーへの TCP/IP 接続を開きます。次に、テキストを送信し、応答を待ちます。
[接続の再利用] が選択されている場合、まったく同じホスト名文字列とポートが使用されている場合、接続は同じスレッド内のサンプラー間で共有されます。異なるホスト/ポートの組み合わせは、異なるスレッドと同様に、異なる接続を使用します。「接続の再利用」と「接続のクローズ」の両方が選択されている場合、サンプラーの実行後にソケットがクローズされます。次のサンプラーでは、別のソケットが作成されます。各スレッド ループの最後でソケットを閉じたい場合があります。
エラーが検出された場合、または「接続の再利用」が選択されていない場合、ソケットは閉じられます。次のサンプルで別のソケットが再度開かれます。
次のプロパティを使用して、その操作を制御できます。
- tcp.status.prefix
- ステータス番号の前のテキスト
- tcp.status.suffix
- ステータス番号に続くテキスト
- tcp.status.properties
- ステータス コードをメッセージに変換するプロパティ ファイルの名前
- tcp.handler
- TCP ハンドラー クラスの名前 (デフォルトTCPClientImpl ) - GUI で指定されていない場合にのみ使用されます。
ユーザーは独自の実装を提供できます。クラスはorg.apache.jmeter.protocol.tcp.sampler.TCPClientを拡張する必要があります。
現在、以下の実装が提供されています。
- TCPClientImpl
- BinaryTCPClientImpl
- LengthPrefixedBinaryTCPClientImpl
- TCPClientImpl
- この実装はかなり基本的なものです。応答を読み取るとき、これがプロパティtcp.eolByteの設定によって定義されている場合は行バイトの終わりまで、それ以外の場合は入力ストリームの終わりまで読み取ります。tcp.charsetを設定することにより、文字セットのエンコーディングを制御できます。これは、デフォルトでプラットフォームのデフォルトのエンコーディングになります。
- BinaryTCPClientImpl
- この実装は、16 進数でエンコードされた文字列でなければならない GUI 入力をバイナリに変換し、応答を読み取るときにその逆を実行します。応答を読み取るとき、これがプロパティtcp.BinaryTCPClient.eomByteを設定して定義されている場合は、メッセージ バイトの最後まで読み取ります。それ以外の場合は、入力ストリームの最後まで読み取ります。
- LengthPrefixedBinaryTCPClientImpl
- この実装は、バイナリ メッセージ データにバイナリ長バイトをプレフィックスとして付けることにより、BinaryTCPClientImpl を拡張します。長さプレフィックスのデフォルトは 2 バイトです。これは、プロパティtcp.binarylength.prefix.lengthを設定することで変更できます。
- タイムアウト処理
- タイムアウトが設定されている場合、タイムアウトになると読み取りが終了します。したがって、eolByte / eomByteを使用している場合は、タイムアウトが十分に長いことを確認してください。そうしないと、読み取りが早期に終了します。
- 応答処理
- tcp.status.prefixが定義されている 場合は、応答メッセージで、それに続くサフィックスまでのテキストが検索されます。そのようなテキストが見つかった場合は、それを使用して応答コードを設定します。次に、応答メッセージがプロパティー・ファイル (提供されている場合) からフェッチされます。 " 400 "-" 499 " および " 500 "-" 599 " の範囲の応答コードは、現在、失敗と見なされます。他のすべては成功しています。[これは設定可能にする必要があります!]
テスト実行の最後にソケットが切断されます。
パラメータ ¶
JMS パブリッシャー¶
JMS パブリッシャーは、指定された宛先 (トピック/キュー) にメッセージをパブリッシュします。JMS に慣れていない方のために説明すると、JMS はメッセージング用の J2EE 仕様です。市場には多数の JMS サーバーがあり、いくつかのオープン ソース オプションがあります。
パラメータ ¶
- ファイルから
- 参照ファイルがすべてのサンプルによって読み取られ、再利用されることを意味します。JMeter 3.0以降、ファイル名が変更された場合は再ロードされます
- 以下で指定されたフォルダからのランダムファイル
- 以下で指定されたフォルダーからランダムなファイルが選択されることを意味します。このフォルダーには、バイト メッセージ用の拡張子.datを持つファイル、またはオブジェクトまたはテキスト メッセージ用の拡張子.txtまたは.objを持つファイルのいずれかが含まれている必要があります。
- テキストエリア
- Text または Object メッセージのいずれかに使用する Message
- 生:
- ファイルから変数をサポートせず、デフォルトのシステム文字セットでロードします。
- デフォルト:
- XML プロローグに依存する XML を除き、デフォルトのシステム エンコーディングでファイルをロードします。ファイルに変数が含まれている場合は、それらが処理されます。
- 標準文字セット:
- 指定されたエンコーディング (有効または無効) は、ファイルの読み取りと変数の処理に使用されます
MapMessage タイプの場合、JMeter はソースをテキスト行として読み取ります。各行には、コンマで区切られた 3 つのフィールドが必要です。フィールドは次のとおりです。
- エントリー名
- オブジェクト クラス名、たとえば " String " (指定されていない場合はjava.langパッケージを想定)
- オブジェクト文字列値
名前,文字列,例 サイズ、整数、1234
- オブジェクトとその依存関係を含む JAR をjmeter_home/lib/フォルダーに配置します
- XStream を使用してオブジェクトを XML としてシリアライズする
- 拡張子が.txtまたは.objのファイルに結果を入れるか、XML コンテンツを直接テキスト領域に入れます。
次の表に、JMS を構成するときに役立つ可能性がある値をいくつか示します。
アパッチアクティブMQ | 値 | コメント |
---|---|---|
コンテキスト ファクトリー | org.apache.activemq.jndi.ActiveMQInitialContextFactory | . |
プロバイダーの URL | vm://localhost | |
プロバイダーの URL | vm:(ブローカー:(vm://localhost)?persistent=false) | 持続性を無効にする |
キュー リファレンス | dynamicQueues/QUEUENAME | QUEUENAME を JNDI に動的に定義する |
トピック リファレンス | dynamicTopics/トピック名 | TOPICNAME を JNDI に動的に定義する |
JMS サブスクライバー¶
JMS サブスクライバーは、指定された宛先 (トピックまたはキュー) のメッセージにサブスクライブします。JMS に慣れていない方のために説明すると、JMS はメッセージング用の J2EE 仕様です。市場には多数の JMS サーバーがあり、いくつかのオープン ソース オプションがあります。
パラメータ ¶
- MessageConsumer.receive()
- 要求されたメッセージごとにreceive()を呼び出します。サンプル間の接続を保持しますが、サンプラーがアクティブでない限りメッセージをフェッチしません。これは、キュー サブスクリプションに最適です。
- MessageListener.onMessage()
- すべての着信メッセージをキューに格納する Listener を確立します。サンプラーが完了した後も、リスナーはアクティブなままです。これは、トピック サブスクリプションに最適です。
JMS ポイントツーポイント¶
このサンプラーは、ポイントツーポイント接続 (キュー) を介して JMS メッセージを送信し、オプションで受信します。pub/sub メッセージとは異なり、通常はトランザクションの処理に使用されます。
request_onlyは通常、JMS システムに負荷をかけるために使用されます。
request_replyは、リクエスト キューに送信されたメッセージを処理する JMS サービスの応答時間をテストする場合に使用します。このモードは、このサービスによって送信された応答キューで応答を待機するためです。
Browseは、現在のキューの深さ、つまりキューにあるメッセージの数を返します。
readは、キューからメッセージを読み取ります (存在する場合)。
clearは、キューをクリアします。つまり、キューからすべてのメッセージを削除します。
JMeter は、プロパティjava.naming.security.[principal|credentials] (存在する場合) を使用して、キュー接続を作成します。この動作が望ましくない場合は、JMeter プロパティ JMSSampler.useSecurity.properties=falseを設定します。
パラメータ ¶
- リクエストのみ
- メッセージを送信するだけで、返信を監視しません。そのため、システムに負荷をかけるために使用できます。
- リクエストレスポンス
- メッセージを送信し、受信した返信を監視します。動作は、JNDI Name Reply Queue の値によって異なります。JNDI Name Reply Queue に値がある場合、このキューを使用して結果を監視します。要求と応答の照合は、要求のメッセージ ID と応答の相関 ID を使用して行われます。JNDI Name Reply Queue が空の場合、リクエスタとサーバー間の通信に一時キューが使用されます。これは、固定応答キューとは大きく異なります。一時キューでは、応答メッセージが受信されるまで送信スレッドがブロックされます。Request Responseモードでは、Request Queue に送信されたメッセージをリッスンし、message.getJMSReplyTo()によって参照されるキューに応答を送信するサーバーが必要です。
- 読んだ
- リスナーがアタッチされていない送信キューからメッセージを読み取ります。これは、テスト目的で便利です。このメソッドは、バインディング ファイルなしでキューを処理する必要がある場合 (jmeter-jms-skip-jndi ライブラリが使用されている場合) に使用できます。これは、JMS Point-to-Point サンプラーでのみ機能します。バインディング ファイルを使用する場合は、JMS サブスクライバー サンプラーを使用してキューから読み取ることもできます。
- ブラウズ
- は、キューからメッセージを削除せずに現在のキューの深さを判断し、キューにあるメッセージの数を返します。
- クリア
- キューをクリアします。つまり、キューからすべてのメッセージを削除します。
- リクエスト メッセージ ID を使用
- 選択すると、リクエスト JMSMessageID が使用されます。それ以外の場合は、リクエスト JMSCorrelationID が使用されます。後者の場合、リクエストで相関 ID を指定する必要があります。
- 応答メッセージ ID を使用
- 選択すると、応答 JMSMessageID が使用されます。それ以外の場合は、応答 JMSCorrelationID が使用されます。
- JMS 相関 ID パターン
- つまり、相関 ID でリクエストと応答を一致させる => 両方のチェックボックスを選択解除し、相関 ID を指定します。
- JMS メッセージ ID パターン
- つまり、リクエスト メッセージ ID とレスポンス相関 ID を一致させる => [リクエスト メッセージ ID を使用] のみを選択します。
JUnit リクエスト¶
- JMeter のテスト インターフェイスを使用するのではなく、JUnit のTestCaseクラスを拡張するクラスの jar ファイルをスキャンします。これには、任意のクラスまたはサブクラスが含まれます。
- JUnit テスト jar ファイルは、 /libディレクトリではなくjmeter/lib/junitに配置する必要があります。「 user.classpath 」プロパティを使用して、 TestCaseクラスを探す場所を指定することもできます。
- JUnit サンプラーは、 Java Requestのような構成に名前と値のペアを使用しません。サンプラーは、 setUpとtearDownがテストを正しく構成すると想定しています。
- サンプラーはテスト メソッドの経過時間のみを測定し、setUpとtearDownは含まれません。
- テスト メソッドが呼び出されるたびに、JMeter は結果をリスナーに渡します。
- oneTimeSetUpとoneTimeTearDownのサポートはメソッドとして行われます。JMeter はマルチスレッドであるため、Maven と同じ方法でoneTimeSetUp / oneTimeTearDownを呼び出すことはできません。
- サンプラーは、予期しない例外をエラーとして報告します。標準の JUnit テスト ランナーと JMeter の実装の間には、いくつかの重要な違いがあります。テストごとにクラスの新しいインスタンスを作成するのではなく、JMeter はサンプラーごとに 1 つのインスタンスを作成し、それを再利用します。これは、チェックボックス「サンプルごとに新しいインスタンスを作成する」で変更できます。
パブリック クラス myTestCase { public myTestCase() {} }文字列コンストラクタ:
パブリック クラス myTestCase { public myTestCase(文字列テキスト) { スーパー(テキスト); } }
一般的なガイドライン
setUpとTeaDown を使用する場合は、メソッドがパブリックに宣言されていることを確認してください。そうしないと、テストが正しく実行されない可能性があります。ここでは、JUnit テストを作成して JMeter とうまく連携させるための一般的なガイドラインをいくつか示します。JMeter はマルチスレッドで実行されるため、いくつかの点に留意することが重要です。
- スレッド セーフになるように、setUpメソッドとTeaDownメソッドを記述します。これは通常、静的メンバーの使用を避けることを意味します。
- テスト メソッドは、長い一連のアクションではなく、個別の作業単位にします。テスト方法を個別の操作に保つことで、テスト方法を組み合わせて新しいテスト計画を作成しやすくなります。
- テスト メソッドを相互に依存させることは避けてください。JMeter ではテスト メソッドを任意に順序付けできるため、実行時の動作はデフォルトの JUnit の動作とは異なります。
- テスト メソッドが構成可能な場合は、プロパティの保存場所に注意してください。Jar ファイルからプロパティを読み取ることをお勧めします。
- 各サンプラーはテスト クラスのインスタンスを作成するため、セットアップがoneTimeSetUpとoneTimeTearDownで行われるようにテストを記述します。
パラメータ ¶
次の JUnit4 アノテーションが認識されます。
- @テスト
- テストメソッドとクラスを見つけるために使用されます。" expected " および " timeout " 属性がサポートされています。
- @前
- JUnit3のsetUp()と同じ扱い
- @後
- JUnit3のtearDown ()と同じ扱い
- @BeforeClass、@AfterClass
- 必要に応じて独立して実行できるように、テスト メソッドとして扱われます。
メールリーダーサンプラー¶
Mail Reader Sampler は、POP3(S) または IMAP(S) プロトコルを使用してメール メッセージを読み取る (およびオプションで削除する) ことができます。
パラメータ ¶
それができない場合は、テスト スクリプト (JMX ファイル) を含むディレクトリに対して。
メッセージは、メイン サンプラーのサブサンプルとして格納されます。マルチパート メッセージ パーツは、メッセージのサブサンプルとして格納されます。
" file " プロトコル
の特別な処理: file JavaMail プロバイダを使用して、ファイルから生のメッセージを読み取ることができます。サーバーフィールドは、フォルダーの親へのパスを指定するために使用されます。個々のメッセージ ファイルは、 n.msg という名前で保存する必要があります。nはメッセージ番号です。または、serverフィールドは、単一のメッセージを含むファイルの名前にすることもできます。現在の実装は非常に基本的なもので、主にデバッグを目的としています。
フロー制御アクション (旧: テスト アクション) ¶
このサンプラーは、サンプルを生成しなくても一時停止を含めることができるため、Transaction Controller と組み合わせて使用 することもできます。可変遅延の場合、一時停止時間をゼロに設定し、Timer を子として追加します。
「停止」アクションは、進行中のサンプルが完了した後で、スレッドまたはテストを停止します。「Stop Now」アクションは、サンプルが完了するのを待たずにテストを停止します。アクティブなサンプルが中断されます。一部のスレッドが 5 秒の制限時間内に停止しなかった場合、GUI モードでメッセージが表示されます。Stopコマンドを使用して、スレッドが停止するかどうかを確認できますが、そうでない場合は、JMeter を終了する必要があります。CLI モードでは、一部のスレッドが 5 秒の制限時間内に停止しなかった場合、JMeter は終了します。
パラメータ ¶
SMTP サンプラー¶
SMTP Sampler は、SMTP/SMTPS プロトコルを使用してメール メッセージを送信できます。接続のセキュリティ プロトコル (SSL および TLS) とユーザー認証を設定できます。セキュリティ プロトコルが使用されている場合、サーバー証明書の検証が行われます。
この検証を処理するには、次の 2 つの方法があります。
- すべての証明書を信頼する
- これは、証明書チェーンの検証を無視します
- ローカルのトラストストアを使用する
- このオプションを使用すると、証明書チェーンはローカルのトラストストア ファイルに対して検証されます。
パラメータ ¶
それができない場合は、テスト スクリプト (JMX ファイル) を含むディレクトリに対して。
OSプロセスサンプラー¶
OS Process Sampler は、ローカル マシンでコマンドを実行するために使用できるサンプラーです。
コマンドラインから実行できるすべてのコマンドを実行できるようにする必要があります。
リターン コードの検証を有効にし、予想されるリターン コードを指定できます。
OS シェルは通常、コマンドライン解析を提供することに注意してください。これは OS によって異なりますが、通常、シェルは空白でパラメーターを分割します。一部のシェルは、ワイルドカード ファイル名を展開します。しない人もいます。引用メカニズムも OS によって異なります。サンプラーは、意図的に解析や引用処理を行いません。コマンドとそのパラメーターは、実行可能ファイルが期待する形式で提供する必要があります。これは、サンプラー設定が OS 間で移植できないことを意味します。
多くの OS には、個別の実行可能ファイルとして提供されていない組み込みコマンドがいくつかあります。たとえば、Windows DIRコマンドはコマンド インタープリター ( CMD.EXE ) の一部です。これらのビルトインは、独立したプログラムとして実行することはできませんが、適切なコマンド インタープリターへの引数として提供する必要があります。
たとえば、Windows コマンドライン: DIR C:\TEMPは次のように指定する必要があります。
- 指示:
- CMD
- パラメータ 1:
- /C
- パラメータ 2:
- DIR
- パラメータ 3:
- C:\TEMP
パラメータ ¶
MongoDB スクリプト (非推奨) ¶
このサンプラーを使用すると、リクエストを MongoDB に送信できます。
これを使用する前に、 MongoDB Source Config構成要素 をセットアップする必要があります
パラメータ ¶
ボルトリクエスト¶
このサンプラーを使用すると、Bolt プロトコルを介して Cypher クエリを実行できます。
これを使用する前に、ボルト接続構成を設定する必要があります
すべての要求は、プールから取得した接続を使用し、サンプラーが完了するとプールに返します。接続プールのサイズはドライバーのデフォルト (~100) を使用し、現時点では構成できません。
測定された応答時間は、暗号クエリを実行する時間と、データベースから返された結果を消費する時間の両方を含む、「完全な」クエリ実行に対応します。
パラメータ ¶
18.2 ロジックコントローラ¶
ロジック コントローラーは、サンプラーが処理される順序を決定します。
シンプルなコントローラー¶
Simple Logic Controller を使用すると、サンプラーやその他のロジック コントローラーを整理できます。他のロジック コントローラとは異なり、このコントローラにはストレージ デバイス以上の機能はありません。
この例をダウンロードしてください (図 6 を参照)。この例では、2 つの Ant HTTP 要求と 2 つの Log4J HTTP 要求を送信するテスト計画を作成しました。Ant と Log4J のリクエストを Simple Logic Controller 内に配置することでグループ化しました。シンプル ロジック コントローラは、追加したコントローラを JMeter が処理する方法には影響しないことに注意してください。したがって、この例では、JMeter は次の順序でリクエストを送信します: Ant ホームページ、Ant ニュース ページ、Log4J ホームページ、Log4J 履歴ページ。
File Reporter は、現在のディレクトリの「 simple-test.dat 」 という名前のファイルに結果を保存するように構成されていることに注意してください。
ループコントローラー¶
ジェネレーティブ コントローラーまたはロジック コントローラーをループ コントローラーに追加すると、JMeter は、スレッド グループに指定したループ値に加えて、それらを特定の回数ループします。たとえば、ループ カウントが 2 のループ コントローラに 1 つの HTTP リクエストを追加し、スレッド グループのループ カウントを 3 に設定すると、JMeter は合計2 * 3 = 6のHTTP リクエストを送信します。
この例をダウンロードしてください (図 4 を参照)。この例では、特定の HTTP リクエストを 1 回だけ送信し、別の HTTP リクエストを 5 回送信するテスト計画を作成しました。
単一のスレッドと 1 のループ カウント値のスレッド グループを構成しました。スレッド グループにループを制御させる代わりに、ループ コントローラーを使用しました。1 つの HTTP 要求をスレッド グループに追加し、別の HTTP 要求をループ コントローラーに追加したことがわかります。ループ コントローラーのループ カウント値を 5 に設定しました。
JMeter は、ホームページ、ニュース ページ、ニュース ページ、ニュース ページ、ニュース ページ、ニュース ページの順にリクエストを送信します。
ワンスオンリーコントローラー¶
1 回限りのロジック コントローラーは、JMeter に対して、その内部のコントローラーをスレッドごとに 1 回だけ処理し、テスト計画のさらなる反復中にその下にあるすべての要求を渡すように指示します。
一度だけのコントローラーは、ループしている親コントローラーの最初の反復中に常に実行されるようになりました。したがって、5 回ループするように指定されたループ コントローラーの下に 1 回限りのコントローラーが配置されている場合、1 回限りのコントローラーはループ コントローラーを介した最初の反復でのみ (つまり、5 回ごとに) 実行されます。
これは、1 回限りのコントローラーがスレッド グループ (スレッドごとのテストごとに 1 回だけ実行される) の下に配置された場合でも以前に期待されたとおりに動作することを意味しますが、ユーザーは 1 回限りのコントローラーをより柔軟に使用できるようになりました。
ログインが必要なテストでは、セッションを確立するために各スレッドがログインする必要があるのは 1 回だけであるため、このコントローラーにログイン要求を配置することを検討してください。
この例をダウンロードしてください (図 5 を参照)。この例では、HTTP 要求を送信する 2 つのスレッドを持つテスト計画を作成しました。各スレッドは、1 つの要求をホームページに送信し、続いて 3 つの要求をバグ ページに送信します。スレッド グループを 3 回反復するように構成しましたが、各 JMeter スレッドはホームページに 1 つの要求しか送信しません。
各 JMeter スレッドは、ホームページ、バグ ページ、バグ ページ、バグ ページの順にリクエストを送信します。
File Reporter は、現在のディレクトリの「 loop-test.dat 」という名前のファイルに結果を保存するように構成されていることに注意してください。
インターリーブ コントローラー¶
ジェネレーティブ コントローラーまたはロジック コントローラーをインターリーブ コントローラーに追加すると、JMeter はループの反復ごとに他の各コントローラーを交互に使用します。
パラメータ ¶
この例をダウンロードしてください (図 1 を参照)。この例では、2 つのスレッドと 5 つのループ カウントを持つようにスレッド グループを構成し、スレッドごとに合計 10 のリクエストを処理しました。JMeter が HTTP リクエストを送信するシーケンスについては、次の表を参照してください。
ループ反復 | 各 JMeter スレッドはこれらの HTTP リクエストを送信します |
---|---|
1 | ニュースページ |
1 | ログページ |
2 | よくある質問ページ |
2 | ログページ |
3 | ガンプページ |
3 | ログページ |
4 | コントローラにはそれ以上のリクエストがないため、 JMeter は最初からやり直して、ニュース ページである最初の HTTP リクエストを送信します。 |
4 | ログページ |
5 | よくある質問ページ |
5 | ログページ |
別の例をダウンロードしてください (図 2 を参照)。この例では、スレッド グループを 1 つのスレッドと 8 つのループ カウントを持つように構成しました。テスト計画には、内部に 2 つのインターリーブ コントローラーを持つ外部インターリーブ コントローラーがあることに注意してください。
外側のインターリーブ コントローラーは、2 つの内側のコントローラーを交互に使用します。次に、各内部インターリーブ コントローラーが各 HTTP 要求を交互に実行します。各 JMeter スレッドは、次の順序で要求を送信します: ホームページ、インターリーブ、バグ ページ、インターリーブ、CVS ページ、インターリーブ、FAQ ページ、インターリーブ。
File Reporter は、現在のディレクトリの「 interleave-test2.dat 」という名前のファイルに結果を保存するように構成されていることに注意してください。
メインのインターリーブ コントローラーの下にある 2 つのインターリーブ コントローラーが代わりに単純なコントローラーである場合、順序は次のようになります: ホームページ、CVS ページ、インターリーブ、バグ ページ、FAQ ページ、インターリーブ。
ただし、メインのインターリーブ コントローラーで [サブコントローラー ブロックを無視する] がオンになっている場合、順序は次のようになります: ホームページ、インターリーブ、バグ ページ、インターリーブ、CVS ページ、インターリーブ、FAQ ページ、インターリーブ。
ランダムコントローラー¶
Random Logic Controller は Interleave Controller と同様に動作しますが、サブコントローラーとサンプラーを順番に処理する代わりに、各パスでランダムに 1 つを選択する点が異なります。
パラメータ ¶
ランダムオーダーコントローラー¶
Random Order Controller は、各子要素を最大 1 回実行するという点で Simple Controller によく似ていますが、ノードの実行順序はランダムです。
スループットコントローラー¶
スループット コントローラを使用すると、実行頻度を制御できます。次の 2 つのモードがあります。
- 実行率
- 総実行数
- 実行率
- コントローラーは、テスト計画を通じて特定の割合の反復を実行します。
- 総実行数
- 特定の回数の実行が発生した後、コントローラーの実行を停止します。
パラメータ ¶
ランタイム コントローラ¶
ランタイム コントローラーは、その子の実行時間の長さを制御します。コントローラーは、構成されたランタイムを超える まで子を実行します。
パラメータ ¶
コントローラの場合¶
If コントローラーを使用すると、ユーザーはその下のテスト要素 (その子) を実行するかどうかを制御できます。
デフォルトでは、条件は最初のエントリで 1 回だけ評価されますが、コントローラーに含まれる実行可能な要素ごとに評価するオプションがあります。
最良のオプション (デフォルト) は、[条件を変数式として解釈しますか? ] をオンにすることです。の場合、条件フィールドには 2 つのオプションがあります。
- オプション 1: trueまたはfalseを含む変数を使用する
最後のサンプルが成功したかどうかをテストする場合は、${JMeterThread.last_sample_ok}を使用できます。
- オプション 2: 関数 ( ${__jexl3()}をお勧めします) を使用して、 trueまたはfalseを返さなければならない式を評価します
"${myVar}" == "\${myVar}"または使用:
"${myVar}" != "\${myVar}"変数が定義されていて、null でないかどうかをテストします。
パラメータ ¶
- ${COUNT} < 10
- "${VAR}" == "abcd"
を使用する場合は、文字列で変数置換を使用しないように注意してください。そうしないと、スクリプトを変更する変数を使用すると、スクリプトをキャッシュできません。代わりに、vars.get("myVar") を使用して変数を取得します。 以下の Groovy の例を参照してください。
- ${__groovy(vars.get("myVar") != "Invalid" )} (Groovy チェック myVar が Invalid と等しくない)
- ${__groovy(vars.get("myInt").toInteger() <=4 )} (Groovy チェック myInt が 4 以下)
- ${__groovy(vars.get("myMissing") != null )} (myMissing 変数が設定されていないかどうかの Groovy チェック)
- ${__jexl3(${COUNT} < 10)}
- ${結果}
- ${JMeterThread.last_sample_ok} (最後のサンプルが成功したかどうかを確認します)
コントローラーながら¶
While コントローラーは、条件が " false " になるまで子を実行します。
可能な条件値:
- 空白 - ループの最後のサンプルが失敗したときにループを終了します
- LAST - ループの最後のサンプルが失敗したときにループを終了します。ループの直前の最後のサンプルが失敗した場合は、ループに入らないでください。
- それ以外の場合 - 条件が文字列 " false "と等しい場合、ループを終了します (またはループに入らないでください) 。
例えば:
- ${VAR} - VARが他のテスト要素によって false に設定されている場合
- ${__jexl3(${C}==10)}
- ${__jexl3("${VAR2}"=="abcd")}
- ${_P(property)} - プロパティが別の場所で「false」に設定されている場合
スイッチコントローラー¶
スイッチ コントローラーは、反復ごとに従属要素の 1 つを実行するという点でインターリーブ コントローラーのように機能 しますが、それらを順番に実行するのではなく、コントローラーはスイッチ値によって定義された要素を実行します。
スイッチ値が範囲外の場合、ゼロ番目の要素が実行されるため、数値の場合のデフォルトとして機能します。値が空の文字列の場合は、0 番目の要素も実行されます。
値が非数値 (および空でない) の場合、スイッチ コントローラーは同じ名前の要素を探します (大文字と小文字は区別されます)。一致する名前がない場合は、「default」(大文字と小文字は区別されません) という名前の要素が選択されます。デフォルトがない場合、要素は選択されず、コントローラーは何も実行しません。
パラメータ ¶
ForEach コントローラー¶
ForEach コントローラーは、一連の関連する変数の値をループ処理します。サンプラー (またはコントローラー) を ForEach コントローラーに追加すると、すべてのサンプル (またはコントローラー) が 1 回以上実行され、ループごとに変数に新しい値が設定されます。入力は、アンダースコアと数字で拡張されたいくつかの変数で構成する必要があります。そのような各変数には値が必要です。たとえば、入力変数の名前がinputVarの場合、次の変数が定義されている必要があります。
- inputVar_1 = ウェンディ
- inputVar_2 = チャールズ
- inputVar_3 = ピーター
- inputVar_4 = ジョン
注: " _ " セパレーターはオプションになりました。
戻り変数が「returnVar」として指定されると、ForEach コントローラーの下のサンプラーとコントローラーのコレクションが4回連続して実行され、戻り変数がそれぞれ上記の値を持ち、サンプラーで使用できるようになります。
これは、正規表現ポストプロセッサで実行するのに特に適しています。これにより、前のリクエストの結果データから必要な入力変数を「作成」できます。「 _ 」セパレーターを省略することにより、ForEach コントローラーを使用して、入力変数refName_gを使用してグループをループ処理できます。また、フォームrefName_${Cの入力変数を使用して、すべての一致のすべてのグループをループ処理できます。}_g、ここでCはカウンター変数です。
パラメータ ¶
この例をダウンロードしてください (図 7 を参照)。この例では、特定の HTTP リクエストを 1 回だけ送信し、ページ上にあるすべてのリンクに別の HTTP リクエストを送信するテスト計画を作成しました。
単一のスレッドと 1 のループ カウント値のスレッド グループを構成しました。スレッド グループに 1 つの HTTP 要求を追加し、ForEach コントローラーに別の HTTP 要求を追加したことがわかります。
最初の HTTP 要求の後に、正規表現エクストラクタが追加されます。これにより、リターン ページからすべての html リンクが抽出され、 inputVar変数に入れられます。
ForEach ループでは、最初に返された HTML ページから抽出されたすべてのリンクを要求する HTTP サンプラーが追加されます。
ダウンロードできる別の例を次に示します。これには、2 つの正規表現と ForEach コントローラーがあります。最初の RE は一致しますが、2 番目の RE は一致しないため、2 番目の ForEach コントローラーによってサンプルは実行されません。
スレッド グループには、1 つのスレッドと 2 つのループ カウントがあります。
サンプル 1 では、JavaTest サンプラーを使用して文字列「abcd」を返します。
Regex Extractor は、文字とそれに続くスペースに一致する式(\w)\sを使用し、(スペースではなく) 文字を返します。すべての一致には、文字列 " inputVar " がプレフィックスとして付けられます。
ForEach コントローラーは、プレフィックス " inputVar_ " を持つすべての変数を抽出し、そのサンプルを実行して、変数 " returnVar " に値を渡します。この場合、変数に値 " a " " b " と " c " が順番に設定されます。
For 1 Sampler は、サンプル ラベルの一部およびサンプラ データとして 戻り変数「 returnVar 」を使用する別のJava サンプラです。
Sample 2、Regex 2およびFor 2はほぼ同じですが、Regex が " (\w)\sx " に変更されており、明らかに一致しません。したがって、For 2 Sampler は実行されません。
モジュールコントローラー¶
Module Controller は、実行時にテスト計画のフラグメントを現在のテスト計画に置き換えるメカニズムを提供します。
テスト計画フラグメントは、コントローラーとそれに含まれるすべてのテスト要素 (サンプラーなど) で構成されます。フラグメントは、任意のスレッド グループに配置できます。フラグメントがスレッド グループにある場合、そのコントローラーを無効にして、フラグメントがモジュール コントローラー以外によって実行されないようにすることができます。または、フラグメントをダミーのスレッド グループに格納し、スレッド グループ全体を無効にすることもできます。
複数のフラグメントが存在する可能性があり、それぞれの下に異なる一連のサンプラーがあります。モジュール コントローラーを使用すると、ドロップダウン ボックスで適切なコントローラーを選択するだけで、これらの複数のテスト ケースを簡単に切り替えることができます。これにより、多くの代替テスト計画を迅速かつ簡単に実行できるようになります。
フラグメント名は、コントローラー名とそのすべての親名で構成されます。例えば:
テスト計画 / プロトコル: JDBC / コントロール / インターリーブ コントローラー (Module1)
モジュールコントローラーで使用されるフラグメントには一意の名前が必要です。これは、名前がテスト計画の再読み込み時にターゲット コントローラーを見つけるために使用されるためです。このため、上記の例に示すように、コントローラー名をデフォルトから変更することをお勧めします。そうしないと、新しい要素がテスト計画に追加されたときに誤って重複が作成される可能性があります。
パラメータ ¶
インクルードコントローラー¶
インクルード コントローラーは、外部 JMX ファイルを使用するように設計されています。これを使用するには、テスト計画の下にテスト フラグメントを作成し、その下に必要なサンプラー、コントローラーなどを追加します。次に、テスト計画を保存します。ファイルは、他のテスト計画の一部として含める準備ができました。
便宜上、デバッグ目的でスレッド グループを外部 JMX ファイルに追加することもできます。モジュール コントローラーを使用して、テスト フラグメントを参照できます。インクルード プロセス中、スレッド グループは無視されます。
テストで Cookie マネージャーまたはユーザー定義変数を使用する場合、これらはインクルード ファイルではなく、最上位のテスト計画に配置する必要があります。そうしないと、動作が保証されません。
ただし、プロパティincludecontroller.prefixが定義されている場合は、その内容がパス名のプレフィックスとして使用されます。
prefix + Filenameで 指定された場所にファイルが見つからない場合、コントローラは JMX 起動ディレクトリに関連する Filenameを開こうとします。
トランザクションコントローラー¶
トランザクション コントローラーは、ネストされたテスト要素の実行にかかった全体の時間を測定する追加のサンプルを生成します。
次の 2 つの操作モードがあります。
- 追加のサンプルは、ネストされたサンプルの後に追加されます
- 追加のサンプルは、ネストされたサンプルの親として追加されます
生成されたサンプル時間には、ネストされたサンプラーのすべての時間が含まれます。デフォルト (2.11 以降) のタイマーとプリ/ポスト プロセッサの処理時間は除きます。クロックの分解能によっては、個々のサンプラーとタイマーの合計よりもわずかに長くなる場合があります。コントローラーが開始時刻を記録した後、最初のサンプルが開始する前に、クロックがカチカチ音をたてる場合があります。最後も同様。
生成されたサンプルは、そのすべてのサブサンプルが成功した場合にのみ成功したと見なされます。
親モードでは、個々のサンプルは引き続きツリー ビュー リスナーに表示されますが、他のリスナーに個別のエントリとして表示されることはなくなりました。また、サブサンプルは CSV ログ ファイルには表示されませんが、XML ファイルに保存できます。
パラメータ ¶
レコーディングコントローラー¶
Recording Controller は、プロキシ サーバーがサンプルを記録する場所を示すプレース ホルダーです。試運転中はシンプルコントローラーと同様、効果はありません。ただし、HTTP(S) Test Script Recorderを使用した記録中、記録されたすべてのサンプルはデフォルトで Recording Controller に保存されます。
クリティカル セクション コントローラ¶
クリティカル セクション コントローラーは、コントローラーの子を実行する前に名前付きロックが取得されるため、その子要素 (サンプラー/コントローラーなど) が 1 つのスレッドによってのみ実行されるようにします。
下の図は、クリティカル セクション コントローラの使用例を示しています。下の図では、2 つのクリティカル セクション コントローラが次のことを保証します。
- DS2-${__threadNum}は一度に 1 つのスレッドによってのみ実行されます
- DS4-${__threadNum}は、一度に 1 つのスレッドによってのみ実行されます
18.3 リスナー¶
ほとんどのリスナーは、テスト結果を「聞く」ことに加えて、いくつかの役割を果たします。また、保存されたテスト結果を表示、保存、および読み取る手段も提供します。
リスナーは、見つかったスコープの最後で処理されることに注意してください。
テスト結果の保存と読み取りは一般的です。さまざまなリスナーには、結果が書き込まれる (または読み取られる) ファイルを指定できるパネルがあります。デフォルトでは、結果は XML ファイルとして保存され、通常は " .jtl " 拡張子が付きます。CSV として保存するのが最も効率的なオプションですが、XML (他の利用可能なオプション) ほど詳細ではありません。
リスナーは CLI モードでサンプル データを処理しませんが、出力ファイルが構成されている場合は生データが保存されます。 CLI の実行によって生成されたデータを分析するには、ファイルを適切なリスナーにロードする必要があります。
新しいファイルをロードする前に現在のデータをクリアしたい場合は、ファイルをロードする前にメニュー項目の
または を使用します。結果は、XML または CSV 形式のファイルから読み取ることができます。CSV 結果ファイルから読み取る場合、ヘッダー (存在する場合) を使用して、存在するフィールドを判別します。 ヘッダーのない CSV ファイルを正しく解釈するには、適切なプロパティをjmeter.propertiesに設定する必要があります。
多くのサンプルがある場合、リスナーは大量のメモリを使用する可能性があります。 現在、ほとんどのリスナーは、以下を除いて、スコープ内のすべてのサンプルのコピーを保持しています。
- シンプルデータライタ
- BeanShell/JSR223 リスナー
- メーラー ビジュアライザー
- 概略報告
次のリスナーは、すべてのサンプルのコピーを保持する必要がなくなりました。代わりに、同じ経過時間のサンプルが集計されます。特にほとんどのサンプルがせいぜい 1 ~ 2 秒しかかからない場合は、必要なメモリが少なくて済みます。
- 集計レポート
- 集計グラフ
必要なメモリ量を最小限に抑えるには、Simple Data Writer を使用し、CSV 形式を使用します。
保存するデフォルト項目の設定の詳細については、Listener Default Configurationドキュメントを参照してください。出力ファイルの内容の詳細については、CSV ログ形式またはXML ログ形式を参照してください。
下図は結果ファイル設定パネルの例です。
パラメーター
サンプル結果保存設定¶
以下に示すように、構成ポップアップを使用して、さまざまな項目を結果ログ ファイル (JTL) に保存するようにリスナーを構成できます。デフォルトは、 Listener Default Configurationドキュメントで説明されているように定義されています。名前の後に ( CSV )が付いている項目は、CSV 形式にのみ適用されます。( XML )が付いている項目は、XML 形式にのみ適用されます。現在、CSV 形式を使用して改行を含むアイテムを保存することはできません。
Cookie、メソッド、およびクエリ文字列は、「Sampler Data」オプションの一部として保存されることに注意してください。
グラフ結果¶
Graph Results リスナーは、すべてのサンプル時間をプロットする単純なグラフを生成します。グラフの下部に沿って、現在のサンプル (黒)、すべてのサンプルの現在の平均 (青)、現在の標準偏差 (赤)、および現在のスループット レート (緑) がミリ秒単位で表示されます。
スループットの数値は、サーバーが処理した 1 分あたりの実際の要求数を表します。この計算には、テストに追加したすべての遅延と JMeter 独自の内部処理時間が含まれます。このような計算を行う利点は、この数値が実際のものを表していることです。実際、サーバーは 1 分間にそれだけ多くのリクエストを処理しており、スレッドの数を増やしたり、遅延を減らしたりして、サーバーの最大スループットを検出できます。一方、遅延と JMeter の処理を考慮して計算した場合、その数値から何を結論できるかは不明です。
次の表では、グラフの項目について簡単に説明します。統計用語の正確な意味の詳細については、ウィキペディアなどの Web を参照するか、統計に関する本を参照してください。
- データ- 実際のデータ値をプロットします
- Average - 平均をプロットします
- 中央値-中央値(中間値)をプロットします
- 偏差-標準偏差(変動の尺度) をプロットします。
- スループット- 単位時間あたりのサンプル数をプロットします
ディスプレイ下部の個々の数字は現在の値です。「最新のサンプル」は、「データ」としてグラフに表示される現在の経過サンプル時間です。
グラフの左上に表示される値は、応答時間の 90 パーセンタイルの最大値です。
アサーション結果¶
アサーション結果ビジュアライザーには、取得した各サンプルのラベルが表示されます。また、テスト計画の一部であるアサーションの失敗も報告します。
結果ツリーを表示する ¶
応答を表示するにはいくつかの方法があり、左側のパネルの下部にあるドロップダウン ボックスで選択できます。
レンダラー | 説明 |
---|---|
CSS/JQuery テスター | CSS/JQuery テスターは、テキスト応答に対してのみ機能します。上部パネルにプレーンテキストが表示されます。[テスト] ボタンを使用すると、ユーザーは CSS/JQuery を上部パネルに適用でき、結果が下部パネルに表示されます。 CSS/JQuery 式エンジンは JSoup または Jodd にすることができます。これら 2 つの実装の構文はわずかに異なります。 たとえば、セレクタa[class=sectionlink]属性hrefを現在の JMeter 関数ページに適用すると、次の出力が得られます。 マッチ数: 74 Match[1]=#関数 Match[2]=#what_can_do Match[3]=#where Match[4]=#方法 Match[5]=#function_helper Match[6]=#関数 Match[7]=#__regexFunction Match[8]=#__regexFunction_parms Match[9]=#__カウンター … 等々 … |
書類 | ドキュメント ビューには、Microsoft Office (Word、Excel、PowerPoint 97-2003、2007-2010 (openxml)、Apache OpenOffice (writer、calc、impress)、HTML、gzip、jar/zip など) などのさまざまな種類のドキュメントから抽出されたテキストが表示されます。ファイル (コンテンツのリスト)、および mp3、mp4、flv などの「マルチメディア」ファイルの一部のメタデータ。サポートされている形式の完全なリストは、Apache Tika 形式のページで入手できます。
ドキュメントが 10 MB を超える場合、表示されません。この制限を変更するには、JMeter プロパティのdocument.max_size (単位はバイト) を設定するか、0に設定して制限を解除します。
|
HTML | HTML ビューは、応答を HTML としてレンダリングしようとします。レンダリングされた HTML は、Web ブラウザーで得られるビューと比べて劣る可能性があります。ただし、最初の結果の評価に役立つ簡単な概算を提供します。 画像、スタイルシートなどはダウンロードされません。 |
HTML (リソースのダウンロード) | HTML (リソースのダウンロード) ビューオプションが選択されている場合、レンダラーは、HTML コードによって参照されるイメージ、スタイル シートなどをダウンロードできます。
|
HTML ソース形式 | HTML ソース形式のビューオプションが選択されている場合、レンダラーは Jsoup によって形式設定および消去された HTML ソース コードを表示します。
|
JSON | JSON ビューは、応答をツリー スタイルで表示します( JavaScript に埋め込まれた JSON も処理します)。
|
JSON パス テスター | JSON パス テスター ビューでは、JSON-PATH 式をテストし、特定の応答から抽出されたデータを確認できます。
|
JSON JMESPath テスター | JSON JMESPath Tester ビューを使用すると、 JMESPath式をテストし、特定の応答から抽出されたデータを確認できます。
|
正規表現テスター | Regexp Tester ビューは、テキスト応答に対してのみ機能します。上部パネルにプレーンテキストが表示されます。「テスト」ボタンを使用すると、ユーザーは正規表現を上部パネルに適用でき、結果が下部パネルに表示されます。 正規表現エンジンは、Regular Expression Extractor で使用されているものと同じです。 たとえば、RE (JMeter\w*).*を現在の JMeter ホームページに適用すると、次の出力が得られます。 マッチ数: 26 Match[1][0]=JMeter - Apache JMeter</title> Match[1][1]=JMeter Match[2][0]=JMeter" title="JMeter" border="0"/></a> Match[2][1]=JMeter Match[3][0]=JMeterCommitters">貢献者</a> Match[3][1]=JMeterCommitters … 等々 … [] 内の最初の数字は一致番号です。2 番目の数字はグループです。グループ[0]は、RE 全体に一致するものです。グループ[1]は、最初のグループに一致するものです。つまり、この場合は(JMeter\w*)です。図 9b (下) を参照してください。 |
文章 |
デフォルトのテキスト ビューには、応答に含まれるすべてのテキストが表示されます。これは、応答のコンテンツ タイプがテキストと見なされる場合にのみ機能することに注意してください。content-typeが次のいずれかで始まる
場合は、バイナリと見なされます。それ以外の場合は、テキストと見なされます。画像/ オーディオ/ ビデオ/ |
XML | XML ビューには、応答がツリー スタイルで表示されます。DTD ノードまたは Prolog ノードはツリーに表示されません。ただし、応答にはそれらのノードが含まれる場合があります。任意のノードを右クリックして、その下のすべてのノードを展開または折りたたむことができます。
|
XPath テスター | XPath テスターは、テキスト応答に対してのみ機能します。上部パネルにプレーンテキストが表示されます。[テスト] ボタンを使用すると、ユーザーは XPath クエリを上部パネルに適用でき、結果が下部パネルに表示されます。 |
境界抽出テスター | Boundary Extractor Testerは、テキスト応答に対してのみ機能します。上部パネルにプレーンテキストが表示されます。[テスト] ボタンを使用すると、ユーザーは境界抽出クエリを上部パネルに適用でき、結果が下部パネルに表示されます。 |
自動スクロール?オプションは、ツリー選択で最後のノードを表示することを許可します
検索オプションを使用すると、ほとんどのビューで表示されたデータを検索することもできます
。検索の結果は、上のディスプレイで強調表示されます。たとえば、下のコントロール パネルのスクリーンショットは、「Java」を検索した結果の 1 つを示しています。検索は表示されているテキストに対して行われるため、テキスト ビューと HTML ビューを検索すると異なる結果が得られる場合があることに注意してください。
注: 正規表現は Java エンジンを使用します (Regular Expression Extractor または Regexp Tester ビューのような ORO エンジンではありません)。
content-typeが指定されていない 場合、そのコンテンツはどの応答データ パネルにも表示されません。この場合、[応答をファイルに保存] を使用してデータを保存できます。応答データは引き続きサンプル結果で使用できるため、ポストプロセッサを使用してアクセスできることに注意してください。
応答データが 200K より大きい場合、表示されません。この制限を変更するには、JMeter プロパティview.results.tree.max_sizeを設定します。Save Responses to a file を使用して、応答全体をファイルに保存することもでき ます。
追加のレンダラーを作成できます。クラスはインターフェースorg.apache.jmeter.visualizers.ResultRendererを実装する か、抽象クラスorg.apache.jmeter.visualizers.SamplerResultTabを拡張する必要があり、コンパイルされたコードは JMeter で使用できる必要があります (たとえば、lib/ extディレクトリ)。
コントロール パネル (上) は、HTML 表示の例を示しています。
図 9 (下) は、XML 表示の例を示しています。
図 9a (下) は、正規表現テスターの表示例を示しています。
図 9b (下) は、ドキュメント表示の例を示しています。
集計レポート¶
スループットは、サンプラ ターゲット (たとえば、HTTP サンプルの場合はリモート サーバー) の観点から計算されます。JMeter は、リクエストが生成された合計時間を考慮に入れます。他のサンプラーとタイマーが同じスレッドにある場合、合計時間が増加するため、スループット値が減少します。したがって、名前の異なる 2 つの同一のサンプラーのスループットは、同じ名前の 2 つのサンプラーの半分になります。集計レポートから最良の結果を得るには、サンプラー名を正しく選択することが重要です。
中央値と 90 % ライン (90パーセンタイル) の値の計算には、追加のメモリが必要です。JMeter はサンプルを同じ経過時間で結合するようになったため、使用するメモリがはるかに少なくなりました。ただし、数秒以上かかるサンプルの場合、同じ時間を持つサンプルが少なくなる可能性があり、その場合はより多くのメモリが必要になります。後でこのリスナーを使用して、CSV または XML 結果ファイルをリロードできます。これは、パフォーマンスへの影響を回避するための推奨される方法です。個々のサンプルを保存せず、一定のメモリを必要とする同様のリスナー については、概要レポートを参照してください。
- ラベル- サンプルのラベル。[グループ名をラベルに含めますか? ] を選択すると、スレッド グループの名前がプレフィックスとして追加されます。これにより、必要に応じて、異なるスレッド グループの同一のラベルを個別に照合できます。
- # Samples - 同じラベルを持つサンプルの数
- Average - 一連の結果の平均時間
- 中央値-中央値は、一連の結果の中間にある時間です。サンプルの 50 % は、この時間より長くかかりませんでした。残りは少なくとも同じくらい時間がかかりました。
- 90% ライン- サンプルの 90% がこの時間より長くかからなかった。残りのサンプルは、少なくともこれと同じくらいの時間がかかりました。( 90パーセンタイル )
- 95% ライン- サンプルの 95% は、この時間より長くかかりませんでした。残りのサンプルは、少なくともこれと同じくらいの時間がかかりました。( 95パーセンタイル )
- 99% ライン- サンプルの 99% は、この時間より長くかかりませんでした。残りのサンプルは、少なくともこれと同じくらいの時間がかかりました。( 99パーセンタイル )
- Min - 同じラベルのサンプルの最短時間
- Max - 同じラベルを持つサンプルの最長時間
- エラー % - エラーのあるリクエストの割合
- スループット-スループットは、秒/分/時間あたりのリクエスト数で測定されます。時間単位は、表示されるレートが少なくとも 1.0 になるように選択されます。スループットを CSV ファイルに保存すると、リクエスト/秒で表されます。つまり、30.0 リクエスト/分は 0.5 として保存されます。
- 受信 KB/秒- 1 秒あたりの受信キロバイト数で測定されたスループット
- 送信 KB/秒- 1 秒あたりの送信キロバイト数で測定されたスループット
時間はミリ秒単位です。
下図は「グループ名を含める」チェックボックスを選択した例です。
結果を表に表示¶
デフォルトでは、メイン (親) サンプルのみが表示されます。サブサンプル (子サンプル) は表示されません。JMeter には「Child Samples?」チェックボックスがあります。これを選択すると、メイン サンプルの代わりにサブ サンプルが表示されます。
シンプルなデータライター¶
集計グラフ¶
このグラフを描画するための設定例を下図に示します。
パラメータ ¶
- 表示する列:グラフに表示する列を選択します。
- 長方形の色:右の色の長方形をクリックすると、ポップアップ ダイアログが開き、列のカスタム色を選択できます。
- 前景色値のテキストの色を変更できます。
- 値のフォント:テキストのフォント設定を定義できます。
- アウトライン バーを描画しますか? 棒グラフに境界線を引くかどうか
- 番号のグループを表示しますか? Y 軸のラベルに番号グループを表示するかどうか。
- 値ラベルは垂直ですか? 値ラベルの向きを変更します。(デフォルトは水平)
-
列ラベルの選択:結果ラベルでフィルターします。正規表現を使用できます。例: .*Transaction.*
グラフを表示する前に、[フィルターの適用] ボタンをクリックして内部データを更新します。
応答時間グラフ¶
このグラフを描画するための設定例を下図に示します。
パラメータ ¶
メーラービジュアライザー ¶
メーラー ビジュアライザーは、テスト実行がサーバーからあまりにも多くの失敗した応答を受信した場合に電子メールを送信するように設定できます。
パラメータ ¶
BeanShell リスナー¶
BeanShell Listener を使用すると、BeanShell を使用して、保存などのサンプルを処理できます。
BeanShell の使用の詳細については、BeanShell の Web サイトを参照してください。
テスト要素は、ThreadListenerメソッドとTestListenerメソッドをサポートしています。これらは初期化ファイルで定義する必要があります。定義の例 については、ファイルBeanShellListeners.bshrcを参照してください。
パラメータ ¶
- パラメーター
- パラメータを単一の変数として含む文字列
- bsh.args
- パラメータを含む文字列配列、空白で分割
スクリプトを呼び出す前に、いくつかの変数が BeanShell インタープリターに設定されます。
- log - ( Logger ) - ログファイルへの書き込みに使用できます
- ctx - ( JMeterContext ) - コンテキストへのアクセスを提供します
-
vars - ( JMeterVariables ) - 変数への読み取り/書き込みアクセスを提供します。
vars.get(キー); vars.put(キー、値); vars.putObject("OBJ1",新しいオブジェクト());
- props - (JMeterProperties - クラスjava.util.Properties ) - 例props.get("START.HMS"); props.put("PROP1","1234");
- sampleResult、prev - ( SampleResult ) - 前のSampleResultへのアクセスを提供します
- sampleEvent ( SampleEvent ) は、現在のサンプル イベントへのアクセスを提供します。
上記の各変数で使用可能なすべてのメソッドの詳細については、Javadoc を確認してください。
プロパティbeanshell.listener.initが定義されている場合、これは、BeanShell スクリプトで使用するメソッドなどを定義するために使用できる初期化ファイルをロードするために使用されます。
概要レポート¶
スループットは、サンプラ ターゲット (たとえば、HTTP サンプルの場合はリモート サーバー) の観点から計算されます。JMeter は、リクエストが生成された合計時間を考慮に入れます。他のサンプラーとタイマーが同じスレッドにある場合、合計時間が増加するため、スループット値が減少します。したがって、名前の異なる 2 つの同一のサンプラーのスループットは、同じ名前の 2 つのサンプラーの半分になります。レポートから最良の結果を得るには、サンプラー ラベルを正しく選択することが重要です。
- ラベル- サンプルのラベル。[グループ名をラベルに含めますか? ] を選択すると、スレッド グループの名前がプレフィックスとして追加されます。これにより、必要に応じて、異なるスレッド グループの同一のラベルを個別に照合できます。
- # Samples - 同じラベルを持つサンプルの数
- Average - 一連の結果の平均経過時間
- Min - 同じラベルを持つサンプルの最小経過時間
- Max - 同じラベルを持つサンプルの最長経過時間
- 標準 開発者 -サンプル経過時間の標準偏差
- エラー % - エラーのあるリクエストの割合
- スループット-スループットは、秒/分/時間あたりのリクエスト数で測定されます。時間単位は、表示される率が少なくとも1.0になるように選択されます。スループットを CSV ファイルに保存すると、リクエスト/秒で表されます。つまり、30.0 リクエスト/分は0.5として保存されます。
- 受信 KB/秒- キロバイト/秒で測定されたスループット
- 送信 KB/秒- キロバイト/秒で測定されたスループット
- 平均 Bytes - サンプル応答の平均サイズ (バイト単位)。
時間はミリ秒単位です。
下図は「グループ名を含める」チェックボックスを選択した例です。
応答をファイルに保存する¶
このテスト要素は、テスト計画のどこにでも配置できます。スコープ内のサンプルごとに、応答データのファイルが作成されます。これの主な用途は機能テストの作成ですが、応答が大きすぎて 結果ツリーの表示リスナーに表示できない場合にも役立ちます。ファイル名は、指定されたプレフィックスと番号から作成されます (これが無効にされていない限り、以下を参照してください)。ファイル拡張子は、既知の場合、ドキュメント タイプから作成されます。不明な場合、ファイル拡張子は「不明」に設定されます'。ナンバリングが無効で、サフィックスの追加が無効になっている場合、ファイルのプレフィックスがファイル名全体として使用されます。これにより、必要に応じて固定ファイル名を生成できます。生成されたファイル名はサンプル応答に保存され、必要に応じてテスト ログ出力ファイルに保存できます。
現在のサンプルが最初に保存され、その後にサブサンプル (子サンプル) が続きます。変数名が指定されている場合、サブサンプルが表示される順序でファイルの名前が保存されます。下記参照。
パラメータ ¶
プレフィックスの親フォルダーが存在しない場合、JMeter はそれらを作成し、失敗した場合はテストを停止します。
JSR223 リスナー¶
JSR223 リスナーを使用すると、JSR223 スクリプト コードをサンプル結果に適用できます。
パラメータ ¶
- パラメーター
- パラメータを単一の変数として含む文字列
- 引数
- パラメータを含む文字列配列、空白で分割
スクリプトを呼び出す前に、いくつかの変数が設定されます。これらは JSR223 変数であることに注意してください。つまり、スクリプトで直接使用できます。
- ログ
- ( Logger ) - ログファイルへの書き込みに使用できます
- ラベル
- 文字列ラベル
- ファイル名
- スクリプト ファイル名 (存在する場合)
- パラメーター
- パラメータ (文字列として)
- 引数
- 文字列配列としてのパラメーター (空白で分割)
- ctx
- ( JMeterContext ) - コンテキストへのアクセスを提供します
- 変数
- ( JMeterVariables ) - 変数への読み取り/書き込みアクセスを付与します。
vars.get(キー); vars.put(キー、値); vars.putObject("OBJ1",新しいオブジェクト()); vars.getObject("OBJ2");
- 小道具
- (JMeterProperties - クラスjava.util.Properties ) - 例props.get("START.HMS"); props.put("PROP1","1234");
- サンプル結果、前へ
- ( SampleResult ) - SampleResult へのアクセスを提供します
- サンプルイベント
- ( SampleEvent ) - SampleEvent へのアクセスを提供します
- サンプラー
- ( Sampler )- 最後のサンプラーへのアクセスを提供します
- アウト
- System.out - 例: OUT.println("message")
上記の各変数で使用可能なすべてのメソッドの詳細については、Javadoc を確認してください。
要約結果の生成¶
# 次のプロパティを定義して、その名前のサマライザーを自動的に開始します # (CLI モードのみに適用) #summariser.name=要約 # # サマリー間の間隔 (秒単位) デフォルト 3 分 #summariser.interval=30 # # ログファイルにメッセージを書き込む #summariser.log=true # # System.out にメッセージを書き込む #summariser.out=trueこの要素は、主にバッチ (CLI) の実行を目的としています。出力は次のようになります。
label + 16 in 0:00:12 = 1.3/s 平均: 1608 最小: 1163 最大: 2009 エラー: 0 (0.00%) アクティブ: 5 開始: 5 終了: 0 label + 82 in 0:00:30 = 2.7/s 平均: 1518 最小: 1003 最大: 2020 エラー: 0 (0.00%) アクティブ: 5 開始: 5 終了: 0 label = 98 in 0:00:42 = 2.3/s 平均: 1533 最小: 1003 最大: 2020 エラー: 0 (0.00%) label + 85 in 0:00:30 = 2.8/s 平均: 1505 最小: 1008 最大: 2005 エラー: 0 (0.00%) アクティブ: 5 開始: 5 終了: 0 label = 183 in 0:01:13 = 2.5/s 平均: 1520 最小: 1003 最大: 2020 エラー: 0 (0.00%) label + 79 in 0:00:30 = 2.7/s 平均: 1578 最小: 1089 最大: 2012 エラー: 0 (0.00%) アクティブ: 5 開始: 5 終了: 0 label = 262 in 0:01:43 = 2.6/s 平均: 1538 最小: 1003 最大: 2020 エラー: 0 (0.00%) label + 80 in 0:00:30 = 2.7/s 平均: 1531 最小: 1013 最大: 2014 エラー: 0 (0.00%) アクティブ: 5 開始: 5 終了: 0 ラベル = 342 インチ 0:02:12 = 2.6/秒 平均: 1536 最小: 1003 最大: 2020 エラー: 0 (0.00%) label + 83 in 0:00:31 = 2.7/s 平均: 1512 最小: 1003 最大: 1982 エラー: 0 (0.00%) アクティブ: 5 開始: 5 終了: 0 label = 425 in 0:02:43 = 2.6/s 平均: 1531 最小: 1003 最大: 2020 エラー: 0 (0.00%) label + 83 in 0:00:29 = 2.8/s 平均: 1487 最小: 1023 最大: 2013 エラー: 0 (0.00%) アクティブ: 5 開始: 5 終了: 0 label = 508 in 0:03:12 = 2.6/s 平均: 1524 最小: 1003 最大: 2020 エラー: 0 (0.00%) label + 78 in 0:00:30 = 2.6/s 平均: 1594 最小: 1013 最大: 2016 エラー: 0 (0.00%) アクティブ: 5 開始: 5 終了: 0 label = 586 in 0:03:43 = 2.6/s 平均: 1533 最小: 1003 最大: 2020 エラー: 0 (0.00%) label + 80 in 0:00:30 = 2.7/s 平均: 1516 最小: 1013 最大: 2005 エラー: 0 (0.00%) アクティブ: 5 開始: 5 終了: 0 label = 666 in 0:04:12 = 2.6/s 平均: 1531 最小: 1003 最大: 2020 エラー: 0 (0.00%) label + 86 in 0:00:30 = 2.9/s 平均: 1449 最小: 1004 最大: 2017 エラー: 0 (0.00%) アクティブ: 5 開始: 5 終了: 0 label = 752 in 0:04:43 = 2.7/s 平均: 1522 最小: 1003 最大: 2020 エラー: 0 (0.00%) label + 65 in 0:00:24 = 2.7/s 平均: 1579 最小: 1007 最大: 2003 エラー: 0 (0.00%) アクティブ: 0 開始: 5 終了: 5 label = 817 in 0:05:07 = 2.7/s 平均: 1526 最小: 1003 最大: 2020 エラー: 0 (0.00%)「label」は要素の名前です。「+」は、線がデルタ線であることを意味します。つまり、最後の出力以降の変更を示します。
「=」は、線が合計線であることを意味します。つまり、現在の合計を示します。
JMeter ログ ファイルのエントリにはタイムスタンプも含まれます。例 " 817 in 0:05:07 = 2.7/s " は、5 分 7 秒で 817 サンプルが記録されたことを意味し、1 秒あたり 2.7 サンプルで動作します。Avg
(平均)、Min (最小)、およびMax (最大) 時間はミリ秒単位です。 " Err " は、エラーの数を意味します (パーセンテージでも表示されます)。
最後の 2 行は、テストの最後に表示されます。それらは適切な時間境界に同期されません。最初と最後のデルタは、間隔より短い場合があることに注意してください (上記の例では、これは 30 秒です)。JMeter は間隔の境界に同期するため、最初のデルタは一般的に低くなります。通常、テストは正確な間隔境界で終了しないため、最後のデルタは低くなります。
ラベルは、サンプル結果をグループ化するために使用されます。したがって、複数のスレッド グループがあり、それらすべてを要約したい場合は、同じラベルを使用するか、要約をテスト計画に追加します (すべてのスレッド グループがスコープ内にあるようにします)。適切なラベルを使用し、サマライザーをテスト計画の適切な部分に追加することで、さまざまな要約グループを実装できます。
これはバグではなく、スレッド グループ全体で要約できるようにするための設計上の選択です。
バックエンドリスナー¶
パラメータ ¶
次のパラメーターは、GraphiteBackendListenerClient実装に適用されます。
パラメータ ¶
詳細については、リアルタイムの結果も参照してください。
JMeter 3.2 以降、カスタム スキーマを使用して InfluxDB に直接書き込むことができる実装。これはInfluxdbBackendListenerClientと呼ばれます。次のパラメーターは、 InfluxdbBackendListenerClient実装 に適用されます。
パラメータ ¶
詳細については、リアルタイムの結果とGrafana の Influxdb アノテーションも参照してください。InfluxDB v2 のリスナーの構成に関するサブセクションもあります。
JMeter 5.4 以降、すべてのサンプル結果を InfluxDB に書き込む実装。InfluxDBRawBackendListenerClientと呼ばれます。これは、データと個々の書き込みの増加により、JMeter と InfluxDB の両方でInfluxdbBackendListenerClientよりも多くのリソースを使用することに注意して ください。次のパラメーターは、 InfluxDBRawBackendListenerClient 実装 に適用されます。
パラメータ ¶
18.4 構成要素¶
構成要素を使用して、後でサンプラーが使用するデフォルトと変数を設定できます。これらの要素は、それらが見つかったスコープの開始時、つまり同じスコープ内のサンプラーの前に処理されることに注意してください。
CSV データセットの設定¶
CSV Data Set Config は、ファイルから行を読み取り、それらを変数に分割するために使用されます。__CSVRead()および__StringFromFile()関数よりも使いやすいです。多数の変数の処理に適しており、「ランダムな」値や一意の値を使用したテストにも役立ちます。
実行時に一意のランダム値を生成すると、CPU とメモリの面でコストがかかるため、テストの前にデータを作成してください。必要に応じて、ファイルからの「ランダムな」データを実行時パラメーターと組み合わせて使用し、実行時にすべてを生成するよりもはるかに安価な連結などを使用して、実行ごとに異なる値のセットを作成できます。
JMeter では、値を引用できます。これにより、値に区切り文字を含めることができます。" allow quoted data " が有効になっている場合、値を二重引用符で囲むことができます。これらは削除されます。引用符で囲まれたフィールド内に二重引用符を含めるには、2 つの二重引用符を使用します。例えば:
1,"2,3","4""5" => 1 2,3 4"5
JMeter は、列名を定義するヘッダー行を持つ CSV ファイルをサポートしています。これを有効にするには、「変数名」フィールドを空のままにします。正しい区切り文字を指定する必要があります。
JMeter は、改行を含む引用符付きデータを含む CSV ファイルをサポートしています。
デフォルトでは、ファイルは 1 回だけ開かれ、各スレッドはファイルから異なる行を使用します。ただし、行がスレッドに渡される順序は、スレッドが実行される順序に依存し、反復間で異なる場合があります。各テスト反復の開始時に行が読み取られます。ファイル名とモードは最初の繰り返しで解決されます。
その他のオプションについては、以下の共有モードの説明を参照してください。各スレッドに独自の値のセットを持たせたい場合は、スレッドごとに 1 つのファイルのセットを作成する必要があります。たとえば、test1.csv、test2.csv、…、test n .csv。ファイル名 test${__threadNum}.csvを使用し、「共有モード」を「現在のスレッド」に設定します。
特殊なケースとして、区切りフィールドの文字列 " \t " (引用符なし) はタブとして扱われます。
ファイルの終わり ( EOF ) に達し、リサイクル オプションがtrue の場合、読み取りはファイルの最初の行から再開されます。
recycle オプションがfalseで、stopThread がfalseの場合、ファイルの終わりに到達すると、すべての変数が<EOF>に設定されます。この値は、JMeter プロパティcsvdataset.eofstringを設定することで変更できます。
Recycle オプションがfalseで、Stop Thread がtrue の場合、 EOFに達するとスレッドが停止します。
パラメータ ¶
- すべてのスレッド- (デフォルト) ファイルはすべてのスレッド間で共有されます。
- 現在のスレッド グループ- 各ファイルは、要素が表示されるスレッド グループごとに 1 回開かれます。
- 現在のスレッド- 各ファイルはスレッドごとに個別に開かれます
- 識別子- 同じ識別子を共有するすべてのスレッドが同じファイルを共有します。たとえば、4 つのスレッド グループがある場合、2 つ以上のグループに共通の ID を使用して、グループ間でファイルを共有できます。または、スレッド番号を使用して、異なるスレッド グループの同じスレッド番号間でファイルを共有することもできます。
DNSキャッシュマネージャー¶
DNS キャッシュ マネージャー要素を使用すると、ユーザーが異なる IP からコンテンツを受信したときに、ロード バランサー (CDN など) の背後に複数のサーバーがあるアプリケーションをテストできます。デフォルトでは、JMeter は JVM DNS キャッシュを使用します。そのため、クラスタ内の 1 つのサーバーのみが負荷を受けます。DNS キャッシュ マネージャーは、反復ごとに各スレッドの名前を個別に解決し、解決の結果を内部 DNS キャッシュに保存します。これは、JVM と OS の両方の DNS キャッシュから独立しています。
静的ホストのマッピングを使用して、 /etc/hostsファイルなど をシミュレートできます。これらのエントリは、カスタム リゾルバーよりも優先されます。このマッピングを使用する場合は、 [カスタム DNS リゾルバーを使用する] を有効にする必要があります。
たとえば、DNS サーバーに (まだ) 設定されていない名前でアクセスしたいテスト サーバーがあるとします。この例では、サーバーa123.another.example.orgの IP でアクセスするサーバー名はwww.example.comになります。
ワークステーションを変更して、/etc/hostsファイルにエントリを追加するか、OS に相当するエントリを追加するか、DNS キャッシュ マネージャの静的ホスト テーブルにエントリを追加することができます。
www.example.comを最初の列 ( Host ) に 入力し、 a123.another.example.orgを 2 番目の列 ( Hostname または IP address ) に入力します。2 番目の列の名前が示すように、そこでテスト サーバーの IP アドレスを使用することもできます。
テスト サーバーの IP アドレスは、カスタム DNS リゾルバーを使用して検索されます。何も指定しない場合、システムの DNS リゾルバーが使用されます。
これで、HTTPClient4 サンプラーで www.example.comを使用できるようになり、リクエストはa123.another.example.orgに対して行われ、すべてのヘッダーがwww.example.comに設定されます。
パラメータ ¶
HTTP 認可マネージャー¶
Authorization Manager を使用すると、サーバー認証を使用して制限されている Web ページに対して 1 つ以上のユーザー ログインを指定できます。このタイプの認証は、ブラウザを使用して制限されたページにアクセスし、ブラウザにログイン ダイアログ ボックスが表示されたときに表示されます。JMeter は、このタイプのページに遭遇すると、ログイン情報を送信します。
認可ヘッダーは、ツリー ビュー リスナーの[要求] タブに表示されない場合があります。Java 実装はプリエンプティブ認証を行いますが、JMeter がヘッダーをフェッチするときに Authorization ヘッダーを返しません。HttpComponents (HC 4.5.X) 実装は、3.2 以降、デフォルトでプリエンプティブになり、ヘッダーが表示されます。これを無効にするには、以下のように値を設定します。この場合、認証はチャレンジに応じてのみ実行されます。
ファイルjmeter.propertiesでhttpclient4.auth.preemptive=falseを設定します
パラメータ ¶
- ジャワ
- ベーシック
- HttpClient 4
- BASIC、DIGESTおよびKerberos
ケルベロス構成:
Kerberos を構成するには、少なくとも 2 つの JVM システム プロパティをセットアップする必要があります。
- -Djava.security.krb5.conf=krb5.conf
- -Djava.security.auth.login.config=jaas.conf
ファイルbin/system.properties でこれら 2 つのプロパティを構成することもできます。JMeter のbinフォルダーにある 2 つのサンプル構成ファイル ( krb5.confおよびjaas.conf )を参照して他のドキュメントを参照し、Kerberos 構成に合わせて調整してください。
SPNEGO では、クレデンシャルの委任はデフォルトで無効になっています。有効にしたい場合は、プロパティkerberos.spnego.delegate_credをtrueに設定してください。
Kerberos SPNEGO 認証用の SPN を生成する場合、IE および Firefox は URL からポート番号を省略します。Chrome には、標準のもの ( 80および443 )と異なる場合にポート番号を含めるオプション ( --enable-auth-negotiate-port ) があります。この動作は、次の JMeter プロパティを次のように設定することでエミュレートできます。
jmeter.propertiesまたはuser.propertiesで、次を設定します。
- kerberos.spnego.strip_port=false
コントロール:
- 追加ボタン - 認証テーブルにエントリを追加します。
- 削除ボタン - 現在選択されているテーブル エントリを削除します。
- ロードボタン - 以前に保存した承認テーブルをロードし、エントリを既存の承認テーブル エントリに追加します。
- [名前を付けて保存] ボタン - 現在の承認テーブルをファイルに保存します。
この例をダウンロードしてください。この例では、ローカル サーバー上に 3 つの HTTP 要求を送信するテスト計画を作成しました。そのうちの 2 つはログインが必要で、もう 1 つは全員に公開されています。テスト計画の構成を確認するには、図 10 を参照してください。サーバーには、" secret " という名前の制限付きディレクトリがあり、" index.html " と " index2.html "の 2 つのファイルが含まれています。「 spot 」というパスワードを持つ「 kevin 」という名前のログイン ID を作成しました。そこで、Authorization Manager で、制限付きディレクトリのエントリとユーザー名とパスワードを作成しました (図 11 を参照)。「 SecretPage1」および「SecretPage2」という名前の 2 つの HTTP 要求/secret/index.html " および " /secret/index2.html "。" NoSecretPage " という名前のもう 1 つの HTTP 要求は、 " /index.html "に対して要求を行います。
テスト計画を実行すると、JMeter は、要求している URL の Authorization テーブルを調べます。ベース URL が URL と一致する場合、JMeter はこの情報をリクエストとともに渡します。
HTTP キャッシュマネージャー¶
HTTP キャッシュ マネージャーは、そのスコープ内の HTTP 要求にキャッシュ機能を追加して、ブラウザーのキャッシュ機能をシミュレートするために使用されます。各仮想ユーザー スレッドには独自のキャッシュがあります。デフォルトでは、キャッシュ マネージャーは、LRU アルゴリズムを使用して、仮想ユーザー スレッドごとに最大 5000 個のアイテムをキャッシュに格納します。この値を変更するには、プロパティ「maxSize 」を使用します。この値を大きくするほど、HTTP キャッシュ マネージャーがメモリを消費するので、それに応じて-Xmx JVM オプションを調整してください。
サンプルが成功した場合 (つまり、応答コードが2xxの場合)、Last-ModifiedおよびEtag (関連する場合はExpired ) の値が URL に保存されます。次のサンプルを実行する前に、サンプラーはキャッシュにエントリがあるかどうかを確認し、エントリがある場合は、If-Last-ModifiedおよびIf-None-Match条件ヘッダーが要求に設定されます。
さらに、[ Use Cache-Control/Expires header ] オプションが選択されている場合、Cache-Control / Expiresの値が現在の時間に対してチェックされます。リクエストがGETリクエストで、タイムスタンプが未来の場合、サンプラーはリモート サーバーに URL をリクエストせずにすぐに戻ります。これは、ブラウザの動作をエミュレートすることを目的としています。Cache-Controlヘッダーが「no-cache」の場合、応答は期限切れになる前にキャッシュに保存されるため、条件付きGET要求が生成されることに注意してください。Cache-Controlに他の値がある場合、「max -age" expiry オプションは、エントリの有効期間を計算するために処理されます。欠落している場合は、Expire ヘッダーが使用されます。欠落しているエントリは、RFC 2616 セクション 13.2.4で指定されているようにLast-Modified時刻と応答日付 を使用してキャッシュされます。
パラメータ ¶
HTTP Cookie マネージャー¶
Cookie Manager 要素には 2 つの機能があります。1 つ目は
、Web ブラウザと同じように Cookie を保存して送信することです。HTTP 要求があり、応答に Cookie が含まれている場合、Cookie Manager はその Cookie を自動的に保存し、その特定の Web サイトへの今後のすべての要求に使用します。各 JMeter スレッドには、独自の「Cookie ストレージ領域」があります。したがって、セッション情報を保存するために Cookie を使用する Web サイトをテストしている場合、各 JMeter スレッドには独自のセッションがあります。このような Cookie は Cookie Manager 画面には表示されませんが、 View Results Tree Listener
を使用して表示できることに注意してください。
JMeter は、受信した Cookie が URL に対して有効であることを確認します。これは、クロスドメイン Cookie が保存されないことを意味します。動作にバグがある場合、またはクロスドメイン Cookie を使用したい場合は、JMeter プロパティ「CookieManager.check.cookies=false」を定義してください。
受信した Cookie は、JMeter スレッド変数として保存できます。Cookie を変数として保存するには、プロパティ「CookieManager.save.cookies=true」を定義します。また、Cookie 名には、保存前に「COOKIE_」というプレフィックスが付けられます (これにより、ローカル変数の偶発的な破損が回避されます)。元の動作に戻すには、プロパティ「CookieManager.name.prefix=」(1 つ以上のスペース) を定義します。有効にすると、TESTという名前の Cookie の値を${COOKIE_TEST}として参照できます。
次に、Cookie マネージャーに Cookie を手動で追加できます。ただし、これを行うと、Cookie はすべての JMeter スレッドで共有されます。
このような Cookie は、かなり先の有効期限で作成されることに注意してください。
デフォルトでは、 null値を 持つ Cookieは無視されます。これは、JMeter プロパティCookieManager.delete_null_cookies=falseを設定することで変更できます。これは、手動で定義された Cookie にも適用されることに注意してください。そのような Cookie は、更新時に表示から削除されます。Cookie 名は一意である必要があることにも注意してください。2 番目の Cookie が同じ名前で定義されている場合、最初の Cookie が置き換えられます。
パラメータ ¶
[注: IPv6 アドレスでテストする Web サイトがある場合は、HC4CookieHandler (IPv6 準拠) を選択してください]
「domain」はサーバーのホスト名です ( http://を除く)。ポートは現在無視されています。
HTTP リクエストのデフォルト¶
この要素を使用すると、HTTP 要求コントローラーが使用するデフォルト値を設定できます。たとえば、25 個の HTTP 要求コントローラーを使用してテスト計画を作成し、すべての要求が同じサーバーに送信される場合、「サーバー名または IP」フィールドに入力された単一の HTTP 要求の既定要素を追加できます。 、25 個の HTTP 要求コントローラーを追加するときは、[サーバー名または IP]フィールドを空のままにします。コントローラは、このフィールド値を HTTP Request Defaults 要素から継承します。
パラメータ ¶
HTTP ヘッダマネージャ¶
ヘッダー マネージャーを使用すると、HTTP 要求ヘッダーを追加またはオーバーライドできます。
JMeter は複数のヘッダー マネージャーをサポートするようになりました。ヘッダー エントリがマージされて、サンプラーのリストが形成されます。マージされるエントリが既存のヘッダー名と一致する場合、以前のエントリが置き換えられます。これにより、ヘッダーのデフォルト セットを設定し、特定のサンプラーに調整を適用できます。ヘッダーの空の値は既存のヘッダーを削除せず、その値を置き換えるだけであることに注意してください。
パラメータ ¶
この例をダウンロードしてください。この例では、デフォルトの「User-Agent」リクエスト ヘッダーをオーバーライドし、代わりに特定の Internet Explorer エージェント文字列を使用するように JMeter に指示するテスト計画を作成しました。(図 12 および 13 を参照)。
JDBC 接続の構成¶
パラメータ ¶
本当に共有プーリングを使用したい場合 (なぜですか?)、最大カウントをスレッド数と同じに設定して、スレッドが互いに待機しないようにします。
検証クエリのリストはjdbc.config.check.queryプロパティで構成でき、デフォルトでは次のとおりです。
- hsqldb
- INFORMATION_SCHEMA.SYSTEM_USERS から 1 を選択
- オラクル
- デュアルから1つ選択
- DB2
- sysibm.sysdummy1 から 1 を選択
- MySQL または MariaDB
- 1を選択
- Microsoft SQL Server (MS JDBC ドライバー)
- 1を選択
- PostgreSQL
- 1を選択
- アングル
- 1を選択
- ダービー
- 値 1
- H2
- 1を選択
- 火の鳥
- rdb$データベースから1つ選択
- エクサソル
- 1を選択
事前構成済みの jdbc ドライバー クラスのリストは、 jdbc.config.jdbc.driver.classプロパティで構成でき、デフォルトでは次のようになっています。
- hsqldb
- org.hsqldb.jdbc.JDBCDriver
- オラクル
- oracle.jdbc.OracleDriver
- DB2
- com.ibm.db2.jcc.DB2Driver
- MySQL
- com.mysql.jdbc.ドライバー
- Microsoft SQL Server (MS JDBC ドライバー)
- com.microsoft.sqlserver.jdbc.SQLServerDriver または com.microsoft.jdbc.sqlserver.SQLServerDriver
- PostgreSQL
- org.postgresql.ドライバー
- アングル
- com.ingres.jdbc.IngresDriver
- ダービー
- org.apache.derby.jdbc.ClientDriver
- H2
- org.h2.ドライバー
- 火の鳥
- org.firebirdsql.jdbc.FBDriver
- アパッチダービー
- org.apache.derby.jdbc.ClientDriver
- マリアDB
- org.mariadb.jdbc.ドライバー
- SQLite
- org.sqlite.JDBC
- サイベース AES
- net.sourceforge.jtds.jdbc.Driver
- エクサソル
- com.exasol.jdbc.EXADriver
データベースと JDBC ドライバーが異なれば、必要な JDBC 設定も異なります。データベース URL と JDBC ドライバー クラスは、JDBC 実装のプロバイダーによって定義されます。
いくつかの可能な設定を以下に示します。JDBC ドライバーのドキュメントで正確な詳細を確認してください。
JMeter がNo appropriate driverを報告する場合、次のいずれかを意味している可能性が あります。
- ドライバー クラスが見つかりませんでした。この場合、DataSourceElement: Could not load driver: {classname} java.lang.ClassNotFoundException: {classname}などのログ メッセージが表示されます。
- ドライバー クラスが見つかりましたが、クラスは接続文字列をサポートしていません。これは、接続文字列の構文エラー、または間違ったクラス名が使用されたことが原因である可能性があります。
データベース サーバーが実行されていないか、アクセスできない場合、JMeter はjava.net.ConnectExceptionを報告します。
データベースとそのパラメーターの例を以下に示します。
- MySQL
-
- ドライバークラス
- com.mysql.jdbc.ドライバー
- データベース URL
- jdbc:mysql://ホスト[:ポート]/dbname
- PostgreSQL
-
- ドライバークラス
- org.postgresql.ドライバー
- データベース URL
- jdbc:postgresql:{dbname}
- オラクル
-
- ドライバークラス
- oracle.jdbc.OracleDriver
- データベース URL
- jdbc:oracle:thin:@//host:port/service OR jdbc:oracle:thin:@(description=(address=(host={mc-name})(protocol=tcp)(port={port-no} ))(connect_data=(sid={sid})))
- イングレス (2006)
-
- ドライバークラス
- ingres.jdbc.IngresDriver
- データベース URL
- jdbc:ingres://host:port/db[;attr=値]
- Microsoft SQL Server (MS JDBC ドライバー)
-
- ドライバークラス
- com.microsoft.sqlserver.jdbc.SQLServerDriver
- データベース URL
- jdbc:sqlserver://host:port;DatabaseName=dbname
- アパッチダービー
-
- ドライバークラス
- org.apache.derby.jdbc.ClientDriver
- データベース URL
- jdbc:derby://サーバー[:ポート]/データベース名[;URLAttributes=値[;…]]
- マリアDB
-
- ドライバークラス
- org.mariadb.jdbc.ドライバー
- データベース URL
- jdbc:mariadb://ホスト[:ポート]/dbname[;URLAttributes=値[;…]]
- Exasol ( JDBC ドライバーのドキュメントも参照)
-
- ドライバークラス
- com.exasol.jdbc.EXADriver
- データベース URL
- jdbc:exa:host[:port][;schema=SCHEMA_NAME][;prop_x=value_x]
キーストアの設定¶
Keystore Config Element を使用すると、キーストアのロード方法と使用するキーを構成できます。このコンポーネントは通常、応答時間でキーストアの初期化を考慮したくない HTTPS シナリオで使用されます。
この要素を使用するには、最初に、テストするクライアント証明書を使用して Java キー ストアをセットアップする必要があります。
- Java keytoolユーティリティまたは PKI を使用して証明書を作成します
- PKI によって作成された場合は、キーを JKS で受け入れられる形式に変換して、Java キー ストアにインポートします。
- 次に、2 つの JVM プロパティを介してキーストア ファイルを参照します (またはsystem.propertiesに追加します)。
- -Djavax.net.ssl.keyStore=path_to_keystore
- -Djavax.net.ssl.keyStorePassword=password_of_keystore
ストアのソースとして PKCS11 を使用するには、javax.net.ssl.keyStoreTypeをPKCS11 に、javax.net.ssl.keyStoreをNONEに設定する必要があります。
パラメータ ¶
- https.use.cached.ssl.context=falseがjmeter.propertiesまたはuser.propertiesに設定されている
- HTTP リクエストに HTTPClient 4 実装を使用する
ログイン構成要素¶
Login Config Element を使用すると、セットアップの一部としてユーザー名とパスワードを使用するサンプラーで、ユーザー名とパスワードの設定を追加または上書きできます。
パラメータ ¶
LDAP 拡張リクエストのデフォルト¶
LDAP Extended Request Defaults コンポーネントを使用すると、拡張 LDAP テストのデフォルト値を設定できます。LDAP 拡張要求を参照してください。
TCP サンプラ設定¶
TCP Sampler Config は、TCP Sampler のデフォルト データを提供します。
パラメータ ¶
ユーザー定義変数¶
ユーザー定義変数要素を使用すると、テスト計画と同様に、変数の初期セットを定義できます。
UDV は、呼び出されるたびに異なる結果を生成する関数では使用しないでください。最初の関数呼び出しの結果のみが変数に保存されます。 ただし、UDV は__P() などの関数で使用できます。次に例を示します。
ホスト ${__P(ホスト,localhost)}
これにより、変数「HOST」が JMeter プロパティ「host 」の値を持つように定義され、定義されていない場合は デフォルトで「localhost 」になります。
テスト実行中の変数の定義については、ユーザー パラメータを参照してください。UDV は、プランに表示される順序で上から下に処理されます。
簡単にするために、UDV はスレッド グループの先頭 (またはテスト計画自体の下) にのみ配置することをお勧めします。
テスト計画とすべての UDV が処理されると、変数の結果セットが各スレッドにコピーされ、変数の初期セットが提供されます。
User Parameters Pre-Processor や Regular Expression Extractor などのランタイム要素が UDV 変数の 1 つと同じ名前の変数を定義する場合、これは初期値を置き換え、スレッド内の他のすべてのテスト要素には更新された値が表示されます。価値。
パラメータ ¶
確率変数¶
ランダム変数構成要素は、ランダムな数値文字列を生成し、後で使用するために変数に格納するために使用されます。ユーザー定義変数を__Random()関数 と一緒に使用するよりも簡単です。
出力変数は乱数ジェネレーターを使用して作成され、結果の数値は書式文字列を使用して書式設定されます。数値は、式minimum+Random.nextInt(maximum-minimum+1)を使用して計算されます。 Random.nextInt()には正の整数が必要です。これは、maximum-minimum (範囲) が2147483647未満でなければならないことを意味しますが、範囲が OK である限り 、最小値と最大値は任意の長い値にすることができます。
パラメータ ¶
カウンター¶
ユーザーは、スレッド グループ内のどこからでも参照できるカウンターを作成できます。カウンター構成により、ユーザーは開始点、最大値、および増分を構成できます。カウンターは最初から最大までループし、最初からやり直して、テストが終了するまで続けます。
カウンターは long を使用して値を格納するため、範囲は-2^63から2^63-1です。
パラメータ ¶
シンプルな設定要素¶
Simple Config Element を使用すると、サンプラーに任意の値を追加またはオーバーライドできます。値の名前と値自体を選択できます。一部の冒険好きなユーザーはこの要素の用途を見つけるかもしれませんが、ここでは主に開発者が新しい JMeter コンポーネントを開発する際に使用できる基本的な GUI として使用します。
パラメータ ¶
MongoDB ソース構成 (非推奨) ¶
次に、このコードを使用して要素MongoDBHolderを介して Beanshell または JSR223 テスト要素のcom.mongodb.DBオブジェクトに アクセスできます。
com.mongodb.DB をインポートします。 org.apache.jmeter.protocol.mongodb.config.MongoDBHolder をインポートします。 DB db = MongoDBHolder.getDBFromSource("MongoDB ソース プロパティの値", "プロパティ データベース名の値"); …
パラメータ ¶
再試行を継続する最大時間 (デフォルトでは 15 秒) があります。
これは、操作をブロックすることで、サーバーが一時的にダウンしているときに一部の例外がスローされるのを回避するのに役立ちます。
また、新しいプライマリ ノードへの移行をスムーズにするのにも役立ちます (再試行時間内に新しいプライマリ ノードが選択されるようにします)。
- レプリカ セットの場合、ドライバーは、すぐに新しいプライマリ ノードにフェールオーバーするのではなく、その時点で古いプライマリ ノードに接続しようとします。
- これは、ソケットの読み取り/書き込み操作で例外がスローされるのを防ぐものではなく、アプリケーションで処理する必要があります。
新しい接続を確立するときにのみ使用されますSocket.connect(java.net.SocketAddress, int)
デフォルトは0で、タイムアウトなしを意味します。
デフォルトは0です。これは、 autoConnectRetryがオンの場合にデフォルトの 15 秒を使用することを意味します。
デフォルトは120,000です。
デフォルトは0で、タイムアウトなしを意味します。
デフォルトはfalseです。
それ以降のすべてのスレッドは、すぐに例外を受け取ります。
たとえば、connectionsPerHostが10で、threadsAllowedToBlockForConnectionMultiplierが5の場合、最大 50 のスレッドが接続を待機できます。
デフォルトは5です。
が指定されている 場合、この設定は無視されます。 デフォルトはfalseです。
ボルト接続構成¶
パラメータ ¶
18.5 アサーション¶
アサーションは、サンプラーで追加のチェックを実行するために使用さ れ、同じスコープ内のすべてのサンプラーの後に処理されます。アサーションが特定のサンプラーにのみ適用されるようにするには、それをサンプラーの子として追加します。
アサーションは、メイン サンプル、サブサンプル、またはその両方に適用できます。デフォルトでは、メイン サンプルのみにアサーションが適用されます。アサーションがこのオプションをサポートしている場合、GUI に次のようなエントリが表示されます。
または次のサブサンプラーが失敗し、メイン サンプルが成功した場合、メイン サンプルは失敗ステータスに設定され、アサーション結果が追加されます。JMeter 変数オプションを使用すると、メイン サンプルに関連すると見なされ、エラーはメイン サンプルのみに適用されます。
応答アサーション¶
応答アサーション コントロール パネルでは、要求または応答のさまざまなフィールドと比較するパターン文字列を追加できます。パターン文字列は次のとおりです。
- 含む,一致する : Perl5 スタイルの正規表現
- Equals、Substring : プレーン テキスト、大文字と小文字を区別
パターン マッチング文字の概要は、 ORO Perl5 正規表現 で見つけることができます。
また、文字列が応答全体と一致すると予想されるか、または応答にパターンのみが含まれると予想されるかを選択することもできます。柔軟性を高めるために、複数のアサーションを任意のコントローラーにアタッチできます。
パターン文字列には区切り文字を含めないでください。つまり、/Price: \d+/ではなくPrice: \d+を使用してください。
デフォルトでは、パターンは複数行モードです。つまり、「.」メタ文字は改行と一致しません。複数行モードでは、" ^ " と " $ " は、文字列全体の先頭と末尾だけでなく、文字列内の任意の行の先頭または末尾に一致します。\sは改行に一致することに注意してください。大文字小文字も重要です。これらの設定をオーバーライドするには、拡張正規表現構文を使用できます。例えば:
- (?私)
- 大文字と小文字を区別しない
- (?s)
- ターゲットを単一行として扱います。つまり、「.」は改行に一致します
- (?は)
- 上記の両方
- (?i)りんご(?-i)パイ
- " Applee Pie " に一致しますが、" Applee pIe "には一致しません
- (?s)Apple.+?Pie
- はAppleの後にPieが続くものと一致し、これは後続の行にある場合があります。
- Apple(?s).+?Pie
- 上記と同じですが、最初に(?s)を使用する方がおそらく明確です。
パラメータ ¶
- メイン サンプルのみ- メイン サンプルのみに適用されます
- サブサンプルのみ- サブサンプルのみに適用されます
- メインサンプルとサブサンプル- 両方に適用されます。
- 使用する JMeter 変数名- アサーションは名前付き変数の内容に適用されます
- Text Response - サーバーからの応答テキスト、つまり本文で、HTTP ヘッダーは除外されます。
- リクエスト データ- サーバーに送信されるリクエスト テキスト、つまり HTTP ヘッダーを除く本文。
- 応答コード- 例: 200
- 応答メッセージ- 例: OK
- Set-Cookie ヘッダーを含む応答ヘッダー (存在する場合)
- リクエスト ヘッダー
- サンプリングされた URL
- ドキュメント (テキスト) - Apache Tika を介してさまざまなタイプのドキュメントからテキストを抽出します (結果ツリーの表示ドキュメント ビュー セクションを参照)。
サンプルの全体的な成功は、アサーションの結果と既存の応答ステータスを組み合わせることによって決定されます。Ignore Statusチェックボックスが選択されている場合、Assertion を評価する前に Response ステータスが強制的に成功になります。
ステータスが4xxおよび5xxの範囲 の HTTP 応答は、通常、失敗したと見なされます。「Ignore status」チェックボックスを使用して、さらなるチェックを実行する前にステータスを成功に設定できます。これは、以前のアサーションの失敗をクリアする効果があるため、最初のアサーションでのみ設定するようにしてください。- 含む- テキストに正規表現パターンが含まれる場合はtrue
- Matches - テキスト全体が正規表現パターンと一致する場合は true
- Equals - テキスト全体がパターン文字列と等しい場合は true (大文字と小文字を区別)
- Substring - テキストにパターン文字列が含まれている場合は true (大文字と小文字を区別)
パターンは Perl5 スタイルの正規表現ですが、括弧はありません。
期間アサーション¶
Duration アサーションは、各応答が一定時間内に受信されたことをテストします。指定されたミリ秒数 (ユーザーが指定) よりも長くかかる応答は、失敗した応答としてマークされます。
サイズアサーション¶
サイズ アサーションは、各応答に正しいバイト数が含まれていることをテストします。サイズは、特定のバイト数と等しい、より大きい、より小さい、または等しくないことを指定できます。
パラメータ ¶
- メイン サンプルのみ- アサーションはメイン サンプルにのみ適用されます
- サブサンプルのみ- アサーションはサブサンプルにのみ適用されます
- メイン サンプルとサブサンプル- アサーションは両方に適用されます。
- 使用する JMeter 変数名- アサーションは名前付き変数の内容に適用されます
XML アサーション¶
XML アサーションは、応答データが形式的に正しい XML ドキュメントで構成されていることをテストします。DTD またはスキーマに基づいて XML を検証したり、それ以上の検証を行ったりすることはありません。
BeanShell アサーション¶
BeanShell アサーションにより、ユーザーは BeanShell スクリプトを使用してアサーション チェックを実行できます。
BeanShell の使用の詳細については、BeanShell の Web サイトを参照してください。
テスト スクリプトの各スレッドで独立して発生するアサーションごとに異なるインタープリターが使用されますが、後続の呼び出しには同じインタープリターが使用されることに注意してください。これは、アサーションへの呼び出し間で変数が持続することを意味します。
すべてのアサーションは、サンプラーと同じスレッドから呼び出されます。
プロパティ「beanshell.assertion.init」が定義されている場合、ソース ファイルの名前としてインタープリターに渡されます。これは、共通のメソッドと変数を定義するために使用できます。binディレクトリにサンプルの初期化ファイルがあります: BeanShellAssertion.bshrc
テスト要素は、ThreadListenerメソッドとTestListenerメソッドをサポートしています。これらは初期化ファイルで定義する必要があります。定義の例 については、ファイルBeanShellListeners.bshrcを参照してください。
パラメータ ¶
- パラメータ- パラメータを単一の変数として含む文字列
- bsh.args - パラメータを含む文字列配列、空白で分割
試すことができるサンプル スクリプトがあります。
スクリプトを呼び出す前に、BeanShell インタープリターでいくつかの変数が設定されます。特に明記されていない限り、これらは文字列です。
- log -ロガーオブジェクト。(例) log.warn("Message"[,Throwable])
- SampleResult、prev - SampleResultオブジェクト。読み書き
- 応答- 応答オブジェクト。読み書き
- 失敗- ブール値。読み書き; アサーション ステータスの設定に使用
- FailureMessage - 文字列; 読み書き; アサーション メッセージの設定に使用
- ResponseData - 応答本文 (バイト [])
- ResponseCode - 例: 200
- ResponseMessage - 例: OK
- ResponseHeaders - HTTP ヘッダーが含まれています
- RequestHeaders - サーバーに送信された HTTP ヘッダーが含まれています
- サンプルラベル
- SamplerData - サーバーに送信されたデータ
- ctx - JMeterContext
-
vars - JMeterVariables - 例
vars.get("VAR1"); vars.put("VAR2","値"); vars.putObject("OBJ1",新しいオブジェクト());
-
props - JMeterProperties (クラスjava.util.Properties ) - 例
props.get("START.HMS"); props.put("PROP1","1234");
Response オブジェクトの次のメソッドが役立つ場合があります。
- setStopThread(ブール値)
- setStopTest(ブール値)
- 文字列 getSampleLabel()
- setSampleLabel(文字列)
HTML アサーション¶
HTML アサーションにより、ユーザーは JTidy を使用して応答データの HTML 構文を確認できます。
パラメータ ¶
XPath アサーション¶
XPath アサーションは、文書の整形性をテストし、DTD に対して検証するか、文書を JTidy に通して XPath をテストするオプションがあります。その XPath が存在する場合、アサーションは true です。「/」を使用すると、整形式のドキュメントと一致し、デフォルトの XPath 式になります。アサーションは、「 count(//*error)=2 」などのブール式もサポートしています。XPath の 詳細については、 http://www.w3.org/TR/xpathを参照してください。
いくつかのサンプル式:- //title[text()='Text to match'] -応答の任意の場所にある<title>Text to match</title> と一致します
- /title[text()='一致するテキスト'] -応答のルート レベルで<title>一致するテキスト</title> に一致します
パラメータ ¶
名前空間 Xalan XPath パーサー (JMeter のベースとなる実装) の名前空間の制限に対する回避策として、次のことを行う必要があります 。
- 名前空間プレフィックスのマッピングを含む
プロパティ ファイルを提供します (たとえば、ファイルの名前がnamespaces.propertiesの場合)。
prefix1=http\://foo.apache.org prefix2=http\://toto.apache.org …
- 次のプロパティを使用して
、 user.propertiesファイルでこのファイルを参照します。
xpath.namespace.config=namespaces.properties
XPath2 アサーション¶
XPath2 アサーションは、ドキュメントの整形性をテストします。「/」を使用すると、整形式のドキュメントと一致し、デフォルトの XPath2 式です。アサーションは、「 count(//*error)=2 」などのブール式もサポートしています。
いくつかのサンプル式:- //title[text()='Text to match'] -応答の任意の場所にある<title>Text to match</title> と一致します
- /title[text()='一致するテキスト'] -応答のルート レベルで<title>一致するテキスト</title> に一致します
パラメータ ¶
JSR223 アサーション¶
JSR223 アサーションにより、JSR223 スクリプト コードを使用して前のサンプルのステータスを確認できます。
パラメータ ¶
- パラメータ- パラメータを単一の変数として含む文字列
- args - パラメータを含む文字列配列、空白で分割
スクリプトで使用するために、次の変数が設定されます。
- log - ( Logger ) - ログファイルへの書き込みに使用できます
- Label - 文字列ラベル
- Filename - スクリプト ファイル名 (存在する場合)
- Parameters - パラメータ (文字列として)
- args - 文字列配列としてのパラメーター (空白で分割)
- ctx - ( JMeterContext ) - コンテキストへのアクセスを提供します
-
vars - ( JMeterVariables ) - 変数への読み取り/書き込みアクセスを提供します。
vars.get(キー); vars.put(キー、値); vars.putObject("OBJ1",新しいオブジェクト()); vars.getObject("OBJ2");
-
props - (JMeterProperties - クラスjava.util.Properties ) - 例
props.get("START.HMS"); props.put("PROP1","1234");
- SampleResult、prev - ( SampleResult ) - 前の SampleResult (存在する場合) へのアクセスを提供します
- sampler - ( Sampler ) - 現在のサンプラーへのアクセスを提供します
- OUT - System.out - 例: OUT.println("message")
- AssertionResult - ( AssertionResult ) - アサーション結果
スクリプトは、SampleResultのさまざまな側面をチェックできます。エラーが検出された場合、スクリプトはAssertionResult.setFailureMessage("message")およびAssertionResult.setFailure(true)を使用する必要があります。
上記の各変数で使用可能なすべてのメソッドの詳細については、Javadoc を確認してください。
アサーションの比較¶
パラメータ ¶
SMIME アサーション¶
- bcmail-xxx.jar (BouncyCastle SMIME/CMS)
- bcprov-xxx.jar (BouncyCastle プロバイダー)
Mail Reader Sampler を使用している場合は、 [ MIME (raw) を使用してメッセージを保存する] を選択していることを確認してください。そうしないと、アサーションはメッセージを正しく処理できません。
パラメータ ¶
JSON アサーション¶
このコンポーネントを使用すると、JSON ドキュメントの検証を実行できます。まず、JSON を解析し、データが JSON でない場合は失敗します。次に、 Jayway JsonPath 1.2.0の構文を使用して、指定されたパスを検索します。パスが見つからない場合、失敗します。第 3 に、ドキュメント内に JSON パスが見つかり、期待値に対する検証が要求された場合、検証が実行されます。null値の場合、GUI に特別なチェックボックスがあります。パスが配列オブジェクトを返す場合は反復され、期待される値が見つかった場合、アサーションは成功することに注意してください。空の配列を検証するには、[]を使用しますストリング。また、パッチが辞書オブジェクトを返す場合、比較前に文字列に変換されます。
パラメータ ¶
JSON JMESPath アサーション¶
このコンポーネントを使用すると、JMESPathを使用して JSON ドキュメント コンテンツに対してアサーションを実行できます。まず、JSON を解析し、データが JSON でない場合は失敗します。
次に、JMESPath 構文を使用して、指定されたパスを検索します。
パスが見つからない場合、失敗します。
第 3 に、ドキュメント内に JMES パスが見つかり、期待値に対する検証が要求された場合、この追加のチェックが実行されます。nullかどうかを確認する場合は、[ Expect null]チェックボックスを使用します。
式 JMESPath はコンパイルされず、エラーが発生するため、パスを null にすることはできません。空またはヌルの応答が予想される場合でも、有効な JMESPath 式を指定する必要があります。
パラメータ ¶
18.6 タイマー¶
を設定することにより、ランダム タイマーによって計算されたスリープ遅延に乗算係数を適用できます。ここで、float number は正の 10 進数です。 JMeter は、この係数に計算されたスリープ遅延を掛けます。この機能は、次の場合に使用できます。
タイマーは、サンプラーと組み合わせてのみ処理されます。サンプラーと同じスコープにないタイマーはまったく処理されません。
タイマーを単一のサンプラーに適用するには、タイマーをサンプラーの子要素として追加します。タイマーは、サンプラーが実行される前に適用されます。サンプラーの後にタイマーを適用するには、タイマーを次のサンプラーに追加するか、フロー制御アクションサンプラーの子として追加します。
ガウスランダムタイマー¶
このタイマーは、各スレッド要求をランダムな時間だけ一時停止します。ほとんどの時間間隔は、特定の値の近くで発生します。総遅延は、ガウス分布値 (平均0.0および標準偏差1.0 ) に指定した偏差値を掛けたものと、オフセット値の合計です。それを説明する別の方法は、Gaussian Random Timer では、一定のオフセットの周りの変動がガウス曲線分布を持っていることです。
一様ランダムタイマー¶
このタイマーは、発生する確率が同じ時間間隔で、ランダムな時間、各スレッド要求を一時停止します。総遅延は、ランダム値とオフセット値の合計です。
パラメータ ¶
一定スループットタイマー¶
このタイマーは、合計スループット (1 分あたりのサンプル数) を特定の数値にできるだけ近づけるために計算された可変の一時停止を導入します。もちろん、サーバーがそれを処理できない場合、または他のタイマーや時間のかかるテスト要素によって処理できない場合、スループットは低下します。
注意: タイマーはコンスタント スループット タイマーと呼ばれますが、スループット値は一定である必要はありません。変数または関数呼び出しに関して定義でき、テスト中に値を変更できます。値はさまざまな方法で変更できます。
- カウンター変数の使用
- __jexl3、__groovy関数を使用して変化する値を提供する
- リモート BeanShell サーバーを使用して JMeter プロパティを変更する
詳細については、ベスト プラクティスを参照してください。
パラメータ ¶
- このスレッドのみ- 各スレッドは目標スループットを維持しようとします。全体のスループットは、アクティブなスレッドの数に比例します。
- 現在のスレッド グループ内のすべてのアクティブなスレッド- ターゲット スループットは、グループ内のすべてのアクティブなスレッド間で分割されます。各スレッドは、最後にいつ実行されたかに基づいて、必要に応じて遅延します。
- すべてのアクティブなスレッド- ターゲット スループットは、すべてのスレッド グループのすべてのアクティブなスレッドに分割されます。各スレッドは、最後にいつ実行されたかに基づいて、必要に応じて遅延します。この場合、他の各スレッド グループには、同じ設定のコンスタント スループット タイマーが必要になります。
- 現在のスレッド グループ (共有) 内のすべてのアクティブなスレッド- 上記と同様ですが、各スレッドは、グループ内のいずれかのスレッドが最後に実行された時期に基づいて遅延されます。
- すべてのアクティブなスレッド (共有) - 上記と同様。各スレッドは、スレッドが最後に実行された時期に基づいて遅延します。
共有アルゴリズムと非共有アルゴリズムはどちらも、目的のスループットを生成することを目的としており、同様の結果が得られます。
共有アルゴリズムは、より正確な全体的なトランザクション レートを生成する必要があります。
非共有アルゴリズムは、スレッド間でより均一なトランザクションの分散を生成する必要があります。
正確なスループットタイマー¶
このタイマーは、合計スループット (例: 1 分あたりのサンプル数) を可能な限り特定の数値に近づけるために計算された可変の一時停止を導入します。もちろん、サーバーがそれを処理できない場合、または他のタイマーが使用されている場合、または十分なスレッドがない場合、または時間のかかるテスト要素がそれを妨げている場合、スループットは低くなります。
タイマーは正確なスループット タイマーと呼ばれますが、テスト中に 1 秒間隔で正確に同じ数のサンプルを生成することを目的としていません。
タイマーは 36000 リクエスト/時間未満のレートで最適に機能しますが、マイレージは異なる場合があります (目標が大きく異なる場合は、以下の監視セクションを参照してください)。
テスト計画における正確なスループット タイマーの最適な位置
ご存知かもしれませんが、タイマーはすべての兄弟要素とその子要素によって継承されます。そのため、 Precise Throughput Timerの最適な場所の 1 つは、テスト ループの最初の要素の下です。たとえば、最初にダミー サンプラーを追加し、そのダミー サンプラーの下にタイマーを配置することができます。
制作スケジュール
正確なスループット タイマーは、ポアソン到着スケジュールをモデル化します。このスケジュールは実際に頻繁に発生するため、それを負荷テストに使用することは理にかなっています。たとえば、自然に近いサンプルが生成される可能性があるため、同時実行の問題が明らかになる可能性があります。Poisson Random Timerを使用して Poisson 到着を生成できたとしても、以下に挙げる問題の影響を受ける可能性があります。たとえば、真のポアソン到着には無限に長い一時停止がある可能性があり、これは負荷テストには実用的ではありません。たとえば、1 秒あたり 1 回の「通常の」ポアソン到着は、60 秒間の長いテストで 50 サンプルになる可能性があります。
一定スループット タイマーは、指定されたレートに収束しますが、サンプルを等間隔で生成する傾向があります。
立ち上げと起動時のスパイク
「ランプアップ」または同様のアプローチを使用して、テスト開始時のスパイクを回避できます。たとえば、スレッド グループを 100 のスレッドを持つように構成し、ランプアップ期間を0 (または小さい数) に設定すると、すべてのスレッドが同時に開始され、不要な負荷スパイクが発生します。 . その上、Ramp-up Periodを高く設定しすぎると、必要な負荷を達成するために最初に使用できるスレッドが「少なすぎる」という結果になる可能性があります。
Precise Throughput Timerはランダムな方法で実行をスケジュールするため、一定の負荷を生成するために使用できます 。Ramp-up PeriodとDelayの両方を0に設定することをお勧めします。
同時に開始する複数のスレッド グループ
テスト計画に複数のスレッド グループが含まれている場合、ランプアップの問題のバリエーションが発生する可能性があります。その問題を軽減するために、通常、各スレッド グループに「ランダムな」遅延を追加して、スレッドが異なる時間に開始されるようにします。
正確なスループット タイマーは、ランダムな方法で実行をスケジュールするため、この問題を回避します。起動時のスパイクを軽減するためにランダムな遅延を追加する必要はありません
1 時間あたりの反復回数
基本的な要件の 1 つは、M 分ごとに N サンプルを発行することです。1 時間あたり 60 回の反復とします。「ランダムがランダムだったからといって」57回の実行で負荷テストの結果を報告しても、ビジネス顧客は理解できません。1 時間あたり 60 回の反復を生成するには、次のように構成する必要があります (他のパラメーターはデフォルト値のままにしておくことができます)。
- 目標スループット (サンプル) : 60
- スループット期間 (秒) : 3600
- テスト時間 (秒) : 3600
最初の 2 つのオプションは、スループットを設定します。60/3600、30/1800、および 120/7200 はまったく同じ負荷レベルを表しますが、ビジネス要件をより適切に表すものを選択してください。たとえば、要件が「1 時間あたり 60 サンプル」のテストである場合は、60/3600 を設定します。要件が「1 分間に 1 サンプル」をテストすることである場合は、1/60 を設定します。
テスト期間 (秒)があるため、タイマーは特定のテスト期間の正確なサンプル数を保証します。Precise Throughput Timerは、テストの開始時にサンプルのスケジュールを作成します。たとえば、1 時間あたり 60 のスループットで 5 分間のテストを実行する場合は、[テスト期間 (秒)]を 300 に設定します。これにより、ビジネスに適した方法でスループットを構成できます。注:テスト期間 (秒)は、テスト期間を制限しません。タイマーのヒントです。
スレッド数と思考時間
一般的な落とし穴の 1 つは、目的のスループットを実現するために、スレッド数と思考時間を調整することです。うまくいくかもしれませんが、そのアプローチではテストの実行に多くの時間が費やされます。新しいアプリケーション バージョンが到着したときに、スレッドと遅延を再度調整する必要がある場合があります。
正確なスループット タイマーを使用すると、スループットの目標を設定し、アプリケーションのパフォーマンスに関係なく目標を達成できます。そのために、Precise Throughput Timer はテストの開始時にスケジュールを作成し、そのスケジュールを使用してスレッドを解放します。思考時間とスレッド数の主な要因は、何らかの方法でスループットを一致させたいという欲求ではなく、ビジネス要件であるべきです。
たとえば、アプリケーションがコール センターのサポート エンジニアによって使用されているとします。コール センターに 2 人のエンジニアがいて、目標スループットが 1 分あたり 1 人であるとします。エンジニアが Web ページを読んで確認するのに 4 分かかるとします。その場合、グループに 2 つのスレッドを設定し、思考時間の遅延に 4 分を使用し、Precise Throughput Timerで 1 分あたり 1 つを指定する必要があります。もちろん、1 分あたり約 2 サンプル/4 分 = 0.5 という結果になり、このようなテストの結果は、「コール センターでサポート エンジニアをもっと必要としている」または「エンジニアがタスクを遂行するのにかかる時間を短縮する必要がある」ことを意味します。 "。
低レートのテストと反復可能なテスト
低レート (例: 1 時間あたり 60 回) でのテストでは、目的のテスト プロファイルを知る必要があります。たとえば、均等な間隔 (たとえば 60 秒間隔) で負荷を注入する必要がある場合は、Constant Throughput Timerを使用することをお勧めします。ただし、スケジュールをランダム化する必要がある場合 (レポートを実行する実際のユーザーをモデル化する場合など) は、Precise Throughput Timerが役に立ちます。
複数の負荷テストの結果を比較する場合、まったく同じテスト プロファイルを繰り返せると便利です。たとえば、アクション X (「利益レポート」など) がテスト開始の 5 分後に呼び出された場合、その後のテスト実行でそのパターンを複製するとよいでしょう。同じ負荷パターンを再現すると、テスト結果の分析が簡素化されます (CPU% グラフなど)。
ランダム シード (0 からランダムに変更)を使用すると、 Precise Throughput Timerで使用されるシード値を制御できます。デフォルトでは、0で初期化されます。これは、テストの実行ごとにランダム シードが使用されることを意味します。反復可能な負荷パターンが必要な場合は、 ランダム シードをランダムな値に変更します。一般的なアドバイスは、ゼロ以外のシードを使用することであり、「デフォルトで 0」が実装上の制限です。
注: 同じスループット レートとゼロ以外の同じシードを持つ複数のスレッド グループを使用すると、サンプルが同時に発生する可能性があります。
高レートおよび/または長いテスト期間のテスト
Precise Throughput Timerはスケジュールを生成し、メモリに保持します。ほとんどの場合、問題にはなりませんが、スケジュールを 1'000'000 サンプルよりも短くしたい場合があることを覚えておいてください。1'000'000 サンプルのスケジュールを生成するのに約 200 ミリ秒かかり、スケジュールはヒープで 8 メガバイトを消費します。1,000 万エントリのスケジュールの構築には 1 ~ 2 秒かかり、ヒープで 80 メガバイトを消費します。
たとえば、1 時間あたり 5,000 のレートで 2 週間にわたるテストを実行する場合、1 時間あたり正確に 5,000 サンプルが必要になるでしょう。タイマーのタイマーのTest duration (seconds)プロパティを 1 時間に設定できます。次に、タイマーは 1 時間に 5,000 サンプルのスケジュールを作成し、スケジュールが使い果たされると、タイマーは次の 1 時間のスケジュールを生成します。
同時に、テスト期間 (秒)を 2 週間に設定すると、タイマーは 168'000 サンプル = 2 週間 * 5'000 サンプル/時間 = 2*7*24*500のスケジュールを生成します。スケジュールの生成には約 30 ミリ秒かかり、1 メガバイト強を消費します。
バースト負荷
すべてのサンプルをペア、トリプルなどにする必要がある場合があります。特定のケースはSynchronizing Timerで 解決できますが、 Precise Throughput Timerにはパックでリクエストを発行するネイティブな方法があります。この動作はデフォルトで無効になっており、「バッチ出発」設定で制御されます
- バッチ内のスレッド数 (threads)。バッチ内のサンプル数を指定します。サンプルの総数は依然としてターゲットスループットと一致していることに注意してください
- バッチ内のスレッド間の遅延 (ミリ秒)。たとえば、42 に設定され、バッチ サイズが 3 の場合、スレッドは x、x+42ms、x+84ms で出発します。
可変負荷率
プロパティ値 (スループットなど) は式で定義できますが、新しい値を適応させるために新しいスケジュールを再計算するには時間がかかるため、テストを通じて値をほぼ同じに保つことをお勧めします。
モニタリング
次のスケジュールが生成されると、Precise Throughput Timerは次のメッセージをjmeter.logに記録します 。 i21) 0 ミリ秒で。First 15 events will be fired at: 1.1869653574244292 (+1.1869653574244292), 1.4691340403043207 (+0.2821686828798915), 3.638151706179226 (+2.169017665874905), 3.836357090410566 (+0.19820538423134026), 4.709330071408575 (+0.8729729809980085), 5.61330076999953 (+0.903970698590955), ... これは、スケジュールの生成に 0 ミリ秒かかったことを示しており、絶対タイムスタンプを秒単位で示しています。上記の場合、レートは 1 秒あたり 1 に設定され、実際のタイムスタンプは 1.2 秒、1.5 秒、3.6 秒、3.8 秒、4.7 秒などになりました。
パラメータ ¶
タイマーの同期¶
SyncTimer の目的は、X 個のスレッドがブロックされるまでスレッドをブロックし、その後、すべてのスレッドを一度に解放することです。したがって、SyncTimer は、テスト計画のさまざまなポイントで大きな即時負荷を作成できます。
パラメータ ¶
BeanShell タイマー¶
BeanShell タイマーを使用して遅延を生成できます。
BeanShell の使用の詳細については、BeanShell の Web サイトを参照してください。
テスト要素は、ThreadListenerメソッドとTestListenerメソッドをサポートしています。これらは初期化ファイルで定義する必要があります。定義の例 については、ファイルBeanShellListeners.bshrcを参照してください。
パラメータ ¶
- パラメータ- パラメータを単一の変数として含む文字列
- bsh.args - パラメータを含む文字列配列、空白で分割
スクリプトを呼び出す前に、いくつかの変数が BeanShell インタープリターに設定されます。
- log - ( Logger ) - ログファイルへの書き込みに使用できます
- ctx - ( JMeterContext ) - コンテキストへのアクセスを提供します
-
vars - ( JMeterVariables ) - 変数への読み取り/書き込みアクセスを提供します。
vars.get(キー); vars.put(キー、値); vars.putObject("OBJ1",新しいオブジェクト());
- props - (JMeterProperties - クラス java.util.Properties) - 例props.get("START.HMS"); props.put("PROP1","1234");
- prev - ( SampleResult ) - 前のSampleResult (存在する場合)へのアクセスを提供します
上記の各変数で使用可能なすべてのメソッドの詳細については、Javadoc を確認してください。
プロパティbeanshell.timer.initが定義されている場合、これは、BeanShell スクリプトで使用するメソッドなどを定義するために使用できる初期化ファイルをロードするために使用されます。
JSR223 タイマー¶
JSR223 タイマーは、JSR223 スクリプト言語を使用して遅延を生成するために使用できます。
パラメータ ¶
- パラメータ- パラメータを単一の変数として含む文字列
- args - パラメータを含む文字列配列、空白で分割
スクリプトを呼び出す前に、いくつかの変数がスクリプト インタープリターに設定されます。
- log - ( Logger ) - ログファイルへの書き込みに使用できます
- ctx - ( JMeterContext ) - コンテキストへのアクセスを提供します
-
vars - ( JMeterVariables ) - 変数への読み取り/書き込みアクセスを提供します。
vars.get(キー); vars.put(キー、値); vars.putObject("OBJ1",新しいオブジェクト());
- props - (JMeterProperties - クラス java.util.Properties) - 例props.get("START.HMS"); props.put("PROP1","1234");
- sampler - ( Sampler ) - 現在のサンプラー
- ラベル- タイマーの名前
- FileName - ファイル名 (存在する場合)
- OUT - System.out
上記の各変数で使用可能なすべてのメソッドの詳細については、Javadoc を確認してください。
ポアソンランダムタイマー¶
このタイマーは、各スレッド要求をランダムな時間だけ一時停止します。ほとんどの時間間隔は、特定の値の近くで発生します。総遅延は、ポアソン分布値とオフセット値の合計です。
注: ポアソン到着をモデル化する場合は、代わりに正確なスループット タイマーを使用することを検討してください。
パラメータ ¶
18.7 プリプロセッサ¶
プリプロセッサは、スコープ内のサンプラを変更するために使用されます。
HTML リンクパーサー¶
この修飾子は、サーバーからの HTML 応答を解析し、リンクとフォームを抽出します。この修飾子を通過する URL テスト サンプルは、直前の応答から抽出されたリンクまたはフォームのいずれかと「一致」するかどうかが調べられます。次に、URL テスト サンプルの値を、一致するリンクまたはフォームからの適切な値に置き換えます。Perl タイプの正規表現は、一致を見つけるために使用されます。
簡単な例を考えてみましょう: サーバーから返された HTML から解析されたリンクを次から次へとヒットさせて、JMeter にサイトを「スパイダー」させたいとしましょう (これは実際には最も有用なことではありませんが、良い例として役立ちます)。 . Simple Controllerを作成し、それに「HTML Link Parser」を追加します。次に、HTTP リクエストを作成し、ドメインを「.*」に設定し、パスも同様に設定します。これにより、テスト サンプルは、返されたページで見つかったリンクと一致します。スパイダリングを特定のドメインに制限したい場合は、ドメインの値を必要な値に変更します。次に、そのドメインへのリンクのみがたどられます。
より便利な例: Web ポーリング アプリケーションの場合、ユーザーが選択できるラジオ ボタンとしていくつかのポーリング オプションを含むページがあるとします。投票オプションの値が非常に動的であるとしましょう - おそらくユーザーが生成したものです。JMeter でポーリングをテストする場合は、ハードコードされた値を選択してテスト サンプルを作成するか、HTML リンク パーサーにフォームを解析させて、ランダム ポーリング オプションを URL テスト サンプルに挿入することができます。これを行うには、上記の例に従ってください。ただし、Web テスト コントローラーの URL オプションを構成するときは、メソッドとして「 POST 」を必ず選択してください。domain、path、およびその他のフォーム パラメータにハードコードされた値を入力します。次に、実際のラジオ ボタンのパラメーターとして、名前を入力します (そうしましょう。poll_choice ")、そしてそのパラメーターの値の " .* "。修飾子がこの URL テスト サンプルを調べると、それが投票フォームに「一致」していることがわかります (そして、それが与えられた場合、他のフォームと一致するべきではありません)。 URL テスト サンプルの他のすべての側面を指定しました)、フォーム パラメータをフォームの一致するパラメータに置き換えます. 正規表現 " .* " は何にでも一致するため、修飾子にはおそらくリストがあります。選択するラジオ ボタンの数. ランダムに選択され、URL テスト サンプルの値が置き換えられます. テストのたびに、新しいランダム値が選択されます.
HTTP URL 書き換え修飾子¶
この修飾子は HTML リンク パーサーと同様に機能しますが、HTML リンク パーサーよりも使いやすく、より効率的な特定の目的があることを除きます。URL 書き換えを使用して Cookie の代わりにセッション ID を保存する Web アプリケーションの場合、この要素はHTTP Cookie Managerと同様に ThreadGroup レベルでアタッチできます。セッション ID パラメーターの名前を指定するだけで、ページ上でそれが検出され、その ThreadGroup のすべての要求に引数が追加されます。
または、この修飾子を選択したリクエストにアタッチすると、それらのみが変更されます。賢いユーザーは、この修飾子を使用して、 HTML リンク パーサーを逃れる値を取得できると判断することさえあり ます。
パラメータ ¶
ユーザーパラメータ¶
ユーザーは、個々のスレッドに固有のユーザー変数の値を指定できます。
ユーザー変数はテスト計画でも指定できますが、個々のスレッドに固有ではありません。このパネルでは、任意のユーザー変数に一連の値を指定できます。スレッドごとに、一連の値のいずれかが変数に順番に割り当てられます。値よりも多くのスレッドがある場合、値は再利用されます。たとえば、これを使用して、各スレッドで使用される個別のユーザー ID を割り当てることができます。ユーザー変数は、任意の JMeter コンポーネントの任意のフィールドで参照できます。
変数を指定するには、パネルの下部にある[変数の追加] ボタンをクリックし、[名前: ] 列に変数名を入力します。シリーズに新しい値を追加するには、[ユーザーの追加]ボタンをクリックし、新しく追加された列に目的の値を入力します。
関数構文${variable}を使用して、同じスレッド グループ内の任意のテスト コンポーネントで値にアクセスできます。
多数のパラメーターに適したCSV Data Set Config要素も参照してください。
BeanShell プリプロセッサ¶
BeanShell PreProcessor を使用すると、サンプルを取得する前に任意のコードを適用できます。
BeanShell の使用の詳細については、BeanShell の Web サイトを参照してください。
テスト要素は、ThreadListenerメソッドとTestListenerメソッドをサポートしています。これらは初期化ファイルで定義する必要があります。定義の例 については、ファイルBeanShellListeners.bshrcを参照してください。
パラメータ ¶
- パラメータ- パラメータを単一の変数として含む文字列
- bsh.args - パラメータを含む文字列配列、空白で分割
スクリプトを呼び出す前に、いくつかの変数が BeanShell インタープリターに設定されます。
- log - ( Logger ) - ログファイルへの書き込みに使用できます
- ctx - ( JMeterContext ) - コンテキストへのアクセスを提供します
-
vars - ( JMeterVariables ) - 変数への読み取り/書き込みアクセスを提供します。
vars.get(キー); vars.put(キー、値); vars.putObject("OBJ1",新しいオブジェクト());
- props - (JMeterProperties - クラス java.util.Properties) - 例props.get("START.HMS"); props.put("PROP1","1234");
- prev - ( SampleResult ) - 前の SampleResult (存在する場合) へのアクセスを提供します
- sampler - ( Sampler )- 現在のサンプラーへのアクセスを提供します
上記の各変数で使用可能なすべてのメソッドの詳細については、Javadoc を確認してください。
プロパティbeanshell.preprocessor.initが定義されている場合、これは、BeanShell スクリプトで使用するメソッドなどを定義するために使用できる初期化ファイルをロードするために使用されます。
JSR223 プリプロセッサ¶
JSR223 PreProcessor を使用すると、サンプルを取得する前に JSR223 スクリプト コードを適用できます。
パラメータ ¶
- パラメータ- パラメータを単一の変数として含む文字列
- args - パラメータを含む文字列配列、空白で分割
次の JSR223 変数は、スクリプトで使用するために設定されています。
- log - ( Logger ) - ログファイルへの書き込みに使用できます
- Label - 文字列ラベル
- FileName - スクリプト ファイル名 (存在する場合)
- Parameters - パラメータ (文字列として)
- args - 文字列配列としてのパラメーター (空白で分割)
- ctx - ( JMeterContext ) - コンテキストへのアクセスを提供します
-
vars - ( JMeterVariables ) - 変数への読み取り/書き込みアクセスを提供します。
vars.get(キー); vars.put(キー、値); vars.putObject("OBJ1",新しいオブジェクト()); vars.getObject("OBJ2");
- props - (JMeterProperties - クラス java.util.Properties) - 例props.get("START.HMS"); props.put("PROP1","1234");
- sampler - ( Sampler )- 現在のサンプラーへのアクセスを提供します
- OUT - System.out - 例: OUT.println("message")
上記の各変数で使用可能なすべてのメソッドの詳細については、Javadoc を確認してください。
JDBC プリプロセッサ¶
JDBC PreProcessor を使用すると、サンプルを実行する直前に SQL ステートメントを実行できます。これは、JDBC サンプルがデータベースにあるデータを必要とし、セットアップ スレッド グループでこれを計算できない場合に役立ちます。詳細については、JDBC リクエストを参照してください。
次のテスト計画を参照してください。
リンクされたテスト プランの " Create Price Cut-Off " では、JDBC PreProcessor がストアド プロシージャを呼び出して、データベースに Price Cut-Off を作成します。これは、" Calculate Price Cut-off" で使用されます。
正規表現ユーザーパラメーター¶
正規表現を使用して、別の HTTP 要求から抽出された HTTP パラメーターの動的な値を指定できます。RegEx ユーザー パラメータは、個々のスレッドに固有です。
このコンポーネントを使用すると、HTTP 要求パラメーターの名前と値を抽出する正規表現の参照名を指定できます。パラメータの名前とパラメータの値には、正規表現グループ番号を指定する必要があります。置換は、名前が一致するこの正規表現ユーザー パラメータを使用するサンプラーのパラメータに対してのみ行われます
パラメータ ¶
3 つの入力パラメータを持つフォームを返すリクエストがあり、そのうちの 2 つの値を抽出して次のリクエストに挿入したいとします。
- 最初の HTTP リクエストに対してポスト プロセッサの正規表現を作成する
- refName - 正規表現の名前を設定する Expression ( listParams )
-
正規表現- 入力名と入力値の属性を抽出する式
例: input name="([^"]+?)" value="([^"]+?)" - テンプレート- 空になります
- match nr - -1 (可能なすべての一致を繰り返すため)
- 2 番目の HTTP 要求のプリプロセッサ RegEx ユーザー パラメータを作成する
- refName - 正規表現の同じ参照名を設定します。この例ではlistParamsになります。
- パラメータ名グループ番号- パラメータ名の正規表現のグループ番号。この例では1になります。
- パラメータ値のグループ番号- パラメータ値の正規表現のグループ番号。この例では2になります。
パラメーターの名前と値を抽出するために使用される、 Regular Expression Extractor要素も参照してください。
サンプルタイムアウト¶
このプリプロセッサは、完了までに時間がかかりすぎる場合にサンプルを中断するタイマー タスクをスケジュールします。ゼロまたは負の場合、タイムアウトは無視されます。これが機能するには、サンプラーが Interruptible を実装する必要があります。次のサンプラーがそうすることが知られています:
AJP、BeanShell、FTP、HTTP、Soap、AccessLog、MailReader、JMS Subscriber、TCPSampler、TestAction、JavaSampler
テスト要素は、接続タイムアウトや応答タイムアウトなどの個々のタイムアウトが不十分な場合、またはサンプラーがタイムアウトをサポートしていない場合に使用することを目的としています。タイムアウトは、通常のテストでトリガーされないように十分に長く設定する必要がありますが、スタックしているサンプルを中断できるように十分に短く設定する必要があります。
[デフォルトでは、JMeter は Callable を使用してサンプラーを中断します。これはタイマーと同じスレッドで実行されるため、割り込みに時間がかかると、後続のタイムアウトの処理が遅れる可能性があります。これは問題になるとは思われませんが、必要に応じて、プロパティInterruptTimer.useRunnableをtrueに 設定して、Callable の代わりに別の Runnable スレッドを使用できます。]
18.8 ポストプロセッサ¶
名前が示すように、ポスト プロセッサはサンプラーの後に適用されます。これらは同じスコープ内のすべてのサンプラーに適用されることに注意してください。そのため、ポストプロセッサーが特定のサンプラーにのみ適用されるようにするには、サンプラーの子として追加します。
ポストプロセッサはアサーションの前に実行されるため、アサーション結果にアクセスすることはできず、サンプル ステータスにアサーションの結果が反映されることもありません。アサーション結果へのアクセスが必要な場合は、代わりにリスナーを使用してみてください。また、すべてのアサーションが実行された後 、変数JMeterThread.last_sample_okが「 true」または「false 」に設定されることにも注意してください。
正規表現エクストラクタ¶
ユーザーが Perl タイプの正規表現を使用してサーバーの応答から値を抽出できるようにします。ポストプロセッサとして、この要素はスコープ内の各 Sample リクエストの後に実行され、正規表現を適用し、リクエストされた値を抽出し、テンプレート文字列を生成し、結果を指定された変数名に保存します。
パラメータ ¶
- メイン サンプルのみ- メイン サンプルのみに適用されます
- サブサンプルのみ- サブサンプルのみに適用されます
- メインサンプルとサブサンプル- 両方に適用されます。
- 使用する JMeter 変数名- 抽出は名前付き変数の内容に適用されます
- Body - 応答の本文、たとえば Web ページのコンテンツ (ヘッダーを除く)
-
本文 (エスケープなし) - すべての Html エスケープ コードが置き換えられた応答の本文。Html エスケープはコンテキストに関係なく処理されるため、誤った置換が行われる可能性があることに注意してください。
このオプションはパフォーマンスに大きく影響するため、絶対に必要な場合にのみ使用し、その影響に注意してください。
-
Body as a Document - Apache Tika を介してさまざまなタイプのドキュメントからテキストを抽出します (結果ツリーの表示ドキュメント ビュー セクションを参照)。
Body as a Document オプションはパフォーマンスに影響を与える可能性があるため、テストに問題がないことを確認してください。
- リクエスト ヘッダー- HTTP 以外のサンプルには存在しない場合があります
- 応答ヘッダー- HTTP 以外のサンプルには存在しない場合があります
- URL
- 応答コード- 例: 200
- 応答メッセージ- 例: OK
- JMeter がランダムに一致を選択する必要があることを示すには、ゼロの値を使用します。
- 正の数 N は、n番目の一致を選択することを意味します。
- 負の数は、 ForEach コントローラーと組み合わせて使用されます。以下を参照してください。
ただし、同じ変数を設定する複数のテスト要素がある場合、式が一致しない場合は、変数を変更しないでおくことができます。この場合、デバッグが完了したらデフォルト値を削除します。
一致番号が負でない数に設定され、一致が発生した場合、変数は次のように設定されます。
- refName - テンプレートの値
- refName_g n、n = 0、1、2 - 一致するグループ
- refName_g - 正規表現のグループ数 ( 0を除く)
一致するものがない場合、refName変数はデフォルトに設定されます (これがない場合を除く)。また、次の変数が削除されます。
- refName_g0
- refName_g1
- refName_g
一致数が負の数に設定されている場合、サンプラー データ内のすべての可能な一致が処理されます。変数は次のように設定されます。
- refName_matchNr - 見つかった一致の数。0になる可能性があります
- refName_ n、n = 1、2、3など - テンプレートによって生成された文字列
- refName_ n _g m、ここでm = 0 , 1 , 2 - マッチnのグループ
- refName - 常にデフォルト値に設定
- refName_g n - 未設定
この場合、 refName変数は常にデフォルト値に設定され、関連するグループ変数は設定されない ことに注意してください。
修飾子の指定方法の例、およびJMeter 正規表現の詳細については、 Response Assertionも参照してください。
CSS セレクター エクストラクタ (旧: CSS/JQuery エクストラクタ) ¶
ユーザーが CSS セレクター構文を使用して、サーバーの HTML 応答から値を抽出できるようにします。ポストプロセッサとして、この要素はスコープ内の各サンプル リクエストの後に実行され、CSS/JQuery 式を適用し、リクエストされたノードを抽出し、ノードをテキストまたは属性値として抽出し、結果を指定された変数名に保存します。
パラメータ ¶
- メイン サンプルのみ- メイン サンプルのみに適用されます
- サブサンプルのみ- サブサンプルのみに適用されます
- メインサンプルとサブサンプル- 両方に適用されます。
- 使用する JMeter 変数名- 抽出は名前付き変数の内容に適用されます
- E[foo] - 「 foo」属性を持つE要素
- 祖先の子- 祖先から派生した子要素。たとえば、.body pは、クラス「 body」を持つブロックの下の任意の場所にあるp 個の要素を検索します
- :lt(n) - 兄弟インデックス (つまり、親に対する DOM ツリー内の位置) がnより小さい要素を検索します。例: td:lt(3)
- :contains(text) - 指定されたtextを含む要素を検索します。検索では大文字と小文字が区別されません。例p:contains(jsoup)
- …
属性が設定されている場合、これはJSoupのElement#attr(name)関数と同等です。
空の場合、属性に値が設定されていない場合、これは JSoup のElement#text()関数と同等です。
- JMeter がランダムに一致を選択する必要があることを示すには、ゼロの値を使用します。
- 正の数Nは、n番目の一致を選択することを意味します。
- 負の数は、 ForEach コントローラーと組み合わせて使用されます。以下を参照してください。
ただし、同じ変数を設定する複数のテスト要素がある場合、式が一致しない場合は、変数を変更しないでおくことができます。この場合、デバッグが完了したらデフォルト値を削除します。
一致番号が負でない数に設定され、一致が発生した場合、変数は次のように設定されます。
- refName - テンプレートの値
一致するものがない場合、refName変数はデフォルトに設定されます (これがない場合を除く)。
一致数が負の数に設定されている場合、サンプラー データ内のすべての可能な一致が処理されます。変数は次のように設定されます。
- refName_matchNr - 見つかった一致の数。0になる可能性があります
- refName_n、ここでn = 1、2、3など - テンプレートによって生成された文字列
- 参照名 - 常にデフォルト値に設定
refName に注意してください。変数は常にデフォルト値に設定される
XPath2 エクストラクタ¶
パラメータ ¶
- メイン サンプルのみ- メイン サンプルのみに適用されます
- サブサンプルのみ- サブサンプルのみに適用されます
- メインサンプルとサブサンプル- 両方に適用されます。
- 使用する JMeter 変数名- 抽出は名前付き変数の内容に適用されます
たとえば、//titleは " Apache JMeter " ではなく" <title>Apache JMeter</title> "を返します。 この場合、//title/text()は " Apache JMeterを返します。
ます。
- 0 : ランダムを意味します (デフォルト値)
- -1はすべての結果を抽出することを意味し、<変数名> _N ( Nは 1 から結果の数まで)という名前が付けられます。
- X : X番目の結果を抽出することを意味します。この X thが一致数より大きい場合、何も返されません。デフォルト値が使用されます
ForEach コントローラーでの使用を許可するには、上記の XPath Extractor とまったく同じように機能します
XPath2 Extractor は、改善された構文や最初のバージョンよりもはるかに多くの機能など、いくつかの興味深いツールを提供します。
以下にいくつかの例を示します。
- abs(/本/ページ[2])
- 本からページの2番目の絶対値を抽出します
- avg(/図書館/本/ページ)
- ライブラリ内のすべての書籍から平均ページ数を抽出します
- 比較(/本[1]/ページ[2],/本[2]/ページ[2])
- 最初の本の 2ページ目と 2番目の本の2ページ目が等しい場合は 0 に等しい整数値を返し、そうでない場合は-1 を返します。
これらの関数の詳細については、xPath2 関数を確認してください。
XPath エクストラクタ¶
パラメータ ¶
- メイン サンプルのみ- メイン サンプルのみに適用されます
- サブサンプルのみ- サブサンプルのみに適用されます
- メインサンプルとサブサンプル- 両方に適用されます。
- 使用する JMeter 変数名- 抽出は名前付き変数の内容に適用されます
- HTML 応答の場合は、 「Use Tidy」をオンにする必要があります。このような応答は、Tidy を使用して有効な XHTML (XML 互換 HTML) に変換されます。
- " Use Tidy " は、XHTML または XML 応答 (RSS など) の両方でオフにする必要があります。
たとえば、//titleは " Apache JMeter " ではなく" <title>Apache JMeter</title> "を返します。 この場合、//title/text()は「 Apache JMeter 」を返します。
- 0 : ランダムを意味します
- -1はすべての結果を抽出することを意味し (デフォルト値)、名前は<変数名> _N ( Nは 1 から結果の数まで) となります。
- X : X番目の結果を抽出することを意味します。この X thが一致数より大きい場合、何も返されません。デフォルト値が使用されます
ForEach Controllerで使用できるようにするために、戻り時に次の変数が設定されます。
- refName - 最初の (または唯一の) 一致に設定します。一致しない場合は、デフォルトに設定します
- refName_matchNr - 一致数に設定 ( 0の場合もある)
- refName_n - n = 1、2、3など。1番目、2番目、 3番目の一致など に設定します。
XPath は、主に XSLT 変換を対象としたクエリ言語です。ただし、構造化データの汎用クエリ言語としても役立ちます。詳細については 、 XPath リファレンスまたはXPath 仕様を参照してください。以下にいくつかの例を示します。
- /html/head/タイトル
- HTML レスポンスからタイトル要素を抽出します
- /本/ページ[2]
- 本から2ページ目を抽出します
- /本/ページ
- 本からすべてのページを抽出します
- //form[@name='countryForm']//select[@name='country']/option[text()='Czech Republic'])/@value
- name 属性 ' countryForm 'を持つフォーム内のname 属性 ' country 'を持つ select 要素内のテキスト ' Czech Republic 'と一致する option 要素の value 属性を抽出します
- すべての要素と属性名は小文字に変換されます
- Tidy は、不適切にネストされた要素を修正しようとします。例 - 元の (間違った) ul/font/liは正しいul/li/fontになります
名前空間 Xalan XPath パーサー (JMeter のベースとなる実装) の名前空間の制限に対する回避策として、次のことを行う必要があります 。
- 名前空間プレフィックスのマッピングを含む
プロパティ ファイルを提供します (たとえば、ファイルの名前がnamespaces.propertiesの場合)。
prefix1=http\://foo.apache.org prefix2=http\://toto.apache.org …
- 次のプロパティを使用して
、 user.propertiesファイルでこのファイルを参照します。
xpath.namespace.config=namespaces.properties
//mynamespace:タグ名
//*[local-name()='tagname' and namespace-uri()='uri-for-namespace']uri-for-namespace mynamespace
JSON JMESPath エクストラクタ¶
パラメータ ¶
- メイン サンプルのみ- メイン サンプルのみに適用されます
- サブサンプルのみ- サブサンプルのみに適用されます
- メインサンプルとサブサンプル- 両方に適用されます。
- 使用する JMeter 変数名- 抽出は名前付き変数の内容に適用されます
- 0 : ランダムを意味します
- -1はすべての結果を抽出することを意味し (デフォルト値)、名前は<変数名> _N ( Nは 1 から結果の数まで) となります。
- X : X番目の結果を抽出することを意味します。この X thが一致数より大きい場合、何も返されません。デフォルト値が使用されます
JMESPath は JSON のクエリ言語です。これは、完全な仕様を持つ ABNF 文法で記述されています。これにより、言語構文が正確に定義されます。詳細については、 JMESPath リファレンスを参照してください。JMESPath Exampleにもいくつかの例があります。
結果ステータス アクション ハンドラ¶
パラメータ ¶
- 続行- エラーを無視してテストを続行します
- 次のスレッド ループを開始- 現在の反復でエラーが発生したサンプラーに続くサンプラーを実行せず、次の反復でループを再開します。
- スレッドの停止- 現在のスレッドが終了します
- テストの停止- 現在のサンプルが終了すると、テスト全体が停止します。
- 今すぐテストを停止 - テスト全体が突然停止します。可能であれば、現在のサンプラーはすべて中断されます。
BeanShell ポストプロセッサ¶
BeanShell PreProcessor を使用すると、サンプルを取得した後に任意のコードを適用できます。
BeanShell ポスト プロセッサは、結果データの長さがゼロのサンプルを無視しなくなりました
BeanShell の使用の詳細については、BeanShell の Web サイトを参照してください。
テスト要素は、ThreadListenerメソッドとTestListenerメソッドをサポートしています。これらは初期化ファイルで定義する必要があります。定義の例 については、ファイルBeanShellListeners.bshrcを参照してください。
パラメータ ¶
- パラメータ- パラメータを単一の変数として含む文字列
- bsh.args - パラメータを含む文字列配列、空白で分割
次の BeanShell 変数は、スクリプトで使用するために設定されています。
- log - ( Logger ) - ログファイルへの書き込みに使用できます
- ctx - ( JMeterContext ) - コンテキストへのアクセスを提供します
-
vars - ( JMeterVariables ) - 変数への読み取り/書き込みアクセスを提供します。
vars.get(キー); vars.put(キー、値); vars.putObject("OBJ1",新しいオブジェクト());
- props - (JMeterProperties - クラス java.util.Properties) - 例props.get("START.HMS"); props.put("PROP1","1234");
- prev - ( SampleResult ) - 前の SampleResult へのアクセスを提供します
- data - (バイト [])- 現在のサンプル データへのアクセスを提供します
上記の各変数で使用可能なすべてのメソッドの詳細については、Javadoc を確認してください。
プロパティbeanshell.postprocessor.initが定義されている場合、これは、BeanShell スクリプトで使用するメソッドなどを定義するために使用できる初期化ファイルをロードするために使用されます。
JSR223 ポストプロセッサ¶
JSR223 PostProcessor を使用すると、サンプルを取得した後に JSR223 スクリプト コードを適用できます。
パラメータ ¶
- パラメータ- パラメータを単一の変数として含む文字列
- args - パラメータを含む文字列配列、空白で分割
スクリプトを呼び出す前に、いくつかの変数が設定されます。これらは JSR223 変数であることに注意してください。つまり、スクリプトで直接使用できます。
- log - ( Logger ) - ログファイルへの書き込みに使用できます
- Label - 文字列ラベル
- FileName - スクリプト ファイル名 (存在する場合)
- Parameters - パラメータ (文字列として)
- args - 文字列配列としてのパラメーター (空白で分割)
- ctx - ( JMeterContext ) - コンテキストへのアクセスを提供します
-
vars - ( JMeterVariables ) - 変数への読み取り/書き込みアクセスを提供します。
vars.get(キー); vars.put(キー、値); vars.putObject("OBJ1",新しいオブジェクト()); vars.getObject("OBJ2");
- props - (JMeterProperties - クラス java.util.Properties) - 例props.get("START.HMS"); props.put("PROP1","1234");
- prev - ( SampleResult ) - 前の SampleResult (存在する場合) へのアクセスを提供します
- sampler - ( Sampler )- 現在のサンプラーへのアクセスを提供します
- OUT - System.out - 例: OUT.println("message")
上記の各変数で使用可能なすべてのメソッドの詳細については、Javadoc を確認してください。
JDBC ポストプロセッサ¶
JDBC PostProcessor を使用すると、サンプルの実行直後に SQL ステートメントを実行できます。これは、JDBC サンプルが一部のデータを変更し、状態を JDBC サンプル実行前の状態にリセットしたい場合に役立ちます。
リンクされたテスト プランでは、" JDBC PostProcessor " JDBC PostProcessor がストアド プロシージャを呼び出して、PreProcessor によって作成された Price Cut-Off をデータベースから削除します。
JSON エクストラクタ¶
JSON PostProcessor を使用すると、JSON-PATH 構文を使用して JSON 応答からデータを抽出できます。このポスト プロセッサは、正規表現エクストラクタに非常に似ています。HTTP サンプラーまたは応答を持つ他のサンプラーの子として配置する必要があります。非常に簡単な方法でテキスト コンテンツを抽出できます。 JSON パス構文を参照してください。
パラメータ ¶
- 0 : ランダムを意味します (デフォルト値)
- -1はすべての結果を抽出することを意味し、<変数名> _N ( Nは 1 から結果の数まで)という名前が付けられます。
- X : X番目の結果を抽出することを意味します。この X thが一致数より大きい場合、何も返されません。デフォルト値が使用されます
境界抽出器¶
ユーザーが左右の境界を使用してサーバーの応答から値を抽出できるようにします。ポストプロセッサとして、この要素はスコープ内の各サンプル リクエストの後に実行され、境界をテストし、リクエストされた値を抽出し、テンプレート文字列を生成し、結果を指定された変数名に保存します。
パラメータ ¶
- メイン サンプルのみ- メイン サンプルのみに適用されます
- サブサンプルのみ- サブサンプルのみに適用されます
- メインサンプルとサブサンプル- 両方に適用されます。
- 使用する JMeter 変数名- アサーションは名前付き変数の内容に適用されます
- Body - 応答の本文、たとえば Web ページのコンテンツ (ヘッダーを除く)
-
本文 (エスケープなし) - すべての Html エスケープ コードが置き換えられた応答の本文。Html エスケープはコンテキストに関係なく処理されるため、誤った置換が行われる可能性があることに注意してください。
このオプションはパフォーマンスに大きく影響するため、絶対に必要な場合にのみ使用し、その影響に注意してください。
-
Body as a Document - Apache Tika を介してさまざまなタイプのドキュメントからテキストを抽出します (結果ツリーの表示ドキュメント ビュー セクションを参照)。
Body as a Document オプションはパフォーマンスに影響を与える可能性があるため、テストに問題がないことを確認してください。
- リクエスト ヘッダー- HTTP 以外のサンプルには存在しない場合があります
- 応答ヘッダー- HTTP 以外のサンプルには存在しない場合があります
- URL
- 応答コード- 例: 200
- 応答メッセージ- 例: OK
- JMeter がランダムに一致を選択する必要があることを示すには、ゼロの値を使用します。
- 正の数 N は、n番目の一致を選択することを意味します。
- 負の数は、 ForEach コントローラーと組み合わせて使用されます。以下を参照してください。
ただし、同じ変数を設定する複数のテスト要素がある場合、式が一致しない場合は、変数を変更しないでおくことができます。この場合、デバッグが完了したらデフォルト値を削除します。
一致番号が負でない数に設定され、一致が発生した場合、変数は次のように設定されます。
- refName - 抽出の値
一致するものがない場合、refName変数はデフォルトに設定されます (これがない場合を除く)。
一致数が負の数に設定されている場合、サンプラー データ内のすべての可能な一致が処理されます。変数は次のように設定されます。
- refName_matchNr - 見つかった一致の数。0になる可能性があります
- refName_ n、n = 1、2、3など - テンプレートによって生成された文字列
- refName_ n _g m、ここでm = 0 , 1 , 2 - マッチnのグループ
- refName - 常にデフォルト値に設定
この場合、 refName変数は常にデフォルト値に設定され、関連するグループ変数は設定されない ことに注意してください。
18.9 その他の機能¶
テスト計画¶
テスト計画は、テストの全体的な設定が指定される場所です。
静的変数は、サーバー名など、テスト全体で繰り返される値に対して定義できます。たとえば、変数SERVERをwww.example.comとして定義し、残りのテスト計画でそれを${SERVER}として参照できます。これにより、後で名前を簡単に変更できます。
複数のユーザー定義変数構成要素 の 1 つで同じ変数名が再利用されて いる場合、値はテスト計画の最後の定義に設定されます (上から下に読み取ります)。このような変数は、テストの実行中に変更される可能性があるが、テストの実行中は同じままである項目に使用する必要があります。
Functional Testing を選択すると、追加のサンプル情報 (応答データとサンプラー データ) をすべての結果ファイルに保存するよう JMeter に指示します。これにより、テストの実行に必要なリソースが増加し、JMeter のパフォーマンスに悪影響を与える可能性があります。特定のサンプラーだけにさらにデータが必要な場合は、それにリスナーを追加し、必要に応じてフィールドを構成します。
また、JMeter にスレッド グループを並列ではなくシリアルに実行するように指示するオプションもあります。
メイン スレッドのシャットダウン後に、tearDown スレッド グループを実行します。選択すると、メイン スレッドの正常なシャットダウン後に、tearDown グループ (存在する場合) が実行されます。テストが強制的に停止された場合、tearDown スレッドは実行されません。
テスト計画は、特定のテスト計画にクラスパス設定を追加する簡単な方法を提供するようになりました。この機能は追加的です。つまり、jar ファイルまたはディレクトリを追加できますが、エントリを削除するには JMeter を再起動する必要があります。
JMeter プロパティは、追加のクラスパスをロードするためのエントリも提供します。jmeter.propertiesで、「 user.classpath」または「plugin_dependency_paths 」を編集して、追加のライブラリを含めます。詳細については、 JMeter のクラスパスと JMeter の構成を参照してください。
スレッドグループ¶
スレッド グループは、サーバーに対して特定のテスト ケースを実行するユーザーのプールを定義します。スレッド グループ GUI では、シミュレートされるユーザー数 (スレッド数)、ランプアップ時間 (すべてのスレッドを開始するのにかかる時間)、テストの実行回数、およびオプションで開始を制御できます。テストの時間を停止します。
「 tearDown スレッド グループ」および「 setUp スレッドグループ 」も参照してください。
スケジューラを使用すると、JMeter は、ループ数に達するか、期間/終了時間に達するまで、スレッド グループを実行します。条件はサンプル間でのみチェックされることに注意してください。終了条件に達すると、そのスレッドは停止します。JMeter は、応答を待っているサンプラーを中断しないため、終了時間が任意に遅れる場合があります。
JMeter 3.0 以降では、スレッド グループを選択して右クリックすることで、選択したスレッド グループを実行できます。ポップアップ メニューが表示されます。
スレッド グループの選択を実行するための 3 つのオプションがあることに注意してください。
- 始める
- 選択したスレッド グループのみを開始します
- 一時停止なしで開始
- タイマーを実行せずに、選択したスレッド グループのみを開始します
- 検証
- 検証モードのみを使用して、選択したスレッド グループを開始します。デフォルトでは、スレッド グループが検証モードで実行されます (以下を参照)。
てスレッド グループを実行することにより、スレッド グループの迅速な検証が可能になります。user.propertiesで設定することにより、いくつかのプロパティで動作を変更できます。
- testplan_validation.nb_threads_per_thread_group
- スレッド グループの検証に使用するスレッドの数。デフォルトは1
- testplan_validation.ignore_timers
- プランのスレッド グループを検証するときにタイマーを無視します。デフォルトは1です。
- testplan_validation.number_iterations
- スレッド グループの検証に使用する反復回数
- testplan_validation.tpc_force_100_pct
- パーセンテージが 100 % であるかのようにパーセンテージ モードでスループット コントローラーを強制的に実行するかどうか。デフォルトはfalse
パラメータ ¶
- 続行- エラーを無視してテストを続行します
- 次のスレッド ループを開始- エラーを無視し、次のループを開始してテストを続行します。
- スレッドの停止- 現在のスレッドが終了します
- テストの停止- 現在のサンプルが終了すると、テスト全体が停止します。
- 今すぐテストを停止 - テスト全体が突然停止します。可能であれば、現在のサンプラーはすべて中断されます。
選択されていない場合、テストの開始時にすべてのスレッドが作成されます (その後、適切な割合のランプアップ時間の間一時停止します)。これは元のデフォルトであり、ほとんどのテストでスレッドがアクティブなテストに適しています。
SSLマネージャー¶
SSL マネージャーは、Public Key Infrastructure (PKI) を使用するアプリケーションをテストできるように、クライアント証明書を選択する方法です。適切なシステム プロパティを設定していない場合にのみ必要です。
クライアント証明書には、Java Key Store (JKS) 形式のキー ストア、または Public Key Certificate Standard #12 (PKCS12) ファイルを使用できます。キーに少なくとも 6 文字のパスワードが必要な JSSE ライブラリの機能があります (少なくとも JDK に付属の keytool ユーティリティの場合)。
クライアント証明書を選択するには、メニュー バーから[.p12 」が必要です。その他のファイルは、平均的な JKS キー ストアのように扱われます。JSSE が正しくインストールされている場合は、パスワードの入力を求められます。この時点では、入力した文字はテキスト ボックスに隠れません。現在の実装では、キーストアのパスワードが、認証するクライアントの秘密鍵のパスワードでもあると想定しています。
デフォルトで PKCS12 ファイルを検索するファイル ファインダーが表示されます。SSL Manager が PKCS12 ファイルとして認識するには、PKCS12 ファイルに拡張子「または、適切なシステム プロパティを設定できます。system.propertiesファイルを参照してください。
次にテストを実行すると、SSL マネージャーはキー ストアを調べて、使用可能なキーが少なくとも 1 つあるかどうかを確認します。キーが 1 つしかない場合は、SSL Manager がそれを選択します。複数のキーがある場合、現在は最初のキーが選択されます。現在、キーストア内の他のエントリを選択する方法がないため、目的のキーが最初にある必要があります。
注意事項JDK に同梱されている 5 つの CA 証明書のいずれかによって署名されていない場合は、認証局 (CA) 証明書を正しくインストールする必要があります。これをインストールする 1 つの方法は、CA 証明書を JKS ファイルにインポートし、その JKS ファイルに「jssecacerts」という名前を付けることです。ファイルを JRE の lib/securityフォルダーに配置します。このファイルは、同じディレクトリにある " cacerts " ファイルの前に読み込まれます。「 jssecacerts」ファイルが存在する限り、「 cacerts」にインストールされた証明書は使用されないことに注意してください。これにより、問題が発生する可能性があります。CA 証明書を "CA証明書を「 cacerts" ファイルを使用すると、インストールされているすべての CA 証明書に対して認証を行うことができます。
HTTP(S) Test Script Recorder (旧: HTTP Proxy Server ) ¶
HTTP(S) Test Script Recorder を使用すると、通常のブラウザで Web アプリケーションを閲覧しているときに、JMeter がアクションを傍受して記録できます。JMeter はテスト サンプル オブジェクトを作成し、テスト計画に直接保存します (作成中にサンプルをインタラクティブに表示できます)。このwiki ページ
を
読んで、JMeter を正しくセットアップしてください。
レコーダーを使用するには、HTTP(S) Test Script Recorder 要素を追加します。テスト計画要素を右クリックして追加メニューを取得します (
)。レコーダーは、HTTP(S) プロキシ サーバーとして実装されます。すべての HTTP および HTTPS リクエストにプロキシを使用するブラウザを設定する必要があります。
セッションを記録するときは、プライベート ブラウジング モードを使用するのが理想的です。これにより、ブラウザは Cookie を保存せずに起動し、特定の変更が保存されなくなります。たとえば、Firefox では、証明書のオーバーライドを永続的に保存することはできません。
HTTPS の記録と証明書
HTTPS 接続では、証明書を使用してブラウザと Web サーバー間の接続を認証します。HTTPS 経由で接続する場合、サーバーは証明書をブラウザーに提示します。証明書を認証するために、ブラウザーは、組み込みのルート CA の 1 つにリンクされている認証局 (CA) によってサーバー証明書が署名されていることを確認します。
JMeter は独自の証明書を使用して、ブラウザからの HTTPS 接続をインターセプトできるようにする必要があります。事実上、JMeter はターゲット サーバーのふりをする必要があります。
JMeter は独自の証明書を生成します。これらは、プロパティproxy.cert.validityで定義された有効期間、デフォルトの 7 日間、およびランダムなパスワードで生成されます。JMeter は、Java 8 以降で実行されていることを検出すると、次のプロパティが定義されていない限り、必要に応じて各ターゲット サーバーの証明書を生成します (動的モード)。 proxy.cert.dynamic_keys=false. 動的モードを使用する場合、証明書は正しいホスト名用であり、JMeter によって生成された CA 証明書によって署名されます。デフォルトでは、この CA 証明書はブラウザによって信頼されませんが、信頼できる証明書としてインストールできます。これが完了すると、生成されたサーバー証明書がブラウザによって受け入れられます。これには、埋め込まれた HTTPS リソースでさえ傍受できるという利点があり、新しいサーバーごとにブラウザー チェックを上書きする必要はありません。
キーストアが提供されていない場合 (およびプロパティproxy.cert.aliasを定義していない場合)、JMeter は keytool アプリケーションを使用してキーストア エントリを作成する必要があります。JMeter には、さまざまな標準的な場所を調べて keytool が使用可能であることを確認するコードが含まれています。JMeter が keytool アプリケーションを見つけられない場合、エラーが報告されます。必要に応じて、システム プロパティkeytool.directoryを使用して、keytool の場所を JMeter に伝えることができます。これは、ファイルsystem.propertiesで定義する必要があります。
[開始] ボタンが押されると 、JMeter 証明書が生成されます (必要な場合) 。
必要に応じて、JMeter ディレクトリからキーストア ファイルproxyserver.jksを削除することにより、JMeter にキーストア (およびエクスポートされた証明書 - ApacheJMeterTemporaryRootCA[.usr|.crt] ) を強制的に再生成させることができます。
この証明書は、ブラウザーが通常信頼する証明書の 1 つではなく、正しいホストに対するものではありません。
結果として:
- ブラウザーに、証明書を受け入れるかどうかを尋ねるダイアログが表示されます。例えば:
1) サーバーの名前 " www.example.com " が証明書の名前と一致しません " _ 記録用 JMeter ルート CA (INSTALL IF IT S YOURS) ". 誰かがあなたのことを盗聴しようとしている可能性があります。 2) " _ JMeter Root CA for recording (INSTALL ONLY IF IT S YOURS) " の証明書は、不明な認証局によって署名されています。 " _ 記録用 JMeter ルート CA (INSTALL IF IT S YOURS) ". これが有効な証明書であることを確認することはできません。
JMeter プロキシが SSL トラフィックを傍受して記録できるようにするには、証明書を受け入れる必要があります。ただし、この証明書を永続的に受け入れないでください。一時的にのみ受け付けます。ブラウザーは、メイン URL の証明書に対してのみこのダイアログを表示します。ページにロードされたリソース (保護された外部 CDN でホストされている画像、CSS、または JavaScript ファイルなど) に対しては表示しません。そのようなリソースがある場合 (gmail など)、JMeter の証明書を受け入れるために、最初にこれらの他のドメインを手動で参照する必要があります。証明書を登録する必要がある安全なドメインについて は、 jmeter.logを確認してください。 - ブラウザーがこのドメインの検証済み証明書を既に登録している場合、ブラウザーは JMeter をセキュリティ違反として検出し、ページの読み込みを拒否します。その場合、ブラウザのキーストアから信頼できる証明書を削除する必要があります。
2.10 以降のバージョンの JMeter はこのメソッドを引き続きサポートしており、次のプロパティを定義すると引き続きサポートされます。 proxy.cert.alias 次のプロパティを使用して、使用される証明書を変更できます。
- proxy.cert.directory - 証明書を見つけるディレクトリ (デフォルト = JMeter bin/ )
- proxy.cert.file - キーストア ファイルの名前 (デフォルトは " proxyserver.jks ")
- proxy.cert.keystorepass - キーストアのパスワード (デフォルトの " password ") [JMeter 証明書を使用する場合は無視されます]
- proxy.cert.keypassword - 証明書キーのパスワード (デフォルトは " password ") [JMeter 証明書を使用する場合は無視されます]
- proxy.cert.type - 証明書の種類 (デフォルトは " JKS ") [JMeter 証明書を使用する場合は無視されます]
- proxy.cert.factory - ファクトリ (デフォルト " SunX509 ") [JMeter 証明書を使用する場合は無視されます]
- proxy.cert.alias - 使用するキーのエイリアス。これが定義されている場合、JMeter は独自の証明書を生成しようとしません。
- proxy.ssl.protocol - 使用するプロトコル (デフォルトは " SSLv3 ")
HTTPS 記録用の JMeter CA 証明書のインストール
前述のように、Java 8 で実行すると、JMeter は各サーバーの証明書を生成できます。これがスムーズに機能するには、JMeter が使用するルート CA 署名証明書がブラウザによって信頼されている必要があります。初めてレコーダを起動すると、必要に応じて証明書が生成されます。ルート CA 証明書は、現在の起動ディレクトリにあるApacheJMeterTemporaryRootCAという名前のファイルにエクスポートされます。証明書が設定されると、JMeter は現在の証明書の詳細を示すダイアログを表示します。この時点で、以下の手順に従って、証明書をブラウザにインポートできます。
ルート CA 証明書が信頼された CA としてインストールされると、ブラウザーはそれによって署名されたすべての証明書を信頼することに注意してください。証明書の有効期限が切れるか、ブラウザから証明書が削除されるまで、証明書が信頼されていることをユーザーに警告しません。そのため、キーストアとパスワードを取得できる人は誰でも、証明書を使用して証明書を生成できます。この証明書は、JMeter ルート CA 証明書を信頼するブラウザーで受け入れられます。このため、キーストアと秘密鍵のパスワードはランダムに生成され、短い有効期間が使用されます。パスワードは、ローカル設定領域に保存されます。信頼できるユーザーのみがキーストアを使用してホストにアクセスできるようにしてください。
Firefox への証明書のインストール
次のオプションを選択します。
- ツール / オプション
- 高度/証明書
- 証明書を表示
- 当局
- 輸入 …
- JMeter 起動ディレクトリを参照し、ファイルApacheJMeterTemporaryRootCA.crtをクリックして、[開く] をクリックします。
- [表示]をクリックし、証明書の詳細が JMeter テスト スクリプト レコーダーによって表示されるものと一致することを確認します。
- OK の場合は、[ Web サイトを識別するためにこの CA を信頼する] を選択し、[OK ]を押します。
- 必要に応じて [ OK ] を押してダイアログを閉じます
Chrome または Internet Explorer への証明書のインストール
Chrome と Internet Explorer はどちらも、証明書に同じトラスト ストアを使用します。
- JMeter 起動ディレクトリを参照し、ファイルApacheJMeterTemporaryRootCA.crtをクリックして開きます。
- [詳細] タブをクリックし、証明書の詳細が JMeter テスト スクリプト レコーダーによって表示されるものと一致することを確認します。
- OK の場合は、[全般] タブに戻り、[証明書のインストール... ] をクリックして、ウィザードのプロンプトに従います。
Opera への証明書のインストール
- ツール / 設定 / 詳細設定 / セキュリティ
- 証明書の管理…
- 「中間」タブを選択し、「インポート…」をクリックします。
- JMeter 起動ディレクトリを参照し、ファイルApacheJMeterTemporaryRootCA.usrをクリックして開きます。
パラメータ ¶
例: *.example.com,*.subdomain.example.com
ワイルドカード ドメインは 1 つのレベルにのみ適用されることに注意してください。つまり、abc.subdomain.example.comは* .subdomain.example.comと一致しますが、*.example.com とは一致しません。
- サンプラーをグループ化しない- 記録されたすべてのサンプラーを、グループ化せずに順番に保存します。
- グループ間にセパレーターを追加- 「 -------------- 」という名前のコントローラーを追加して、グループ間に視覚的な分離を作成します。それ以外の場合、サンプラーはすべて順番に格納されます。
- 各グループを新しいコントローラーに入れる- グループごとに新しいシンプル コントローラーを作成し、そのグループのすべてのサンプラーをそこに格納します。
- 各グループの最初のサンプラーのみを保存 - 各グループの最初のリクエストのみが記録されます。これらのサンプラーでは、「Follow Redirects」および「Retrieve All Embedded Resources …」フラグがオンになります。
- 各グループを新しいトランザクション コントローラーに配置します。グループごとに新しいトランザクション コントローラーを作成し、そのグループのすべてのサンプラーをそこに格納します。
記録とリダイレクト
記録中、ブラウザーはリダイレクト応答に従い、追加の要求を生成します。プロキシは、元のリクエストとリダイレクトされたリクエストの両方を記録します (除外が構成されている場合)。生成されたサンプルでは、デフォルトで [ リダイレクトに従う]が選択されています。
JMeter がリプレイ中にリダイレクトに従うように設定されている場合、元のリクエストを発行してから、記録されたリダイレクト リクエストをリプレイします。この重複リプレイを回避するために、JMeter は、サンプルが以前のリダイレクトの結果である場合を検出しようとします。現在の応答がリダイレクトの場合、JMeter はリダイレクト URL を保存します。次のリクエストが受信されると、保存されたリダイレクト URL と比較され、一致する場合、JMeter は生成されたサンプルを無効にします。また、リダイレクト チェーンにコメントを追加します。これは、リダイレクト チェーン内のすべてのリクエストが、介在するリクエストなしで相互に続くことを前提としています。リダイレクト検出を無効にするには、プロパティproxy.redirect.disabling=falseを設定します。
含めるものと除外するもの
包含パターンと除外パターンは正規表現として扱われます (Jakarta ORO を使用)。これらは、各ブラウザー要求のホスト名、ポート (実際または暗黙)、パス、およびクエリ (存在する場合) と照合されます。閲覧している URL が
「http://localhost/jmeter/index.html?username=xxxx」の
場合、正規表現は文字列
「localhost:80/jmeter/index.html?username=xxxx 」に対してテストされます。 "。したがって、すべての.html
ファイル
を含めたい場合
、正規表現は次のようになり
ます。または、クエリ文字列のない html ページのみが必要です。
インクルード パターンがある場合、URLは少なくとも 1 つのパターンに一致する必要があります。一致しない場合は記録されません。除外パターンがある場合、URL はどのパターンにも一致してはなりません。一致しない場合は記録されません。包含と除外を組み合わせて使用すると、関心のあるものを記録し、関心のないものをスキップできるはずです。
したがって、" \.html " はlocalhost:80/index.htmlと一致しません。
バイナリ POST データのキャプチャ
JMeter は、バイナリ POST データをキャプチャできます。バイナリとして扱われるコンテンツ タイプを構成するには、JMeter プロパティproxy.binary.typesを更新します。デフォルト設定は次のとおりです。
# これらのコンテンツ タイプは、リクエストをファイルに保存することで処理されます。 proxy.binary.types=application/x-amf,application/x-java-serialized-object # ファイルは次のディレクトリに保存されます。 proxy.binary.directory=user.dir # ファイルは、このファイルの filesuffix で作成されます: proxy.binary.filesuffix=.binary
タイマーの追加
記録されたスクリプトにプロキシーにタイマーを追加させることもできます。これを行うには、HTTP(S) Test Script Recorder コンポーネント内でタイマーを直接作成します。プロキシは、記録する各サンプルにこのタイマーのコピーを配置するか、グループ化を使用している場合は各グループの最初のサンプルに配置します。このコピーは、そのプロパティで変数${T}の出現をスキャンされ、そのような出現は、記録された前のサンプラーからの時間間隔 (ミリ秒単位) に置き換えられます。
開始する準備ができたら、「開始」を押します。
サンプルはどこに記録されますか?
JMeter は、選択したターゲット コントローラに記録されたサンプルを配置します。デフォルトのオプション「 Use Recording Controller 」を選択すると、テスト オブジェクト ツリーで見つかった最初の Recording Controller に保存されます (そのため、記録を開始する前に必ず Recording Controller を追加してください)。
プロキシがサンプルを記録していないように見える場合は、ブラウザが実際にプロキシを使用していないことが原因である可能性があります。これに該当するかどうかを確認するには、プロキシを停止してみてください。それでもブラウザがページをダウンロードする場合は、プロキシ経由でリクエストを送信していません。ブラウザのオプションを再確認してください。同じホストで実行されているサーバーから記録しようとしている場合は、ブラウザが「ローカル アドレスに対してプロキシ サーバーをバイパスする」に設定されていないことを確認してください(この例は IE7 のものですが、他のブラウザにも同様のオプションがあります)。JMeter がhttp://localhost/やhttp://127.0.0.1/などのブラウザ URL を記録しない場合は、 http://myhost/やhttp://192.168など、非ループバック ホスト名または IP アドレスを使用してみてください。 0.2/ .
HTTP リクエストのデフォルトの処理
HTTP(S) テスト スクリプト レコーダーが、サンプルが保存されているコントローラー内で直接、またはその親コントローラー内で直接、有効なHTTP 要求の既定値を検出した場合、記録されたサンプルには、指定した既定値の空のフィールドが含まれます。HTTP(S) Test Script Recorder 内に HTTP Request Defaults 要素を直接配置することで、この動作をさらに制御できます。空白以外の値は、他の HTTP Request Defaults の値をオーバーライドします。詳細については、HTTP(S) テスト スクリプト レコーダーのベスト プラクティスを参照してください。
ユーザー定義変数の置換
同様に、HTTP(S) Test Script Recorder がユーザー定義変数(UDV) を、サンプルが保存されているコントローラー内で直接、またはその親コントローラーのいずれかで直接検出した場合、記録されたサンプルにはそれらの変数の値が出現します。対応する変数に置き換えられます。ここでも、ユーザー定義変数を HTTP(S) テスト スクリプト レコーダー内に直接配置して、置き換える値をオーバーライドできます。詳細について は、テスト スクリプト レコーダーのベスト プラクティスを参照してください。
変数による置換: デフォルトでは、プロキシ サーバーは UDV 値のすべての出現を探します。たとえば、変数WEBを値wwwで定義すると、文字列wwwはどこでも${WEB}に置き換えられます。これがどこでも発生しないようにするには、「正規表現一致」チェックボックスを設定します。これは、値を正規表現として扱うようにプロキシ サーバーに指示します (ORO が提供する perl5 互換の正規表現マッチャーを使用します)。
「正規表現マッチング」が選択されている場合、すべての変数は \b(および)\bで囲まれた perl 互換の正規表現にコンパイルされます。そうすれば、各一致は単語境界で開始および終了します。
正規表現をこれらの境界マッチャーで囲みたくない場合は、正規表現を括弧で囲む必要があります。
文字列全体のみに一致させたい場合は、( ^thus$)のように(^と$)で囲みます。通常追加される境界文字は^と $の一致を妨げるため、括弧が必要です。
文字列の先頭のみで/imagesと一致させたい場合は、値(^/images)を使用します。Jakarta ORO はゼロ幅の先読みもサポートしているため、/images/…と一致できますが、 (^/images(?=/))を使用して出力 の末尾の/を保持できます。
重複するマッチャーに注意してください。たとえば、regex という名前の変数の正規表現としての値. * は 、以前に置き換えられた変数と部分的に一致し、 ${{regex}のような結果になりますが 、これはおそらく望ましい結果ではありません。
変数をパターンとして解釈する際に問題がある場合、これらはjmeter.logで報告されるため、UDV が期待どおりに機能しない場合は、必ずこれを確認してください。
テスト サンプルの記録が完了したら、プロキシ サーバーを停止します ( [停止] ボタンをクリックします)。ブラウザのプロキシ設定を忘れずにリセットしてください。ここで、テスト スクリプトの並べ替えと並べ替え、タイマー、リスナー、Cookie マネージャーなどの追加が必要になる場合があります。
サーバーの応答も記録するにはどうすればよいですか?
View Results Treeリスナーを HTTP(S) Test Script Recorder の子として配置するだけで、応答が表示されます。また、応答をファイルに保存する応答をファイルに保存するポスト プロセッサを 追加することもできます。
リクエストとレスポンスの関連付け
プロパティproxy.number.requests=trueを定義すると、 JMeter は各サンプラーと各応答に番号を追加します。除外または包含が使用されている場合、サンプラーよりも多くの応答がある可能性があることに注意してください。除外された応答には、[と] で囲まれたラベルが付けられます([23 /favicon.ico] など)。
クッキーマネージャー
テスト対象のサーバーが Cookie を使用している場合は、記録が完了したら、テスト計画にHTTP Cookie Managerを追加することを忘れないでください。記録中、ブラウザーはすべての Cookie を処理しますが、JMeter は、テスト実行中に Cookie を処理するために Cookie Manager を必要とします。JMeter プロキシ サーバーは、記録中にブラウザーから送信されたすべての Cookie を渡しますが、実行ごとに変更される可能性が高いため、それらをテスト計画に保存しません。
承認マネージャー
HTTP(S) Test Script Recorder は「Authentication」ヘッダーを取得し、認証ポリシーを計算しようとします。承認マネージャーがターゲット コントローラーに手動で追加された場合、HTTP(S) テスト スクリプト レコーダーはそれを見つけて承認を追加します (一致するものは削除されます)。それ以外の場合、Authorization Manager は、Authorization オブジェクトを使用してターゲット コントローラーに追加されます。記録後に自動的に計算された値を修正する必要がある場合があります。
ファイルのアップロード
一部のブラウザー (Firefox や Opera など) では、ファイルのアップロード時にファイルの完全な名前が含まれません。これにより、JMeter プロキシ サーバーが失敗する可能性があります。1 つの解決策は、ファイルを JMeter 作業ディレクトリにコピーするか、ファイルを含むディレクトリで JMeter を起動して、アップロードするすべてのファイルが JMeter 作業ディレクトリにあることを確認することです。
JMeter でネイティブに使用できない HTTP ベースの非テキスト プロトコルの記録
デフォルトでは JMeter によって処理されない HTTP プロトコルを記録する必要がある場合があります (カスタム バイナリ プロトコル、Adobe Flex、Microsoft Silverlight など)。JMeter はこれらのプロトコルを記録するためのネイティブ プロキシ実装を提供していませんが、カスタムSamplerCreatorを実装することでこれらのプロトコルを記録できます。この Sampler Creator は、バイナリ形式をJMeter テスト ケースに追加できるHTTPSamplerBaseサブクラスに変換します。詳細については、「JMeter の拡張」を参照してください。
HTTP ミラーサーバー¶
HTTP ミラー サーバーは非常に単純な HTTP サーバーです。送信されたデータを単純にミラーリングします。これは、HTTP リクエストの内容を確認するのに役立ちます。
デフォルトのポート8081を使用します。
パラメータ ¶
パラメータ ¶
headerA: valueA|headerB: valueBは、 headerAを valueA に設定し、headerBをvalueBに設定します。
次のクエリ パラメータも使用できます。
パラメータ ¶
サンプラーのデバッグ¶
Debug Sampler は、すべての JMeter 変数および/またはプロパティの値を含むサンプルを生成します。
値は、[View Results Tree Listener Response Data] ペインで確認できます。
パラメータ ¶
ポストプロセッサのデバッグ¶
Debug PostProcessor は、以前の Sampler プロパティ、JMeter 変数、プロパティ、および/またはシステム プロパティの詳細を含む subSample を作成します。
値は、[View Results Tree Listener Response Data] ペインで確認できます。
パラメータ ¶
テストフラグメント¶
Test Fragment は、 Include ControllerおよびModule Controllerと 組み合わせて使用されます。
スレッドグループの設定 ¶
テスト前のアクションを実行するために利用できる特殊なタイプの ThreadGroup。これらのスレッドの動作は、通常のスレッド グループ要素とまったく同じです。違いは、これらのタイプのスレッドは、テストが通常のスレッド グループの実行に進む前に実行されることです。
ティアダウン スレッド グループ¶
テスト後のアクションを実行するために利用できる特殊なタイプの ThreadGroup。これらのスレッドの動作は、通常のスレッド グループ要素とまったく同じです。違いは、これらのタイプのスレッドは、テストが通常のスレッド グループの実行を終了した後に実行されることです。