Skip to content

MS_JMeterRegex

nishi_74322014 edited this page Aug 21, 2026 · 1 revision

Jmeterの正規表現

概要

JMeter では、フィルタや抽出などで正規表現
使用することが多い。

正規表現

Perl5 互換の正規表現を使用できる模様
(なお、.NET Framework の正規表現も Perl5 互換)。

補足(実装の系譜): JMeter が使っているのは
Apache ORO(Perl5 互換の Java 実装)である。
Java 標準の java.util.regex とも .NET の System.Text.RegularExpressions とも
別の実装であり、細部の挙動が異なることがある。

このため、

  • 他の言語で書いた正規表現をそのまま持ち込まない
  • JMeter 上で実際に動かして確認する

のが安全である。
なお、JSR223 サンプラー等で Java の正規表現を使う場合は
java.util.regex になるため、こちらとは別物になる。

フィルタ

  • .* は、任意の 0 文字以上の文字列を表すメタ文字列。
  • 必要に応じて \ でエスケープする。

ホスト名

ホスト名は local\.com:80/.* などと指定する。

拡張子

拡張子は .*\.html などと指定する。

補足(フィルタの用途): これは主に
HTTP(S) テスト スクリプト レコーダー(プロキシ記録)の
「含めるパターン」「除外するパターン」で使う。

記録時は画像・CSS・JS などへのリクエストも大量に混ざるため、

  • 除外: .*\.(png|gif|jpg|css|js|ico|woff2?)
  • 含める: 対象アプリのホストのみ

と絞らないと、シナリオが読めなくなる。
なお、静的ファイルを完全に除外してよいかは目的次第で、
実ユーザに近い負荷を再現したいなら 「HTTP リクエスト」の
「埋め込みリソースを取得する」を使って別途表現する。

抽出

  • 抽出系の後処理(Jmeter用語)中の
    「正規表現抽出」を使用して抽出を行う。

  • 以下は、「正規表現抽出」固有の設定項目
    (共通的な設定項目はJmeterによる可変値の追跡

  • テンプレート / 一致番号への指定が解り難いが、既定値は以下で OK。

    • テンプレート : $1$
    • 一致番号 : 1

移行メモ(誤字): 元ページの「共通敵な設定項目」は
「共通な設定項目」の誤記。

正規表現

  • (.+?) は、任意の 1 文字以上の文字列を抽出するメタ文字列。

  • \s+? は、1 文字以上のスペースやタブなどの空白文字の最短マッチのメタ文字列。

  • 必要に応じて \ でエスケープする。

    • 空白を含まない。
      • HTML
<input type="text" name="xxxx" value="yyyy">
- 正規表現
name="xxxx" value="(.+?)"
  • Inner テキストなど、空白を含む場合。
    • HTML
<XXXX name="xxxx">
 <YYYY>yyyy</YYYY>
</XXXX>
- 正規表現
<XXXX name="xxxx">\s+?<YYYY>(.+?)</YYYY>

補足(? を付ける理由): +* は既定で**最長一致(greedy)であり、
可能な限り長くマッチしようとする。
+? / *?? を付けると
最短一致(lazy)**になる。

<td>A</td><td>B</td>

<td>(.+)</td>   → "A</td><td>B" にマッチ(長すぎる)
<td>(.+?)</td>  → "A" にマッチ(意図どおり)

HTML から値を 1 つだけ取り出す用途では、
原則として最短一致を使う

補足(ViewState を抽出する例): ASP.NET ViewState
Base64 で長大な文字列になるため、実務では以下のような指定になる。

id="__VIEWSTATE" value="(.*?)"

抽出した値は HTTP リクエストのパラメータに ${参照名} として埋める。
なお、+/= を含むため、
URL エンコードの有無(パラメータの「値をエンコードする」チェック)で
動かなくなることがある点に注意。

テンプレート

マッチする文字列グループが複数ある場合、

  • 参照名(Jmeterによる可変値の追跡)で、
    抽出する部分を $n$ で指定する。
  • n 部分を数値で指定する。先頭が 1 となる。
  • $0$ は、式全体が一致するものを表す。

補足: テンプレートは複数のグループを連結することもできる。

正規表現: name="(.+?)" value="(.+?)"
テンプレート: $1$=$2$      → 「xxxx=yyyy」が変数に入る

一致番号

  • マッチする文字列グループが 1 つになる場合、省略可能。

  • マッチする文字列グループが複数になる場合、以下のように記入する。

    • 1 指定
      正数指定、n 番目のマッチを選択。

      • 参照名
        テンプレートの値

      • 参照名_g
        マッチした文字列グループ数

      • 参照名_gn
        マッチした文字列グループ値(n = 0,1,2)

    • 0 指定
      ランダムに一致を選択する。

    • -1 指定
      負数指定、ForEach コントローラと一緒に使用。

      • 参照名
        常にデフォルト値に設定

      • 参照名_matchNr
        見つかった一致の数。

      • 参照名_n
        テンプレートによって生成された文字列(n = 1,2,3)

      • 参照名_n_gm
        m = 0,1,2 - 一致するグループ n

      • 参照名_gn
        設定されていません

補足(3つのモードの使い分け):

一致番号 挙動 用途
正数(1, 2 …) n 番目のマッチを取る 通常。ViewState など 1 つに決まるもの
0 マッチの中からランダムに 1 つ 一覧から任意の 1 件を選ぶ(商品 ID など)。負荷を散らせる
-1 全マッチを配列的に取得 ForEach コントローラで全件を順に処理する

0 指定は、負荷テストで
全ユーザが同じレコードにアクセスしてキャッシュに乗ってしまうのを
避けたい場合に有効である。

初期値

デバッグを容易にするため、not-provided などの文字列を入力しておくと良い。

補足: これは重要な実践である。
初期値を空のままにすると、抽出に失敗しても
後続のリクエストがそれらしく流れてしまい、失敗に気付けない
明示的な文字列を入れておけば、
リクエスト内容やアサーションから即座に検知できる
Jmeterによる可変値の追跡の補足も参照)。

参考

正規表現

正規表現


Tags: 移行, テスト, ツール類

NetDevInfraWiki

マイクロソフト系技術情報 Wiki
Open 棟梁 Wiki

(未着手)

開発基盤部会 Wiki

移行管理: DONETODO

Clone this wiki locally