20. 関数と変数¶
JMeter 関数は、Sampler またはテスト ツリー内の他の要素のフィールドにデータを入力できる特別な値です。関数呼び出しは次のようになります。
${__関数名(var1,var2,var3)}
ここで、「__functionName」は関数の名前と一致します。
${__time(YMD)}
の
ように、関数に送信されるパラメーターを括弧で囲みます
。実際のパラメーターは関数によって異なります。${__threadNum}のように、パラメーターを必要としない関数では括弧を省略できます。
関数パラメータにコンマが含まれている場合は、必ず「\」でエスケープしてください。そうしないと、JMeter はそれをパラメータ区切り文字として扱います。例えば:
${__time(EEE\, d MMM yyyy)}カンマがエスケープされていない場合 (例: ${__javaScript(Math.max(2,5))})、次のようなエラーが発生します。
エラー - jmeter.functions.JavaScript: Javascript の処理中にエラーが発生しました: [Math.max(2] org.mozilla.javascript.EvaluatorException: 引数リストの後に ) がありません (<cmd>#1)これは、文字列 " Math.max(2,5) " が __javascript 関数の 2 つのパラメーターとして扱われるためです。
Math.max(2 and 5)
他のエラー メッセージが表示される可能性があります。
変数は次のように参照されます。
${変数}
未定義の関数または変数が参照された場合、JMeter はエラーを報告/記録しません。参照は変更されずに返されます。たとえば、UNDEFが変数として定義されていない場合、 ${UNDEF} の値は$ { UNDEF}になります。 変数、関数 (およびプロパティ) はすべて大文字と小文字が区別されます。 JMeter は使用前に変数名からスペースを削除するため、たとえば ${__Random(1,63, LOTTERY )}は変数「LOTTERY」ではなく「 LOTTERY 」を使用します。
大まかにタイプにグループ化された関数のリスト。
関数の種類 | 名前 | コメント | 以来 |
---|---|---|---|
情報 | スレッド番号 | スレッド番号を取得する | 1.X |
情報 | スレッドグループ名 | スレッドグループ名を取得 | 4.1 |
情報 | サンプラー名 | サンプラー名 (ラベル) を取得する | 2.5 |
情報 | マシンIP | ローカル マシンの IP アドレスを取得する | 2.6 |
情報 | マシン名 | ローカル マシン名を取得する | 1.X |
情報 | 時間 | 現在の時刻をさまざまな形式で返す | 2.2 |
情報 | タイムシフト | 指定された秒/分/時間/日を加算したさまざまな形式の日付を返します | 3.3 |
情報 | ログ | メッセージを記録 (または表示) する (そして値を返す) | 2.2 |
情報 | ログイン | メッセージのログ (または表示) (空の戻り値) | 2.2 |
入力 | StringFromFile | ファイルから行を読み取る | 1.9 |
入力 | FileToString | ファイル全体を読み取る | 2.4 |
入力 | CSV読み取り | CSV 区切りファイルから読み取る | 1.9 |
入力 | XPath | XPath 式を使用してファイルから読み取る | 2.0.3 |
入力 | StringToFile | 文字列をファイルに書き込む | 5.2 |
計算 | カウンター | 増加する数を生成する | 1.X |
書式設定 | dateTimeConvert | ソース形式からターゲット形式への日付または時刻の変換 | 4.0 |
計算 | ダイジェスト | ダイジェストを生成します (SHA-1、SHA-256、MD5...) | 4.0 |
計算 | intSum | int 数値を追加する | 1.8.1 |
計算 | ロングサム | 長い数字を追加 | 2.3.2 |
計算 | ランダム | 乱数を生成する | 1.9 |
計算 | ランダム日付 | 特定の日付範囲内でランダムな日付を生成する | 3.3 |
計算 | RandomFromMultipleVars | |で区切られた一連の変数の値から要素を抽出します。 | 3.1 |
計算 | ランダム文字列 | ランダムな文字列を生成する | 2.6 |
計算 | UUID | ランダムなタイプ 4 UUID を生成する | 2.9 |
スクリプティング | かっこいい | Apache Groovy スクリプトを実行する | 3.1 |
スクリプティング | ビーンシェル | BeanShell スクリプトを実行する | 1.X |
スクリプティング | JavaScript | JavaScript の処理 (Nashorn) | 1.9 |
スクリプティング | jexl2 | Commons Jexl2 式を評価する | jexl2(2.1.1) |
スクリプティング | jexl3 | Commons Jexl3 式を評価する | jexl3 (3.0) |
プロパティ | isPropDefined | プロパティが存在するかどうかをテストする | 4.0 |
プロパティ | 財産 | プロパティを読み取る | 2.0 |
プロパティ | P | プロパティを読み取る (省略形) | 2.0 |
プロパティ | プロパティの設定 | JMeter プロパティを設定する | 2.1 |
変数 | スプリット | 文字列を変数に分割する | 2.0.2 |
変数 | 評価 | 変数式を評価する | 2.3.1 |
変数 | evalVar | 変数に格納された式を評価する | 2.3.1 |
プロパティ | isVarDefined | 変数が存在するかどうかをテストする | 4.0 |
変数 | Ⅴ | 変数名を評価する | 2.3RC3 |
弦 | チャー | 数値のリストから Unicode char 値を生成する | 2.3.3 |
弦 | チェンジケース | 異なるモードに従ってケースを変更する | 4.0 |
弦 | エスケープHtml | HTML エンコーディングを使用して文字列をエンコードする | 2.3.3 |
弦 | escapeOroRegexpChars | ORO 正規表現で使用される引用メタ文字 | 2.9 |
弦 | エスケープXml | XML エンコーディングを使用して文字列をエンコードする | 3.2 |
弦 | 正規表現関数 | 正規表現を使用して以前の応答を解析する | 1.X |
弦 | 逃れられない | Java エスケープを含む文字列を処理する (例: \n & \t) | 2.3.3 |
弦 | unescapeHtml | HTML エンコードされた文字列をデコードする | 2.3.3 |
弦 | URLデコード | application/x-www-form-urlencoded 文字列をデコードする | 2.10 |
弦 | urlencode | 文字列を application/x-www-form-urlencoded 文字列にエンコードします | 2.10 |
弦 | テスト計画名 | 現在のテスト計画の名前を返す | 2.6 |
20.1 関数でできること¶
関数には、ユーザー定義の静的値 (または変数) と組み込み関数の 2 種類があります。
ユーザー定義の静的値を使用すると、ユーザーは、テスト ツリーをコンパイルして実行するために送信するときに、変数を静的値に置き換えるように定義できます。この置換は、テスト実行の開始時に 1 回行われます。これは、たとえば、すべての HTTP リクエストの DOMAIN フィールドを置き換えるために使用できます。たとえば、同じテストで別のサーバーをターゲットにするようにテストを簡単に変更できます。
現在、変数はネストできないことに注意してください。つまり、${Var${N}}は機能しません。__V (変数) 関数を使用してこれを行うことができます: $ {__V(Var${N})}。${__BeanShell(vars.get("Var${N}")}も使用できます。
このタイプの置換は関数なしで可能ですが、不便で直感的ではありませんでした。ユーザーは、Sampler の空白値を埋めるデフォルトの構成要素を作成する必要がありました。変数を使用すると、空白の値を埋めるだけでなく、特定の値の一部のみを置き換えることができます。
組み込み関数を使用すると、以前の応答データ、関数が含まれているスレッド、時間、およびその他の多くのソースに基づいて、実行時に新しい値を計算できます。これらの値は、テストの過程でリクエストごとに新しく生成されます。
20.2 関数と変数はどこで使用できますか? ¶
関数と変数は、任意のテスト コンポーネントの任意のフィールドに書き込むことができます (TestPlan を除く - 以下を参照)。一部のフィールドでは、数値が必要なためランダム文字列を許可せず、関数を受け入れません。ただし、ほとんどのフィールドでは関数を使用できます。
テスト計画で使用される関数には、いくつかの制限があります。関数が処理されるときに JMeter スレッド変数が完全に設定されていないため、パラメーターとして渡される変数名が設定されず、変数参照が機能しないため、split()とregex()および変数評価関数が無効になります。動作しません。threadNum ()関数は機能しません (テスト計画レベルでは意味がありません)。次の関数は、テスト計画で問題なく動作するはずです。
- intSum
- ロングサム
- マシン名
- ビーンシェル
- かっこいい
- JavaScript
- jexl2/jexl3
- ランダム
- 時間
- プロパティ関数
- ログ関数
構成要素は、別のスレッドによって処理されます。したがって、 __threadNumなどの関数は、ユーザー定義変数などの要素では正しく機能しません。また、UDV 要素で定義された変数は、要素が処理されるまで使用できないことに注意してください。
name='${VAR}' のテーブルからアイテムを選択しますいいえ
name=${VAR} のテーブルから項目を選択(VAR自体に引用符が含まれていない限り)
20.3 変数と関数の参照方法¶
テスト要素で変数を参照するには、変数名を ' ${ ' と ' } ' で囲みます。
関数は同じ方法で参照されますが、慣例により、ユーザー値名*との競合を避けるために、関数の名前は " __ "で始まります。一部の関数は、それらを構成するために引数を取り、これらはカンマで区切られた括弧で囲みます。関数が引数を取らない場合、括弧は省略できます。
コンマを含む引数値は、必要に応じてエスケープする必要があります。パラメーター値にコンマを含める必要がある場合は、' \, 'のようにエスケープします。 これは、たとえばスクリプト関数 (Javascript、Beanshell、Jexl、groovy) に適用されます。この場合、スクリプト メソッド呼び出しで必要になる可能性のあるコンマをエスケープする必要があります。
${__BeanShell(vars.put("名前"\,"値"))}
または、テスト計画などで、スクリプトを変数として定義することもできます。
SCRIPT vars.put("名前","値")スクリプトは、次のように参照できます。
${__BeanShell(${SCRIPT})}変数がその値に置き換えられる前に関数呼び出しが解析されるため、 SCRIPT変数 のコンマをエスケープする必要はありません。これは、JSR223 または BeanShell サンプラーと組み合わせて使用するとうまく機能します。これらは、Javascript、Jexl、および BeanShell スクリプトのテストに使用できるからです。
関数は変数やその他の関数を参照できます。たとえば、 ${__XPath(${__P(xpath.file),${XPATH})} はプロパティ「xpath.file」をファイル名として使用し、変数XPATHの内容を次のように使用します。検索する式。
JMeter には、さまざまな組み込み関数の関数呼び出しを作成するのに役立つツールが用意されており、コピーして貼り付けることができます。関数は他の関数のパラメーターになる可能性があるため、値を自動的にエスケープすることはありません。リテラルとして意図した値のみをエスケープする必要があります。
変数または関数の値は、 __logn()関数を使用して報告できます。__logn ()関数参照は、変数が定義された後、テスト計画のどこでも使用できます。あるいは、Java Request サンプラーを使用して、変数参照を含むサンプルを作成することもできます。出力は適切なリスナーに表示されます。 Tree View Listener に変数などの値を表示するために使用できる Debug Samplerがあることに注意してください。
20.4 関数ヘルパーダイアログ¶
Function Helper ダイアログは、JMeter の Tools メニューから利用できます。
関数ヘルパーを使用すると、プルダウンから関数を選択し、その引数に値を割り当てることができます。表の左の列は引数の簡単な説明を提供し、右の列はその引数の値を書き込む場所です。関数が異なれば、引数も異なります。
これが完了したら、「生成」ボタンをクリックすると、適切な文字列が生成され、テスト計画の好きな場所にコピー アンド ペーストできます。
20.5 関数¶
__regex関数¶
正規表現関数は、任意の正規表現 (ユーザーが提供) を使用して前の応答 (または変数の値) を解析するために使用されます。この関数は、変数値が入力されたテンプレート文字列を返します。
__regexFunctionは、将来の使用のために値を格納することもできます。6 番目のパラメーターでは、参照名を指定できます。この関数の実行後、ユーザー定義値の構文を使用して、後で同じ値を取得できます。たとえば、「refName」を 6 番目のパラメーターとして入力すると、以下を使用できるようになります。
- ${refName}は、この関数によって解析された 2 番目のパラメーター (「置換文字列のテンプレート」) の計算結果を参照します。
- ${refName_g0}は、この関数によって解析された一致全体を参照します。
- ${refName_g1}は、この関数によって解析された最初のグループを参照します。
- ${refName_g#}は、この関数によって解析されるn番目のグループを参照します。
- ${refName_matchNr}は、この関数によって検出されたグループの数を参照します。
パラメータ ¶
- 整数 - その一致を使用するように JMeter に指示します。' 1 ' は最初に見つかった一致、' 2 ' は 2 番目の一致、など
- RAND - JMeter にランダムに一致を選択するように指示します。
- ALL - すべての一致を使用するように JMeter に指示し、それぞれに対してテンプレート文字列を作成してから、それらをすべて一緒に追加します。このオプションはほとんど使用されません。
- 0 から 1 の間の浮動小数点数 - 次の式を使用して X番目の一致を見つけるように JMeter に指示します: (number_of_matches_found * float_number) は、最も近い整数に丸められます。
保存される値は${refName} (置換テンプレート文字列) と${refName_g#} です。ここで、" # " は正規表現からのグループ番号です (" 0 " は一致全体を参照するために使用できます)。
__カウンター¶
カウンターは、呼び出されるたびに、1 から始まり +1 ずつ増加する新しい数値を生成します。カウンターは、シミュレートされた各ユーザーの値を個別に保持するか、すべてのユーザーに同じカウンターを使用するように構成できます。各ユーザーの値が個別にインクリメントされる場合、それはテスト計画の反復回数を数えるようなものです。グローバル カウンターは、その要求が実行された回数をカウントするようなものです。
カウンターは整数変数を使用してカウントを保持するため、最大値は 2,147,483,647 です。
カウンター関数のインスタンスは完全に独立しています。グローバル カウンタ - " FALSE " - は、各カウンタ インスタンスによって個別に維持されます。
同じ繰り返しで複数の__counter関数を呼び出しても、値はそれ以上インクリメントされません。
サンプルごとに増分するカウントが必要な場合は、User Parametersなどのプリプロセッサで関数を使用します。
パラメータ ¶
格納された値は${refName}の形式です。これにより、1 つのカウンターを保持し、複数の場所でその値を参照できます。
__threadNum ¶
スレッド番号関数は、現在実行中のスレッドの番号を返すだけです。これらの番号は、ThreadGroup に関してローカルでのみ一意です。つまり、この関数の観点からは、あるスレッド グループのスレッド #1 は別のスレッド グループのスレッド #1 と区別できません。
ctx.getThreadNum()
この関数には引数はありません。
使用例:
${__threadNum}1 から、含まれているスレッド グループで構成されている実行中のスレッドの最大数までの数値を返します。
__threadGroupName ¶
スレッド グループ名関数は、実行中のスレッド グループの名前を返すだけです。
この関数には引数はありません。
使用例:
${__threadGroupName}
__intSum ¶
intSum 関数を使用して、2 つ以上の整数値の合計を計算できます。
パラメータ ¶
例:
${__intSum(2,5,MYVAR)}7 (2+5) を返し、結果を MYVAR 変数に格納します。したがって、${MYVAR}は 7 になります。
${__intSum(2,5,7)}14 (2+5+7) を返し、結果を MYVAR 変数に格納します。
${__intSum(1,2,5,${MYVAR})}MYVAR 値が 8 (1+2+5+${MYVAR}) の場合は 16 を返します)
__longSum ¶
longSum 関数を使用して、2 つ以上の long 値の合計を計算できます。値が -2147483648 から 2147483647 の範囲にないことがわかっている場合は、__intSum の代わりにこれを使用してください。
パラメータ ¶
例:
${__longSum(2,5,MYVAR)}7 (2+5) を返し、結果を MYVAR 変数に格納します。したがって、${MYVAR}は 7 になります。
${__longSum(2,5,7)}14 (2+5+7) を返し、結果を MYVAR 変数に格納します。
${__longSum(1,2,5,${MYVAR})}MYVAR 値が 8 (1+2+5+${MYVAR}) の場合は 16 を返します)
__StringFromFile ¶
StringFromFile 関数を使用して、テキスト ファイルから文字列を読み取ることができます。これは、多くの変数データを必要とするテストを実行する場合に便利です。たとえば、銀行アプリケーションをテストする場合、数百または数千の異なる口座番号が必要になる場合があります。
使いやすいCSV Data Set Config テスト要素 も参照してください 。ただし、現在、複数の入力ファイルはサポートされていません。
呼び出されるたびに、ファイルから次の行を読み取ります。すべてのスレッドが同じインスタンスを共有するため、異なるスレッドは異なる行を取得します。ファイルの終わりに到達すると、最大ループ回数に達していない限り、最初から読み取りを再開します。テスト スクリプト内の関数への参照が複数ある場合、ファイル名が同じであっても、それぞれが個別にファイルを開きます。[値を別の場所で再度使用する場合は、関数呼び出しごとに異なる変数名を使用してください。]
ファイルのオープンまたは読み取りでエラーが発生した場合、関数は文字列 " **ERR** "を返します。
パラメータ ¶
ファイル名パラメータは、ファイルを開くか再度開くときに解決されます。
参照名パラメーター (指定されている場合) は、関数が実行されるたびに解決されます。
シーケンス番号の使用:
オプションのシーケンス番号を使用する場合、パス名はjava.text.DecimalFormatのフォーマット文字列として使用されます。現在のシーケンス番号が唯一のパラメーターとして渡されます。オプションの開始番号が指定されていない場合は、パス名がそのまま使用されます。有用なフォーマット シーケンスは次のとおりです。
- #
- 先行ゼロまたはスペースなしで数値を挿入します
- 000
- 必要に応じて先頭にゼロを付けて 3 桁に圧縮された数字を挿入します
- pin#'.'dat
- 先行ゼロなしで数字を生成し、ドットを文字どおり
pin1.dat、…、pin9.dat、pin10.dat、…、pin9999.datのように扱います。 - pin000'.'dat
- ドットを保持しながら先行ゼロを生成します。数値が、この形式が示す 3 桁よりも多くの桁数を持ち始めると、pin001.dat 、… pin099.dat 、…、pin999.dat 、…、pin9999.dat に見られるように、シーケンスはより多くの
桁数を使用します。 - pin'.'dat#
- ドットを保持しながら先行ゼロなしで数字を追加し、
pin.dat1、…、pin.dat9、…、pin.dat999を生成します
書式設定文字よりも多くの桁数が必要な場合は、必要に応じて数字が拡張されます。
フォーマット文字が解釈されないようにするには、一重引用符で囲みます。「 .」はフォーマット文字であり、一重引用符で囲む必要があることに注意してください
(ただし、#.および000.は、小数点も「.」であるロケールでは期待どおりに機能します)
。
他のロケール (たとえばfr ) では、小数点これは、「#.」が「nnn,」になることを意味します。詳細については、 DecimalFormat
のドキュメントを参照してください。
パス名に特別なフォーマット文字が含まれていない場合は、現在のシーケンス番号が名前に追加されます。それ以外の場合は、フォーマットの指示に従って番号が挿入されます。
開始シーケンス番号が省略され、終了シーケンス番号が指定されている場合、シーケンス番号はループ回数として解釈され、ファイルは最大で " end " 回使用されます。この場合、ファイル名はフォーマットされていません。
${__StringFromFile(PIN#'.'DAT,,1,2)} - PIN1.DAT、PIN2.DATを読み取ります
${__StringFromFile(PIN.DAT,,,2)} - PIN.DATを 2 回読み取ります
" .上記のPIN.DATの"引用されません。この場合、開始番号は省略されるため、ファイル名はそのまま使用されます。
__マシン名¶
machineName 関数は、ローカル ホスト名を返します。これは、Java メソッドInetAddress.getLocalHost()を使用し、それをgetHostName()に渡します。
例:
${__machineName()}マシンのホスト名を返します
${__machineName}マシンのホスト名を返します
__マシンIP ¶
machineIP 関数は、ローカル IP アドレスを返します。これは、Java メソッドInetAddress.getLocalHost()を使用し、それをgetHostAddress()に渡します。
例:
${__machineIP()}マシンの IP アドレスを返します
${__machineIP}マシンの IP アドレスを返します
__JavaScript ¶
javaScript 関数は、JavaScript (Java ではありません!) コードの一部を実行し、その値を返します。
JMeter Javascript 関数は、スタンドアロンの JavaScript インタープリターを呼び出します。スクリプト言語としてJavascriptを使用しているため、計算などを行うことができます。
を参照してください。
次の変数がスクリプトで使用可能になります。
- log -関数のロガー
- ctx - JMeterContextオブジェクト
- vars - JMeterVariablesオブジェクト
- threadName - 現在のスレッド名を含む文字列
- sampler - 現在のSamplerオブジェクト (存在する場合)
- sampleResult - 以前のSampleResultオブジェクト (存在する場合)
- props - JMeterProperties (クラスjava.util.Properties ) オブジェクト
Rhinoscript では、Packages オブジェクトを介して静的メソッドにアクセスできます。スクリプティング Javaのドキュメントを参照してください。たとえば、次のようにして JMeterContextService 静的メソッドにアクセスできます。 Java.type("org.apache.jmeter.threads.JMeterContextService").getTotalThreads()
パラメータ ¶
- new Date() - 現在の日付と時刻を返す
- Math.floor(Math.random()*(${maxRandom}+1)) - 0と変数maxRandomの 間の乱数
- ${minRandom}+Math.floor(Math.random()*(${maxRandom}-${minRandom}+1)) - 変数minRandomとmaxRandom の間の乱数
- "${VAR}"=="abcd"
${__javaScript('${sp}'.slice(7\,99999))}7 の後のコンマはエスケープされます。
例:
${__javaScript(new Date())}2016 年 1 月 9 日土曜日 16:22:15 GMT+0100 (CET)を返します
${__javaScript(new Date(),MYDATE)}Sat Jan 09 2016 16:22:15 GMT+0100 (CET)を返し、変数MYDATEに格納します
${__javaScript(Math.floor(Math.random()*(${maxRandom}+1)),MYRESULT)}maxRandom 変数を使用し、0 と maxRandom の間のランダムな値を返し、MYRESULT に格納します。
${__javaScript(${minRandom}+Math.floor(Math.random()*(${maxRandom}-${minRandom}+1)),MYRESULT)}maxRandom 変数とminRandom変数を使用し、 maxRandomとminRandomの間のランダム値を返し、変数MYRESULTに格納します。
${__javaScript("${VAR}"=="abcd",MYRESULT)}VAR変数の値をabcdと比較し、trueまたはfalseを返し、結果を MYRESULT に格納します
__ランダム¶
random 関数は、指定された最小値と最大値の間にある乱数を返します。
例:
${__Random(0,10)}0 から 10 までの乱数を返します
${__Random(0,10, MYVAR)}0 から 10 までの乱数を返し、MYVARに格納します。${MYVAR}には乱数が含まれます
__RandomDate ¶
RandomDate 関数は、指定された開始日と終了日の値の間にあるランダムな日付を返します。
パラメータ ¶
例:
${__RandomDate(,,2050-07-08,,)}現在と2050-07-08の間のランダムな日付を返します。たとえば、2039-06-21
${__RandomDate(dd MM yyyy,,08 07 2050,,)}04 03 2034のようなカスタム形式でランダムな日付を返します
__RandomString ¶
RandomString 関数は、使用する chars 内の文字を使用して、長さのランダムな文字列を返します。
例:
${__RandomString(5)}読み取り可能または不可能な5文字のランダムな文字列を返します
${__RandomString(10,abcdefg)}cdbgdbeebdやadbfeggfadなど、 abcdefgセットから選択された 10 文字のランダムな文字列を返します。
${__RandomString(6,a12zeczclk, MYVAR)}a12zeczclkセットから選択された 6 文字のランダムな文字列を返し、結果をMYVARに格納します。MYVARには2z22akやz11kceなどの文字列が含まれます。
__RandomFromMultipleVars ¶
RandomFromMultipleVars 関数は、 Source Variablesによって提供される変数値に基づいてランダム値を返します。
変数は、次のエクストラクタで生成できるため、単純または多値にすることができます。 複数値変数は、 Match Numbersに-1を 設定したときに抽出される変数です。これにより、 varName_matchNrと呼ばれる一致番号変数が作成され、各値に対して変数varName_n (n = 1、2、3 など) が 作成されます。例:
${__RandomFromMultipleVars(val)}複数値であるかどうかを考慮して、変数 val の内容に基づいてランダムな文字列を返します
${__RandomFromMultipleVars(val1|val2)}変数 val1 と val2 の内容に基づいて、それらが多値であるかどうかを考慮して、ランダムな文字列を返します
${__RandomFromMultipleVars(val1|val2, MYVAR)}変数 val1 と val2 の内容に基づいて、それらが多値であるかどうかを考慮してランダムな文字列を返し、結果をMYVARに格納します。
__UUID ¶
UUID 関数は、疑似乱数型 4 Universally Unique IDentifier (UUID) を返します。
パラメータ ¶
例:
${__UUID()}次の形式で UUID を返します: c69e0dd1-ac6b-4f2b-8d59-5d4e8743eecd
__CSVRead ¶
CSVRead 関数は、CSV ファイルから文字列を返します ( StringFromFileを参照) 。
注: JMeter は複数のファイル名をサポートしています。
ほとんどの場合、新しい CSV Data Set Config 要素 の方が使いやすいです。
ファイル名が最初に検出されると、ファイルが開かれ、内部配列に読み込まれます。空白行が検出された場合、これはファイルの終わりとして扱われます。これにより、末尾のコメントを使用できます。
同じファイル名への後続のすべての参照は、同じ内部配列を使用します。OSが気にしない場合でも、ファイル名の大文字と小文字は関数にとって重要であるため、CSVRead(abc.txt,0)とCSVRead(aBc.txt,0)は異なる内部配列を参照します。
*ALIAS機能を 使用すると、同じファイルを複数回開くことができ、ファイル名を短くすることもできます。
各スレッドには、ファイル配列内の現在の行への独自の内部ポインターがあります。スレッドが最初にファイルを参照すると、配列内の次の空き行が割り当てられるため、各スレッドは他のすべてのスレッドとは異なる行にアクセスします。[配列内の行よりも多くのスレッドがない限り。]
パラメータ ¶
たとえば、次のようにいくつかの変数を設定できます。
- COL1a ${__CSVRead(random.txt,0)}
- COL2a ${__CSVRead(random.txt,1)}${__CSVRead(random.txt,next)}
- COL1b ${__CSVRead(random.txt,0)}
- COL2b ${__CSVRead(random.txt,1)}${__CSVRead(random.txt,next)}
__プロパティ¶
プロパティ関数は、JMeter プロパティの値を返します。プロパティ値が見つからず、デフォルトが指定されていない場合は、プロパティ名を返します。デフォルト値を指定する場合、関数名を指定する必要はありません。パラメーターは null に設定でき、無視されます。
例えば:
- ${__property(user.dir)} - user.dirの戻り値
- ${__property(user.dir,UDIR)} - user.dirの値を返し、 UDIRに保存します
- ${__property(abcd,ABCD,atod)} - プロパティabcd (定義されていない場合は「 atod 」) の値を返し、 ABCDに保存します。
- ${__property(abcd,,atod)} - プロパティabcd (定義されていない場合は " atod ") の値を返しますが、保存しません
__P ¶
これは、コマンド ラインで定義されたプロパティで使用することを目的とした簡略化されたプロパティ関数です。__property関数とは異なり、変数に値を保存するオプションはなく、デフォルト値が指定されていない場合は 1 と見なされます。値 1 が選択されたのは、ループなどの一般的なテスト変数に有効であるためです。スレッド数、ランプアップなど
例えば:プロパティ値を定義します。
jmeter -Jgroup1.threads=7 -Jhostname1=www.realhost.edu値をフェッチします:
${__P(group1.threads)} - group1.threadsの値を返します
${__P(group1.loops)} - group1.loopsの値を返します
${__P(hostname,www.dummy.org)上記 の例では、最初の関数呼び出しは7を返し、2 番目は1を返し、最後の関数呼び出しは www.dummy.org を返します(これらのプロパティ が定義されていない場合) 。他の場所で!)
__ログ¶
ログ関数はメッセージをログに記録し、その入力文字列を返します
パラメータ ¶
OUTおよびERRログ レベル名は、出力をそれぞれSystem.outおよびSystem.errに送信するために使用されます。この場合、出力は常に出力されます。現在のログ設定には依存しません。
- ${__log(メッセージ)}
- ログ ファイルに " … thread Name : Message "として書き込まれます。
- ${__log(メッセージ、OUT)}
- コンソール ウィンドウに書き込まれる
- ${__log(${VAR},,,VAR=)}
- 「 …スレッド名VAR=値」としてログファイルに書き込まれます
__logn ¶
logn 関数はメッセージをログに記録し、空の文字列を返します
パラメータ ¶
OUTおよびERRログ レベル名は、出力をそれぞれSystem.outおよびSystem.errに送信するために使用されます。この場合、出力は常に出力されます。現在のログ設定には依存しません。
- ${__logn(VAR1=${VAR1},OUT)}
- 変数の値をコンソール ウィンドウに書き込む
__BeanShell ¶
BeanShell 関数は、渡されたスクリプトを評価し、結果を返します。
BeanShell の使用の詳細については、BeanShell の Web サイト ( http://www.beanshell.org/ ) を参照してください。
関数の 1 つのインスタンスを複数のスレッドから呼び出すことができます。ただし、関数execute()メソッドは同期されます。
プロパティ「beanshell.function.init」が定義されている場合、ソース ファイルの名前としてインタープリターに渡されます。これは、共通のメソッドと変数を定義するために使用できます。bin ディレクトリにサンプルの初期化ファイルがあります: BeanShellFunction.bshrc。
スクリプトが実行される前に、次の変数が設定されます。
- log - BeanShell 関数のロガー(*)
- ctx - JMeterContextオブジェクト
- vars - JMeterVariablesオブジェクト
- props - JMeterProperties (クラスjava.util.Properties ) オブジェクト
- threadName - スレッド名 (文字列)
- Sampler - 現在のSampler (存在する場合)
- SampleResult - 現在のSampleResult (存在する場合)
例:
- ${__BeanShell(123*456)}
- 56088 を返します
- ${__BeanShell(source("function.bsh"))}
- function.bshのスクリプトを処理します
__グルーヴィー¶
__groovy関数は、渡された Apache Groovy スクリプトを評価 し、結果を返します。
プロパティ「groovy.utilities」が定義されている場合、これは ScriptEngine によってロードされます。これは、共通のメソッドと変数を定義するために使用できます。binディレクトリにサンプルの初期化ファイルutility.groovyがあります。
スクリプトが実行される前に、次の変数が設定されます。
- log - groovy 関数のロガー(*)
- ctx - JMeterContextオブジェクト
- vars - JMeterVariablesオブジェクト
- props - JMeterProperties (クラスjava.util.Properties ) オブジェクト
- threadName - スレッド名 (文字列)
- sampler - 現在のSampler (存在する場合)
- prev - 前のSampleResult (存在する場合)
- OUT - System.out
(*) は、初期化ファイルがあればそれが処理される前に設定されることを意味します。その他の変数は、呼び出しごとに異なります。
たとえば、次の ことは行わないでください。
${__groovy("${myVar}".substring(0\,2))}
変数 myVar がトランザクションごとに変更されると想像してください。スクリプトが毎回変更されるため、上記の Groovy はキャッシュできません。
代わりに、キャッシュできる次の操作を行います。
${__groovy(vars.get("myVar").substring(0\,2))}
パラメータ ¶
例:
-
${__groovy(123*456)}
- 56088 を返します
-
${__groovy(vars.get("myVar").substring(0\,2))}
- var の値がJMeterの場合、 String.substring(0,2)を実行するとJMが返されます。, が\,にエスケープされていることに注意してください。
__スプリット¶
split 関数は、渡された文字列を区切り文字に従って分割し、元の文字列を返します。区切り文字が隣接している場合、値として「?」が返されます。分割された文字列は変数${VAR_1}、${VAR_2}などで返されます。変数の数は${VAR_n}で返されます。末尾の区切り文字は欠落変数として扱われ、「?」が返されます。また、ForEach コントローラーとの連携を向上させるために、 __ split は、以前の分割によって設定された場合に備えて、最初の未使用の変数を削除するようになりました。
例: テスト計画で VAR =" a||c|" を 定義します。
${__split(${VAR},VAR,|)}
これはVARの内容、すなわち " a||c| " を返し、次の変数を設定します:
VAR_n = 4
VAR_1 = a
VAR_2 = ?
VAR_3 = c
VAR_4 = ?
VAR_5 = null
パラメータ ¶
__XPath ¶
XPath 関数は XML ファイルを読み取り、XPath と照合します。関数が呼び出されるたびに、次の一致が返されます。ファイルの最後で、先頭に戻ります。一致するノードがない場合、関数は空の文字列を返し、警告メッセージが JMeter ログ ファイルに書き込まれます。
${__XPath(/path/to/build.xml, //target/@name)}これはbuild.xml のすべてのターゲットに一致し、次の name 属性の内容を返します
__setProperty ¶
setProperty 関数は、JMeter プロパティの値を設定します。関数からのデフォルトの戻り値は空の文字列であるため、関数呼び出しは関数が有効な場所ならどこでも使用できます。
オプションの 3番目のパラメータを「true 」に設定すると、元の値を返すことができます。
プロパティは JMeter に対してグローバルであるため、スレッドとスレッド グループ間の通信に使用できます
__時間¶
time 関数は、現在の時刻をさまざまな形式で返します。
パラメータ ¶
フォーマット文字列が省略されている場合、関数はエポックからの現在の時間をミリ秒単位で返します。形式が " /ddd " (ここで、dddは 10 進数) と一致する場合、関数はミリ秒単位の現在の時刻をdddの値で割った値を返します。たとえば、「/1000」はエポックからの現在の時間を秒単位で返します。それ以外の場合、現在の時刻が SimpleDateFormat に渡されます。次の短縮エイリアスが提供されています。
- YMD = yyyyMMdd
- HMS = HHmmss
- YMDHMS = yyyyMMdd-HHmmss
- USER1 = JMeter プロパティtime.USER1に含まれるもの
- USER2 = JMeter プロパティtime.USER2に含まれるもの
デフォルトは、 time.YMD=yyMMddなどの適切な JMeter プロパティを設定することで変更できます 。
${__time(dd/MM/yyyy,)}2018 年 1 月 21 日に実行された場合、21 /01/ 2018 を返します
${__time(YMD,)}2018 年 1 月 21 日に実行された場合、20180121 が返されます。
${__time()}時間をミリ秒で返します1516540541624
__jexl2 ¶
jexl 関数は、 Commons JEXL 式を評価した結果を返します。JEXL 式の詳細については、以下のリンクを参照してください。
__jexl2関数は Commons JEXL 2 を使用します
次の変数がスクリプトで使用可能になります。
- log -関数のロガー
- ctx - JMeterContextオブジェクト
- vars - JMeterVariablesオブジェクト
- props - JMeterProperties (クラスjava.util.Properties ) オブジェクト
- threadName - 現在のスレッド名を含む文字列
- sampler - 現在のSamplerオブジェクト (存在する場合)
- sampleResult - 以前のSampleResultオブジェクト (存在する場合)
- OUT - System.out - 例: OUT.println("message")
Jexl は、クラスを作成してそれらのメソッドを呼び出すこともできます。次に例を示します。
Systemclass=log.class.forName("java.lang.System"); now=Systemclass.currentTimeMillis();Web サイトの Jexl ドキュメントでは、" div " が整数除算を行うと誤って示唆されていることに注意してください。実際、「div」と「/」はどちらも通常の除算を実行します。次のようにして同じ効果を得ることができます。
i = 5 / 2; i.intValue(); // または i.longValue() を使用
__jexl3 ¶
jexl 関数は、 Commons JEXL 式を評価した結果を返します。JEXL 式の詳細については、以下のリンクを参照してください。
__jexl3関数は Commons JEXL 3 を使用します
次の変数がスクリプトで使用可能になります。
- log -関数のロガー
- ctx - JMeterContextオブジェクト
- vars - JMeterVariablesオブジェクト
- props - JMeterProperties (クラスjava.util.Properties ) オブジェクト
- threadName - 現在のスレッド名を含む文字列
- sampler - 現在のSamplerオブジェクト (存在する場合)
- sampleResult - 以前のSampleResultオブジェクト (存在する場合)
- OUT - System.out - 例: OUT.println("message")
Jexl は、クラスを作成してそれらのメソッドを呼び出すこともできます。次に例を示します。
Systemclass=log.class.forName("java.lang.System"); now=Systemclass.currentTimeMillis();Web サイトの Jexl ドキュメントでは、" div " が整数除算を行うと誤って示唆されていることに注意してください。実際、「div」と「/」はどちらも通常の除算を実行します。次のようにして同じ効果を得ることができます。
i = 5 / 2; i.intValue(); // または i.longValue() を使用
__V ¶
V (変数) 関数は、変数名の式を評価した結果を返します。これは、ネストされた変数参照 (現在サポートされていません) を評価するために使用できます。
たとえば、変数A1、A2、およびN = 1がある場合:
- ${A1} - 正常に動作します
- ${A${N}} - 機能しません (ネストされた変数参照)
- ${__V(A${N})} - 正常に動作します。A${N}はA1になり、__V関数はA1の値を返します
__evalVar ¶
evalVar 関数は、変数に格納された式を評価した結果を返します。
これにより、ファイルから文字列を読み取り、その中の変数参照を処理できます。たとえば、変数 " query " が " select ${column} from ${table} " を含み、" column " と " table " が " name " と " customers " を含む場合、${__evalVar(query)} は次のように評価されます。 「お客様から名前を選ぶ」。
__eval ¶
eval 関数は、文字列式を評価した結果を返します。
これにより、変数に格納されている文字列内の変数と関数の参照を補間できます。たとえば、次の変数があるとします。
- 名前=スミス
- 列=年齢
- テーブル=誕生日
- SQL = name='${name}' の ${table} から ${column} を選択
これは、CSV データセットと組み合わせて使用できます。たとえば、SQL ステートメントと値の両方がデータ ファイルで定義されている場合です。
__char ¶
char 関数は、数字のリストを Unicode 文字として評価した結果を返します。以下の__unescape()も参照してください。
これにより、任意の文字値をフィールドに追加できます。
パラメータ ¶
例:
${__char(13,10)} = ${__char(0xD,0xA)} = ${__char(015,012)} = CRLF
${__char(165)} = ¥ (円)
__unescape ¶
unescape 関数は、Java エスケープ文字列を評価した結果を返します。上記の__char()も参照してください。
これにより、他の方法では GUI を介して定義するのが難しい (または不可能な) フィールドに文字を追加できます。
例:
${__unescape(\r\n)} = CRLF
${__unescape(1\t2)} = 1 [タブ] 2
__unescapeHtml ¶
HTML エンティティを含む文字列をエスケープ解除する関数は、エスケープに対応する実際の Unicode 文字を含む文字列にエスケープします。HTML 4.0 エンティティをサポートします。
たとえば、文字列
${__unescapeHtml(<フランçais>)}<Français> を返します。
エンティティが認識されない場合はそのままにして、そのまま結果文字列に挿入します。たとえば、 ${__unescapeHtml(>&zzzz;x)}は>&zzzz;xを返します。
Commons Lang の StringEscapeUtils#unescapeHtml(String) を 使用します。
__escapeHtml ¶
HTML エンティティを使用して String 内の文字をエスケープする関数。HTML 4.0 エンティティをサポートします。
例えば、
${__escapeHtml("パン" & "バター")}return: 「パン」&アンプ; 「バター」.
Commons Lang の StringEscapeUtils#escapeHtml(String)を 使用します。
__urldecode ¶
application/x-www-form-urlencoded文字列 をデコードする関数。注: エンコード方式として UTF-8 を使用してください。
たとえば、文字列
${__urldecode(Word+%22school%22+is+%22%C3%A9cole%22+in+french)}単語 「学校」はフランス語で「エコール」です。
Java クラスURLDecoderを使用します。
__urlencode ¶
文字列をapplication/x-www-form-urlencoded文字 列にエンコードする関数。
たとえば、文字列
${__urlencode(単語「学校」はフランス語で「エコール」です)}Word+%22school%22+is+%22%C3%A9cole%22+in+french を返し ます。
Java クラスURLEncoderを使用します。
__FileToString ¶
FileToString 関数を使用して、ファイル全体を読み取ることができます。呼び出されるたびに、ファイル全体を読み取ります。
ファイルのオープンまたは読み取りでエラーが発生した場合、関数は文字列 " **ERR** "を返します。
パラメータ ¶
関数が実行されるたびに、ファイル名、エンコード、および参照名のパラメーターが解決されます。
__samplerName ¶
samplerName 関数は、現在のサンプラーの名前 (ラベル) を返します。
この関数は、サンプラーが関連付けられていないテスト要素では機能しません。たとえば、テスト計画。構成要素には、関連付けられたサンプラーもありません。ただし、一部の構成要素は、HTTP ヘッダー マネージャーや Http Cookie マネージャーなどのサンプラーによって直接参照されます。この場合、関数は Http サンプラーのコンテキストで解決されます。プリプロセッサ、ポストプロセッサ、およびアサーションには、常にサンプラーが関連付けられています。
例:
${__samplerName()}
__TestPlanName ¶
TestPlanName 関数は、現在のテスト計画の名前を返します (プランを含めるで使用して、呼び出し元のテスト計画の名前を知ることができます)。
例:
${__TestPlanName}は、テスト計画のファイル名を返します。たとえば、計画が Demo.jmx という名前のファイルにある場合、「Demo.jmx 」が返されます。
__escapeOroRegexpChars ¶
ORO Regexp メタ文字をエスケープする関数。Java Regexp Engine の\Q \Eに相当します。
例えば、
${__escapeOroRegexpChars([^"].+?,)}戻り値: \[\^\"\]\.\+\? .
ORO の Perl5Compiler#quotemeta(String) を使用します。
パラメータ ¶
__escapeXml ¶
XML 1.0 エンティティを使用して String 内の文字をエスケープする関数。
例えば、
${__escapeXml("パン" & 'バター')}戻り値: 「パン」&アンプ; 「バター」.
Commons Lang の StringEscapeUtils#escapeXml10(String) を 使用します。
__timeShift ¶
timeShift 関数は、指定された秒数、分数、時間数、日数、または月数を加算して、指定された形式で日付を返します。
パラメータ ¶
- PT20.345Sは 20.345 秒として解析されます
- PT15Mは 15 分として解析されます
- PT10Hは 10 時間として解析されます
- P2Dは 2 日として解析されます
- -P6H3Mは -6 時間と -3 分として解析されます
例:
${__timeShift(dd/MM/yyyy,21/01/2018,P2D,,)}2018 年 1 月 23 日を返します
${__timeShift(dd MMMM yyyy,2018 年 2 月 21 日,P2D,fr_FR,)}返品2018 年 2 月 23 日
__ダイジェスト¶
ダイジェスト関数は、オプションのソルト、大文字、および変数名を使用して、特定のハッシュ アルゴリズムで暗号化された値を返します。
パラメータ ¶
- MD2
- MD5
- SHA-1
- SHA-224
- SHA-256
- SHA-384
- SHA-512
例:
${__digest(MD5,Errare humanum est,,,)}c49f00b92667a35c63708933384dad52 を返します
${__digest(SHA-256,Felix qui potuit rerum cognoscere causas,mysalt,,)}a3bc6900fe2b2fc5fa8a601a4a84e27a079bf2c581d485009bc5c00516729ac7 を返します
__dateTimeConvert ¶
__dateTimeConvert関数は、ソース形式の日付をターゲット形式に変換し、オプションで結果を変数名に格納します。
パラメータ ¶
例:
${__dateTimeConvert(01212018,MMddyyyy,dd/MM/yyyy,)}2018 年 1 月 21 日を返します
エポック時間値: 1526574881000、
${__dateTimeConvert(1526574881000,,dd/MM/yyyy HH:mm,)}UTC 時間で17/05/2018 16:34を返します(-Duser.timezone=GMT)
__isPropDefined ¶
__isPropDefined関数は、プロパティが存在する場合は true を返し、存在しない場合は false を返します。
例:
${__isPropDefined(START.HMS)}trueを返します
__isVarDefined ¶
__isVarDefined関数は、変数が存在する場合は true、存在しない場合は false を返します。
例:
${__isVarDefined(JMeterThread.last_sample_ok)}trueを返します
__changeCase ¶
大文字小文字の変更関数は、特定のモードに従って大文字小文字が変更された文字列値を返します。結果は、必要に応じて JMeter 変数に保存できます。
パラメータ ¶
- AB-CD EF としてのUPPER結果
- ab-cd edとしてのLOWER結果
- 結果をAb-CD eFとしてCAPITALIZE
例:
${__changeCase(Avaro omnia desunt\, inopi pauca\, sapienti nihil,UPPER,)}AVARO OMNIA DESUNT、INOPI PAUCA、SAPIENTI NIHILを返します
${__changeCase(LABOR OMNIA VINCIT IMPROBUS,LOWER,)}レイバー オムニア ヴィンシット インプロバスを返します
${__changeCase(omnibus viis romam pervenitur,CAPITALIZE,)}Omnibus viis romam perveniturを返します
__StringToFile ¶
__StringToFile関数を使用して、文字列をファイルに書き込むことができます。呼び出されるたびに、文字列をファイルに追加または上書きして書き込みます。
関数からのデフォルトの戻り値は空の文字列です
パラメータ ¶
コンテンツに改行を挿入する必要がある場合は、文字列で\nを使用します。
20.6 事前定義された変数¶
ほとんどの変数は、関数を呼び出すか、ユーザー定義変数などのテスト要素によって設定されます。この場合、ユーザーは使用される変数名を完全に制御できます。ただし、一部の変数は JMeter によって内部的に定義されています。これらを以下に示します。
- COOKIE_cookiename - Cookie 値が含まれます ( HTTP Cookie Managerを参照)
- JMeterThread.last_sample_ok - 最後のサンプルが OK であったかどうか - true / false。注: これは PostProcessors と Assertions が実行された後に更新されます。
- START変数 (次のセクションを参照)
20.6 事前定義されたプロパティ¶
JMeter プロパティのセットは、JMeter の起動時に定義されたシステム プロパティから初期化されます。追加の JMeter プロパティは、jmeter.properties、user.propertiesまたはコマンド ラインで定義されます。
一部の組み込みプロパティは、JMeter によって定義されます。これらを以下に示します。便宜上、STARTプロパティも同じ名前の変数にコピーされます。
- START.MS - ミリ秒単位の JMeter 開始時間
- START.YMD - yyyyMMddとしての JMeter 開始時刻
- START.HMS - HHmmssとしての JMeter 開始時間
- TESTSTART.MS - ミリ秒単位のテスト開始時間
START変数/プロパティは、テストの開始時刻ではなく、JMeter の起動時刻を表す ことに注意してください。これらは主にファイル名などで使用することを目的としています。