1. ホーム
  2. Web プログラミング
  3. 正規表現

jmeter-regular-expressionsの例です。

2022-02-15 03:17:04

jmeterのエッセイを連載しています。

本題に入りますが、jmeterを使っていると、ある値やデータ情報を得るために、次の操作を行う前に、まず完全な操作処理を完了させる必要がある状況がよくあります(つまり、よく言われる前のリクエストの関連付け・応答結果を次のリクエストのパラメータにすること)。jmeterでは、正規表現抽出器を使ってこの操作を簡単に完了できるようにしています。. 正規表現とは、これらのルールを記述するためのツールです。言い換えれば、正規表現はテキストの規則を記録するためのコードです。正規表現の学習を始めるには、例題から始めるのが一番です。例題を見に行きましょう。

例1: JDBCからデータを問い合わせ、クエリ結果を抽出する

1. 新しいスレッドグループを作成し、/libまたは/lib/extディレクトリに関連するjarを置き、JDBC接続設定などを追加します、ここでは省略、直接スクリーンショット添付

2. JDBC Request, Query Type=Select Statement, Varibale name=MySQLを追加する。データベースツールを一度実行した後、後で結果ツリーを見る時に比較をして、抽出が正しいかどうか確認することをお勧めする。

3、JDBCリクエストの下に正規表現抽出器を作成し、右クリック[追加]-[ポストプロセッサ]-[正規表現抽出器]JDBCリクエストコンポーネントがすることができます下にある。この例では、2つの列をクエリするので、2つの正規表現抽出器を作成する必要があります。

4.以下のフィールドの最初の列を抽出するように設定する。

Apply toは通常Main sampleのみです。

チェックする応答フィールドは適宜選択され、この場合は[本文]です。

参照名はidで、次のリクエストで参照するパラメータ名です。${id}の形式で、スレッドグループ内の他の変数名と重複しないように注意します。

今回の焦点である正規表現はここに記入し([a-zA-Z0-9-]{1,})、さらに

():括弧で囲まれた部分が抽出される内容です。
.:任意の文字列にマッチする。
+ : 1回または複数回。
? : あまり欲張らず、最初にマッチするものを見つけてからやめる。

テンプレート、最初にマッチするフィールドを選択、$1$と記入、$$で参照、正規表現で複数ある場合は$2$$3$$など、idに解析された最初の値を示す。例: $1$ は、最初に解析された値を意味します。

マッチング番号、ランダムな値の場合は0、すべて-1、ランダムな値の場合は0、1つ目の場合は1、2つ目の場合は2

デフォルト値 パラメータが値を取得しない場合、デフォルトで値が与えられます。これは、シナリオに応じて、記入したりしなかったりすることができます。

5. 2番目の列フィールドの抽出を設定する

メインサンプルのみを記入するように申請します。

チェックする回答欄は、[件名]を選択します。

参照名は、変数の使用を要求する場合、phoneの後に${phone}の書式で記入されます。

正規表現で、( \d{10,}) と記入する。

テンプレートで、最初にマッチするフィールドを選択し、$1$を記入し、そのフィールドの

マッチングする数字、0以外は1を記入することが推奨されます

デフォルト値は未入力です

6. エクストラクタの抽出結果を確認する、2つの方法があります。まず一つ目。もう一つは、リクエストを使用しない、です。

方法1:デバッグポストプロセッサーも追加するすべての変数の値を印刷し、ちょうどそれらを追加し、その結果を実行する

結果ツリーを見ると、抽出された変数の値が正しいかどうかがわかります

方法2:次のリクエストに参照させる

例 2: ログイン応答リクエストヘッダから JSESSIONID を抽出する場合

1. 例 1 に引き続き、例 2 を記述する。ログインのための HTTP リクエストを追加する。

一度実行し、ビューの結果ツリーにサンプラーの結果をSet-Cookie: JSESSIONIDを指定します。

2. HTTPリクエストコンポーネントのログイン下の[Add] - [Post Processor] - [Regular Expression Extractor]を右クリックすることができる。正規表現で記入します。(? <=Set-Cookie: JSESSIONID=)\w+b

3. 3. スレッドグループの内部サイトの下にHTTPクッキーマネージャーを作成し、正規表現で抽出した参照変数JSESSIONIDwを${JSESSIONIDw}の形式で参照します。

4. 一度実行し、結果ツリーでリクエストにログインが必要な他のリクエストをチェックします。

