目次
序文
Jmeter 正規表現エクストラクターは、Jmeter ポスト プロセッサー (ポスト プロセッサー) の一種で、サンプラーによって要求された結果を正規表現の形式で読み取るために使用されます。
1. Jmeter正規表現抽出ツール
1.機能
JSON エクストラクターは応答コンテンツのみを抽出できますが、正規表現エクストラクターは応答ヘッダー、リクエスト ヘッダーの値、そしてもちろん応答コンテンツも抽出できます。
2.パラメータの詳細説明
- 適用先: アプリケーション スコープ。デフォルトのメイン サンプルのみを選択します。
- 確認する応答フィールド: 抽出するフィールドの範囲
- 本文: 応答本文。応答ヘッダーは含まれません。最も一般的に使用されます。
- body(unscaped): 応答本文、すべての HTML エスケープ文字を置き換えます; 推奨されません
- 本文をドキュメントとして: さまざまな種類のファイルからテキストを抽出します。パフォーマンスに影響します。
- 情報ヘッダ:レスポンスヘッダ
- Requeste Headers: リクエストヘッダー
- URL:URL
- レスポンスコード: レスポンスコード
- 応答メッセージ:応答メッセージ
- 参照名: 抽出された値を受け取る変数名、* を渡す必要があります
- 正規表現: 正規表現
- テンプレート: 見つかった一致から文字列を作成するテンプレート
- 正規表現に複数の抽出結果がある場合、抽出結果は配列の形式になります。
- テンプレート 1、2... は、解析された値を 1 から変数に割り当てることを意味します。
- 0 は式全体が一致するものを意味します
- 結果が 1 つしかない場合は 1 つだけです
- 一致する数値 (0 はランダムを表します): どの値を取るか (0: ランダム、デフォルト、すべて -1、最初の値は 1)、必須ではありません
- デフォルト値: デフォルト値。一致する値がない場合にこの値が使用されます。必須ではありません。
- 空のデフォルト値を使用する: チェックした後、値を抽出できない場合は、空の文字列が返されます。
作成した変数の名前 (正規表現で取得した値を変数に格納し、変数名を指定します)
正規表現を使用してリクエストの戻り情報から複数のフィールドを取得する場合、ここに A 変数のみを入力することもできます。下に示された。
このとき、切り取った複数の値が変数名 _g1 と変数名 _g2 として使用されます。詳細は下図を参照してください。これは私自身の特別な実験のスクリーンショットです。
- 変数 = 上図の最初の行に示すように、スペースで区切られたインターセプトされたすべてのフィールド。
- Variable_g: インターセプトされた変数の数を表す必要がありますか?
- 変数 _g0: 正規表現に従って一致した完全なフィールド (インターセプト前)。
- Variable_g1: 使用時にインターセプトされる最初のフィールドは ${variable name_g1} です。
- Variable_g2: 以下の図に示すように、${variable name_g2} を使用するときにインターセプトされる 2 番目のフィールド。
正規表現
Baidu は在线正则表达式
正規表現の練習に使用できます。オンラインの正規 URLは次のとおりです。
テンプレート($1$は最初の正規表現で一致したデータを取得するという意味です、確認)
テンプレートの意味は、抽出結果の返却形式テンプレート(正規表現(に設定した場合))であることは理解しています。 「errmsg」:「(.*)」、「access_token」:「(.+?)」など、複数の抽出ポイントが使用されている場合、抽出された複数の値がユーザーに返されます。テンプレート Template で設定された形式)。
現時点で他のオンライン ビジネス ブログから得ている情報では、抽出子の正規表現に複数の抽出ポイントが入力されている場合 (例: "errmsg": "(.*)"、"access_token": "(.+) ? )"。Jmeter の場合、この式は 2 つの正規表現、"errmsg":"(.*)"、"access_token":、および"access_token":"(.+ ?)" として扱われます。次のように入力できます。テンプレート内の $1$、$2$ など。$1$ は最初の正規表現 "errmsg":"(.*)"、"access_token": のインターセプト結果を表し、$2$ は最初の正規表現を表します。 2 つの正規表現、"access_token": "(.+?)" など (注: テンプレートに埋め込まれた $1$ と $2$ の間にスペースがある場合、抽出された (.*) と ( .+?) も分離されます。対応するスペースで区切ります)。
$0$ は全文一致を意味し、$1$ $2$ は最初と 2 番目の抽出ポイントを同時に取得することを意味します。
一致番号 (一致成功)
デフォルト値 (一致が見つからなかった場合は、この値を使用して戻ります)
パラメーターがわかりにくいので例をあげてみましょう~
3. 正規表現抽出機能の実装
このアドレスのインターフェイスを使用してテストしてみましょう。
YesApi Xiaobai 無料インターフェイス | Guochuangyun、1 つのアカウント、インターフェイス開発を担当
2. 入門例
会員ログインインターフェースの応答内容:
{
"ret": 200,
"data": {
"err_code": 0,
"err_msg": "",
"uuid": "F118DD335346CE9D7094C97190587108",
"token": "C1CA708E57F0C33E548745B0D82ADA2A800D886D17BA44261459C39C52376C0D",
"role": "user"
},
"msg": "V3.3.0 YesApi App.User.Login 2022-03-20 10:25:40 hd215"
}
正規表現エクストラクター - トークンの抽出:
正規表現エクストラクター - UUID を抽出します。
- 正規表現-----
( )
正規表現の解析に使用される一致ルールを内部に記述します - 正規表現----- は、
.*?
任意の長さの任意の文字に一致することを意味し、最も一般的に使用される正規表現でもあります。 - 一般に (.+?) と (.*?) は使用シナリオの 80% を満たすことができます。
他のインターフェースは正規表現を呼び出して変数を抽出します。
3. 高度な例
テストインターフェイス: http://api.yesapi.cn/docs-api-App.User.GetList.html
応答内容:
{
"ret":200,
"data":
{
"err_code":0,
"err_msg":"",
"users":
[
{
"uuid":"F118DD335346CE9D7094C97190587108",
"username":"xey032001",
"role":"user",
"role_desc":"普通会员",
"status":0,
"status_desc":"正常",
"reg_time":"2022-03-20 10:25:40",
"ext_info":
{
"yesapi_avatar":"",
"yesapi_nickname":"",
"yesapi_email":"",
"yesapi_sex":"",
"yesapi_real_name":"",
"yesapi_points":0,
"yesapi_reg_source":"",
"yesapi_reg_note":"",
"yesapi_mobile":"",
"yesapi_expiration_time":""
}
},
{
"uuid":"AAC71046CFA51B8A55D4367652791D66",
"username":"xey04",
"role":"user",
"role_desc":"普通会员",
"status":0,
"status_desc":"正常",
"reg_time":"2022-03-19 13:22:24",
"ext_info":
{
"yesapi_avatar":"",
"yesapi_nickname":"",
"yesapi_email":"",
"yesapi_sex":"",
"yesapi_real_name":"",
"yesapi_points":0,
"yesapi_reg_source":"",
"yesapi_reg_note":"",
"yesapi_mobile":"",
"yesapi_expiration_time":""
}
},
{
"uuid":"97F22D1CD99D17C2CF29510C728F6570",
"username":"xey03",
"role":"user",
"role_desc":"普通会员",
"status":0,
"status_desc":"正常",
"reg_time":"2022-03-19 13:18:56",
"ext_info":
{
"yesapi_avatar":"",
"yesapi_nickname":"",
"yesapi_email":"",
"yesapi_sex":"",
"yesapi_real_name":"",
"yesapi_points":0,
"yesapi_reg_source":"",
"yesapi_reg_note":"",
"yesapi_mobile":"",
"yesapi_expiration_time":""
}
},
{
"uuid":"770A6910AF264AEB73F6ECAFEB5BBFB6",
"username":"xey02",
"role":"user",
"role_desc":"普通会员",
"status":0,
"status_desc":"正常",
"reg_time":"2022-03-19 13:15:35",
"ext_info":
{
"yesapi_avatar":"",
"yesapi_nickname":"",
"yesapi_email":"",
"yesapi_sex":"",
"yesapi_real_name":"",
"yesapi_points":0,
"yesapi_reg_source":"",
"yesapi_reg_note":"",
"yesapi_mobile":"",
"yesapi_expiration_time":""
}
},
{
"uuid":"690815A62298F01009010BA062773A9F",
"username":"xey01",
"role":"user",
"role_desc":"普通会员",
"status":0,
"status_desc":"正常",
"reg_time":"2022-03-19 13:14:03",
"ext_info":
{
"yesapi_avatar":"",
"yesapi_nickname":"",
"yesapi_email":"",
"yesapi_sex":"",
"yesapi_real_name":"",
"yesapi_points":0,
"yesapi_reg_source":"",
"yesapi_reg_note":"",
"yesapi_mobile":"",
"yesapi_expiration_time":""
}
},
{
"uuid":"24249E71ABBD72D7C1DE8B3E95A0FBBE",
"username":"xey",
"role":"user",
"role_desc":"普通会员",
"status":0,
"status_desc":"正常",
"reg_time":"2022-03-19 13:08:25",
"ext_info":
{
"yesapi_avatar":"",
"yesapi_nickname":"",
"yesapi_email":"",
"yesapi_sex":"",
"yesapi_real_name":"",
"yesapi_points":0,
"yesapi_reg_source":"",
"yesapi_reg_note":"",
"yesapi_mobile":"",
"yesapi_expiration_time":""
}
}
],
"total":6
},
"msg":"V3.3.0 YesApi App.User.GetList 2022-03-20 11:16:58 hd215"
}
1) 値を抽出します。
正規表現から抽出される値は 1 つだけであり、一致する数値は -1 ではありません。
1. テンプレートが記入されていない
PS: 一致する番号に 1 を入力します。これは、複数の UUID がある場合、最初の UUID が一致することを意味します。これは、JSON エクストラクターと同じです。
試験結果:
uuid=
uuid_g=1
uuid_g0="uuid":"F118DD335346CE9D7094C97190587108"
uuid_g1=F118DD335346CE9D7094C97190587108
ご覧のとおり、正規表現が値に一致しても、テンプレートが入力されていない場合は、空が返されます。
2. テンプレートに $0$ を書き込みます
試験結果:
uuid="uuid":"F118DD335346CE9D7094C97190587108"
uuid_g=1
uuid_g0="uuid":"F118DD335346CE9D7094C97190587108"
uuid_g1=F118DD335346CE9D7094C97190587108
テンプレートに $0$ が入力されている場合、uuid は uuid_g0 であることがわかります。
3. テンプレートに $1$ を書き込みます
試験結果:
uuid=F118DD335346CE9D7094C97190587108
uuid_g=1
uuid_g0="uuid":"F118DD335346CE9D7094C97190587108"
uuid_g1=F118DD335346CE9D7094C97190587108
テンプレートが $1$ と書き込んだ場合、uuid は uuid_g1 であることがわかります。
4. テンプレートに $2$ を書き込みます (存在しません)
試験結果:
uuid=null
uuid_g=1
uuid_g0="uuid":"F118DD335346CE9D7094C97190587108"
uuid_g1=F118DD335346CE9D7094C97190587108
ご覧のとおり、テンプレートが存在しない場合、uuid は null になります (空のデフォルト値を使用するがチェックされている場合でも、null が返されます)。
2) 複数の値を抽出します。
試験結果:
uuid_1=F118DD335346CE9D7094C97190587108
uuid_1_g=1
uuid_1_g0="uuid":"F118DD335346CE9D7094C97190587108"
uuid_1_g1=F118DD335346CE9D7094C97190587108
uuid_2=AAC71046CFA51B8A55D4367652791D66
uuid_2_g=1
uuid_2_g0="uuid":"AAC71046CFA51B8A55D4367652791D66"
uuid_2_g1=AAC71046CFA51B8A55D4367652791D66
uuid_3=97F22D1CD99D17C2CF29510C728F6570
uuid_3_g=1
uuid_3_g0="uuid":"97F22D1CD99D17C2CF29510C728F6570"
uuid_3_g1=97F22D1CD99D17C2CF29510C728F6570
uuid_4=770A6910AF264AEB73F6ECAFEB5BBFB6
uuid_4_g=1
uuid_4_g0="uuid":"770A6910AF264AEB73F6ECAFEB5BBFB6"
uuid_4_g1=770A6910AF264AEB73F6ECAFEB5BBFB6
uuid_5=690815A62298F01009010BA062773A9F
uuid_5_g=1
uuid_5_g0="uuid":"690815A62298F01009010BA062773A9F"
uuid_5_g1=690815A62298F01009010BA062773A9F
uuid_6=24249E71ABBD72D7C1DE8B3E95A0FBBE
uuid_6_g=1
uuid_6_g0="uuid":"24249E71ABBD72D7C1DE8B3E95A0FBBE"
uuid_6_g1=24249E71ABBD72D7C1DE8B3E95A0FBBE
uuid_matchNr=6
正規表現には複数の ( ) があります。
1. テンプレートは空です。
試験結果:
uuid=
uuid_g=2
uuid_g0="uuid":"F118DD335346CE9D7094C97190587108","username":"xey032001"
uuid_g1=F118DD335346CE9D7094C97190587108
uuid_g2=xey032001
テンプレートが空の場合、値を取得できず、uuid が空であることがわかります。
2. テンプレートは 1 つだけです:
試験結果:
uuid=F118DD335346CE9D7094C97190587108
uuid_g=2
uuid_g0="uuid":"F118DD335346CE9D7094C97190587108",
"username":"xey032001"
uuid_g1=F118DD335346CE9D7094C97190587108
uuid_g2=xey032001
テンプレートが 1 つしかない場合、uuid_g1 が取得されることがわかります。
3. 2 つのテンプレートがあります。
試験結果:
uuid=F118DD335346CE9D7094C971q90587108,
xey032001
uuid_g=2
uuid_g0="uuid":"F118DD335346CE9D7094C97190587108",
"username":"xey032001"
uuid_g1=F118DD335346CE9D7094C97190587108
uuid_g2=xey032001
ご覧のとおり、uuid は uuid_g1 と uuid_g2 の 2 つの値をとり、それらはカンマで区切られています。
知らせ:
- 入力する必要があるのは、1 つの参照名、一致する番号、およびデフォルト値のみであり、正規表現の数を一致させる必要はありません。
- テンプレートでも使用されている限り、-スプライシングを使用することもできます。または、-スプライシングを使用することもできます。たとえば、テンプレートに次のように入力します: 1-2q
参考記事:
Jmeter の正規表現 extractor_jmeter の正規表現 extractor_Long Junheng のブログ - CSDN ブログ