8

jMeter RegEx抽出に関するチュートリアルをいくつか読みましたが、機能していません。私はjMeter2.7を使用しています。

私はこのJSONを持っています:

{"address":{"id":26,"user_id":1,"genre":"billing","first_name":"testFN1","last_name":"testLN1","company":null,"street1":null,"street2":null,"city":null,"state":"DC","zip":null,"country":null,"country_iso2":null,"phone1":"32432424322","phone2":null}}

そしてこのRegExExtractor: "id" :(。+?)、これがjMeterのスクリーンショットです

ここに画像の説明を入力してください

抽出の場合、26ではなく$new_address_id= 2になります。何か案は?

2012年6月26日更新

Cylianに提案してくれてありがとう。とても助かります。私はそれを次のように変更することになりました:"id":(\d+)

また、JMXファイルで置換を見つけました

<stringProp name="RegexExtractor.regex">&quot;id&quot;:(.+?,)</stringProp>

と置き換えます

<stringProp name="RegexExtractor.regex">&quot;id&quot;:(\d+)</stringProp>

これですぐに修正されました。ありがとう!

4

3 に答える 3

14

これは、次のこと.+?を意味します。

  • .-改行文字ではない任意の1文字に一致します(デフォルト、sフラグを使用して変更できます)
  • +-前の文字を1回から無制限に一致させる
  • ?-できるだけ少ない回数(怠惰な)

したがって、"id":26パターンは一致.+?2ますが、の代わりにのみ一致し26ます。

この問題を修正するには、これよりも優れた方法を試してください。

  ("id":\d+)\b

意味

// ("id":\d+)\b
// 
// Options: case insensitive
// 
// Match the regular expression below and capture its match into backreference number 1 «("id":\d+)»
//    Match the characters “"id":” literally «"id":»
//    Match a single digit 0..9 «\d+»
//       Between one and unlimited times, as many times as possible, giving back as needed (greedy) «+»
// Assert position at a word boundary «\b»

また

  ("id":[^,:]+)\b

意味

// ("id":[^,:]+)\b
// 
// Options: case insensitive
// 
// Match the regular expression below and capture its match into backreference number 1 «("id":[^,:]+)»
//    Match the characters “"id":” literally «"id":»
//    Match a single character NOT present in the list “,:” «[^,:]+»
//       Between one and unlimited times, as many times as possible, giving back as needed (greedy) «+»
// Assert position at a word boundary «\b»

また

("id":\S+)\b

意味

// ("id":\S+)\b
// 
// Options: case insensitive
// 
// Match the regular expression below and capture its match into backreference number 1 «("id":\S+)»
//    Match the characters “"id":” literally «"id":»
//    Match a single character that is a “non-whitespace character” «\S+»
//       Between one and unlimited times, as many times as possible, giving back as needed (greedy) «+»
// Assert position at a word boundary «\b»

お役に立てれば。

于 2012-06-16T05:07:08.757 に答える
12

私はあなたが見てみることをお勧めします:

http://jmeter-plugins.org/wiki/JSONPathExtractor/

このセクション(JSON utils(JSON Path Assertion、JSON Path Extractor、JSON Formatter))は、特にこの場合に使用されます。これらは私の会社で開発されたjmeterツールのセットであり、非常に便利です。

例としてあなたのケースを取り上げましょう。テストケースは次のようになります。

ここに画像の説明を入力してください

したがって、ダミーサンプルは、指定したものと同じように応答を返します。

{"address":{"id":26,"user_id":1,"genre":"billing","first_name":"testFN1","last_name":"testLN1","company":null,"street1":null,"street2":null,"city":null,"state":"DC","zip":null,"country":null,"country_iso2":null,"phone1":"32432424322","phone2":null}}

JSON抽出は非常に簡単です:

$.address.id

そして、そこには派手な正規表現は必要ありません。結果は26です(これがデバッグサンプラーに表示されます)。

コメントの質問からの更新:

値のリストがある場合、つまり:

{"address":[{"id":26,"user_id":1,"genre":"billing","first_name":"testFN1","last_name":"testLN1","company":null,"street1":null,"street2":null,"city":null,"state":"DC","zip":null,"country":null,"country_iso2":null,"phone1":"32432424322","phone2":null}, {"id":6,"user_id":1,"genre":"billing","first_name":"testFN1","last_name":"testLN1","company":null,"street1":null,"street2":null,"city":null,"state":"DC","zip":null,"country":null,"country_iso2":null,"phone1":"32432424322","phone2":null}]}

2つのアドレス-es、1つはID 26、もう1つは6のリスト。Jsonパス$.address.idはこれらのIDの両方を返す必要があります。サンプラーのソースコードを見たばかりで、カウントを取得することはできませんが、サンプルに別のポストプロセッサーをBSF Sampler追加し、このコードを追加することで、カウントを取得できます。

vars.put("ADDRESS_COUNT", "${__javaScript('${add}'.split('\,').length,)}".toString());

${add}の結果を保存した変数はどこにありますか$.address.id

于 2012-06-26T09:05:24.167 に答える
0

jmeterでJSON応答を選択する最良の方法は、(?m) "nodeRef": "workspace:// SpacesStore / idSpaceStore"、\ s * "name": "folder_for_testing-1372432881900"、

(?m)-正規表現を複数行指向として扱い始めることを意味します(\ s *)-任意の文字を意味します

于 2013-06-28T16:05:35.973 に答える