例3 (単純): 単一の文字列を抽出する場合

例では、Webページの次の部分にマッチします: name = "file" value = "readme.txt"> そしてreadme.txtを抽出します。適切な正規表現:name = "file" value = "(. +?) ">.
      (): 返されるマッチ文字列をカプセル化する。
      . : 任意の単一文字列にマッチする。
      + : 1回または複数回。
      ? : あまり欲張らず、最初にマッチするものを見つけてからやめる。

例4(シンプル)。複数の文字列を抽出する

例では、Webページの次の部分にマッチします: name = "file.name" value = "readme.txt"> and extract file.name and readme.txt.a suitable regular expression: name = "(. +?) " value = "(. +?) " です。これで、$1$と$2$の2つのグループがそれぞれ作成されます。

  例えば

    引用名:MYREF
    テンプレート: $$1$$$2$$

   以下の変数の値が設定されます。
    MYREF: ファイル名readme.txt
    MYREF_g0: name = "file.name"value = "readme.txt"
    MYREF_g1: file.name。
    MYREF_g2: readme.txt (英語)

  参照する必要がある場所で使用できます: ${MYREF}, ${MYREF_g1}.

例5(単純):すべての小数点を求める、例:10.2

引用名:aa

正規表現です。([0-9]+\. [0-9]+)

テンプレート: $0$ ゾーンの番号:-1 呼び出し。

AA_1}:take the first number that meets the requirement.

${aa_2}:条件を満たす2番目の数字を取得する

例6(シンプル):すべての小数点以下を見つける

引用名:aa

正規表現です。 ([0-9]+)は必ず括弧で括ってください。

テンプレート: $2$ (第2グループ)

ゾーンマッチング番号:-1は、一致するすべての呼び出しを取り出します。

AA_1}:take out the first number that meets the requirement

${aa_2}:条件を満たす2番目の数字を取得する

例7(単純):小数点を含む最初の数を求める

引用名:aa

正規表現です。 ([0-9]+)は必ず括弧で括ってください。

テンプレート:not written can be, or $2$$1$.

ゾーンマッチング番号:1(最初の)コール。

${aa_g1}:条件を満たす最初の番号のセットを取得する

${aa_g2}:条件を満たす2つ目の数値セットを取得する

例8 (単純): すべての小数点を見つける

引用名:aa

正規表現です。 ([0-9]+)は必ず括弧で括ってください。

テンプレート:not written can be, or $2$$1$.

ゾーンマッチ番号:-1は、マッチするすべての呼び出しを取り出します。

${aa_1_g1}:条件を満たした最初の番号のセットを取り出す

${aa_1_g2}:1つ目の条件を満たす2つ目の数字の集合を取り出す

AA_2_G1}:retrieve the first set of numbers that meet the requirements(要件を満たす最初の数字のセットを取り出す

AA_2_G2}:条件を満たす最初の数値集合から2番目の数値集合を取り出す

正規表現の確認方法

このツールでは、書かれた正規表現が正しいかどうかをRegesterを使ってチェックします。ダウンロードは、deerchao.netからどうぞ。

jmeter正規表現抽出パラメータの説明

ポストプロセッサー:リクエストの最後、またはレスポンス結果が返されたときに機能します。

正規表現抽出器。perlの正規表現を用いて、サーバーの応答から値を抽出することを可能にする。この要素は指定されたレンジサンプラーに作用し、正規表現で目的の値を抽出し、テンプレート文字列を生成し、結果を与えられた変数名に格納する。

適用対象:アクションの範囲(返されるコンテンツのアサーション範囲)

メインサンプルとサブサンプル:親ノードに作用するサンプラーと対応する子ノードのサンプラー

メインサンプルのみ:親ノードのみに作用するサンプラー

サブサンプルのみ 子ノードのみに作用するサンプラー

JMeter変数: jmeter変数に作用します(入力ボックスにjmeter変数の名前を入力します)。

チェックするレスポンスフィールド ResponseFieldtocheck: チェックするレスポンスメッセージの範囲

Body:ボディ、応答メッセージの本文、メッセージヘッダーを除いたウェブページの内容

Body(unescaped):body, レスポンスの本文で、すべてのhtmlエスケープを置き換えます。htmlエスケープは文脈に関係なく処理されるので、不正確に変換されることがあり、推奨されないことに注意してください。

BodyasaDocument: 様々な種類のドキュメントからテキストを抽出します。このオプションはパフォーマンスに影響があることに注意してください。

Response Headers: レスポンスメッセージヘッダ

リクエストヘッダ:リクエスト情報ヘッダ

URLのこと。Uniform Resource Locatorの略で、インターネット上の情報資源を記述するために使用される文字列

レスポンスコード:200、404などのレスポンスステータスコード。

Response Message:応答メッセージ

ReferenceName。抽出された結果を格納するJmeter変数の名前; すなわち、次のリクエストのために参照される必要がある値、フィールド、または変数名です。各ストレージグループは、共通の結果を使用する必要があります。[refname]_g#、ここで[refname]は入力した名前、#はグループ番号、0はマッチ結果全体、1はマッチした値の最初のセットを指します。

引用方法: ${refname}

RegularExpression。レスポンスの解析には正規表現を使用します。

よく使われる正規表現演算子は以下の通りです。

テンプレートです。マッチの結果から文字列を作成します。これは正規表現でマッチした値のセットで、最初に抽出された値を使うことを意味します(マッチした値が複数ある場合もあるので、テンプレートを使用します); 1から順にマッチしていきます。

正規表現でマッチした値のセットの構文は、最初のセットが$1$、2番目のセットが$2$、そしてマッチ全体が$0$です。

例えば、テンプレートとして "11-22" を指定すると、最初のマッチと2番目のマッチを "-" で連結した文字列が得られます。

MatchNo: 正規表現でデータをマッチングした結果は、値の配列として見ることができる。0はランダムな値、正のnはn番目の値(例えば、最初の値は1)、負の数は適格なすべての値を抽出する。一般にForEachコントローラと組み合わせて使用される。

DefaultValue。データが一致しない場合、参照変数がデフォルト値を返すので、デバッグに便利である。通常、その後の論理的な判断に使用され、通常は英大文字の組み合わせの特定の意味などで使用される。ERROR

正規表現の構文

1 \bhib : hiという文字のみにマッチします。, \b は位置を表し、最初の \b は単語の開始位置、2番目の \b は単語の終了位置を表します。 2 \bhib.*bthisb : hiという文字とその中の任意の文字とthisという文字にマッチします。r.t は rat, rut, rt にマッチするが root にはマッチしない4 * : 任意の数のメタ文字を表し、文字でも位置でもなく、数を表します。その文字の直前にある0個以上の文字にマッチします。例えば、Perlの正規表現 . * は任意の文字の任意の数にマッチすることを意味します5 \d : 任意の数 [0-9]6 を表します \d+ : 1つ以上の連続した数にマッチします。ここで+は*と同様のメタキャラクタですが、*は任意の数の繰り返し(0回の場合もある)にマッチし、+は1回以上の繰り返しにマッチします7。 \D : 数字以外の任意の文字 [^0-9] にマッチします \w : 8 \d{2} : 任意の数字が2回現れることを意味し、 \dd と同等9 \s : 空白文字にマッチします。スペース、改行、タブ(タブ)、中国の全角スペースも含まれます。つまり、空白 [ \rtธิ์ ]10 \S: 空白文字以外の任意の文字にマッチします。That is, non-blank [^ ╱╱╱]11 ╱W : Match letters, numbers, underscores or Chinese characters. That is any word character [_0-9a-zA-Z]12୧W: Match any character that is not a letter, number, underscore, and Chinese character. That is any non-word character [^_0-9a-zA-Z]13 例えば、Perlの正規表現^Wheninは、文字列の先頭 "Wheninthecourseofhumanvents" にマッチしますが、 "WhatandWheninthe"16$ : 文字列の末尾にマッチします、例.d{2,5}$は、2桁(含)から5桁(含)までの数字であることを意味する。

例えば、Perl の正規表現 weasel$ は、文字列 "He'saweasel" の末尾にマッチしますが、文字列 "Theyareabunchofweasels." にはマッチしません。

17 : エスケープ文字、メタ文字を検索する場合はエスケープ文字を使用する。

は、ここに挙げたメタキャラクタを通常の文字と同じようにマッチングさせるために使用されます。例えば、Perl の正規表現である \$ は行末の代わりにドル記号にマッチし、同様に Perl の正規表現である \.はあらゆる文字のワイルドカードの代わりにドット文字にマッチするように使われます。

18 繰り返し回数の記述。* は0回以上、+は1回以上、?は0回または1回、{n}はn回、{n,}はn~何回、{n,m}はn~m回繰り返す 19 [], [c1-c2], [^c1-c2]: 括弧内の文字がマッチします、例えば [ab] は a または b 文字、 [,?] はカンマまたは疑問符がマッチします。

例えば、Perl の正規表現 r[aou]t は rat、rot、および rut にマッチしますが、ret にはマッチしません。

Perlの正規表現[0-9]は任意の数字文字にマッチすることができます。

例えば、Perl の正規表現 [A-Za-z] は、任意の大文字と小文字にマッチします。

例えば、Perl の正規表現 [^269A-Z] は、2、6、9、およびすべての大文字を除くすべての文字にマッチします。

20 [a-z0-9A-Z] : は \w に相当する。
21|マッチ・オア・ルール:マッチする2つの条件に対して、論理的に"or"(Or)演算を行うルール。たとえば、以下のようになります。\(0\d{2}\)[-]? \d{8}|(0}d{3})[- ]\d{7}|0}d{2}[- ]?\d{8}|0d{3}[- ]?\d{7} これは電話番号にマッチするもので、例:012-56236562, 0536-1234567, (0536)-1234567, 01212345678
例えば、Perl の正規表現 (him|her) は "itbelongstohim" と "itbelongstoher" にマッチしますが、 "itbelongstothem." にマッチしません。注:このメタキャラクタは、すべてのソフトウェアでサポートされているわけではありません。
22 (): グループ化、255.134.123.123 または 193.168.1.1 にマッチする式です。(([01]? \d\d?|25[0-5]|2[0-4]\d)\.) {3}([01]? \d\d?|25[0-5]|2[0-4]\d)
23 \B : 単語の先頭でも末尾でもない位置にマッチングします。
24 + :直前に来る文字の1つ以上にマッチします。例えば、Perlの正規表現9+は、9、99、999、98、93dsf、9......などにマッチします。注:このメタキャラクタは、すべてのソフトウェアでサポートされているわけではありません。
25 ? :直前に来る文字の0または1にマッチします。注:このメタキャラクタは、すべてのソフトウェアでサポートされているわけではありません。
26 [^x] : x以外の文字にマッチする
27 [^aeiou] : aeiou以外の文字にマッチします。
28 (? <word>\w+) または (?' word'\w+) 後方参照は、前のグループのいずれかに一致したテキストを繰り返し検索するために使用されます。グループ番号の割り当て処理は左から右へ2回行われます。1回目は無名グループのスキャン、2回目は名前付きグループのスキャンを行うため、名前付きグループのグループ番号は常に無名グループのグループ番号より大きくなります。
29 グループ名の命名にいくつかの構文がある。(exp) は exp 式にマッチし、マッチしたテキストを自動的にグループに割り当てます。
(? <name> exp) は exp 式のテキスト内容を名前グループ名にマッチさせますが、これは (?' name'exp) とも書けます; (? :exp) は exp 式の内容にマッチしますが、マッチしたテキストを取り込まず、マッチしたテキストにグループ番号も割り当てません; (? =exp) expの前の位置にマッチします; (? <=exp) expの後の位置にマッチします; (? !exp) expの後にない位置にマッチします; (? <!exp) expの前のexpでない位置にマッチします; (? #comment) 正規表現に影響しないコメントを追加します。
30 (? =exp) と (? <=exp) はゼロ幅のアサーションで、(? =exp) はゼロ幅の正の予測事前アサーション、(? <=exp) はゼロ幅の正の回顧的事後アサーションである。(? =exp)は、expアサーション式が出現する位置からアサーション前のコンテンツにマッチ することを意味し、例えば \bw+(?=er
31 {i}, {i,}, {i,j}: 先行する式で定義される文字のうち、指定された数にマッチします。例えば、Perlの正規表現A[0-9] \{3} は、A123、A348などのように、数字3文字と文字"A"がちょうど続く文字列にマッチしますが、A1234にはマッチしません。Perl の正規表現 [0-9]\{4,\} は、4文字以上の連続した数字にマッチします。-9]\{4,6} は、任意の 4,5,6 個の連続した数字にマッチします。注:このメタキャラクタは、すべてのソフトウェアでサポートされているわけではありません。
32 \bau*b: aで始まる単語をマッチングします。

文法の詳細については、以下をご参照ください。 http://deerchao.net/tutorials/regex/regex.htm

jmeter-regular-expressionsの記事はこちらです。jmeter-regular-expressionsについては、スクリプトハウスの過去記事を検索するか、引き続き以下の関連記事を閲覧してください。