jMeter RegEx JSON响应

jMeter RegEx JSON响应,regex,jmeter,Regex,Jmeter,我已经阅读了一些关于jMeter正则表达式提取的教程,但它不起作用。我使用的是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,

我已经阅读了一些关于jMeter正则表达式提取的教程,但它不起作用。我使用的是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}}
这个正则表达式提取器:“id”:(+?),这是jMeter的屏幕截图

对于提取,我得到的是
$new\u address\u id
=2,而不是26。有什么想法吗

2012年6月26日更新

谢谢你的建议。这很有帮助。最后我把它改成:
“id:(\d+)

我还在JMX文件中为

<stringProp name="RegexExtractor.regex">&quot;id&quot;:(.+?,)</stringProp>
“id”:(.+?,)
并替换为

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

这使得修复很快。谢谢

您使用的是
+?
,这意味着:

  • -匹配任何非换行字符的单个字符(默认情况下,可以使用
    s
    标志进行更改)
  • +
    -在一次和无限次之间匹配前面的字符
  • -尽可能少的次数(懒惰)
因此,当它要匹配
“id”:26
时,模式只匹配
+?
2
而不是
26

要解决此问题,请尝试比此更好的方法:

  ("id":\d+)\b
意味着

意味着

表示



希望这能有所帮助。

我建议您看看:

本节(JSON UTIL(JSON路径断言、JSON路径提取器、JSON格式化程序))特别适用于本例。这些是我公司开发的jmeter工具集,非常有用

让我们以你的情况为例。测试用例如下所示:

所以dummy sample返回响应,就像您指定的响应一样:

{"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}]}
列表中有两个地址es,一个id为26,另一个id为6。Json路径
$.address.id
应该返回这两个id。我刚刚看到了sampler源代码,无法获取计数,但是您可以通过向样本中添加另一个后处理器来实现,即
BSF sampler
,然后添加以下代码:

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

其中,
${add}
是存储
$.address.id

结果的任何变量,在jmeter中选择JSON响应的最佳方法是执行类似于(?m)“nodeRef”的操作:workspace://SpacesStore/idSpaceStore“,\s*“名称”:“用于测试的文件夹\u-1372432881900”

(?m)-表示开始将regexp视为面向多行的
(\s*)-表示任何字符

谢谢,这非常有用。ant,这非常有趣。然而,由于某种原因,我无法让mvn编译该文件。有一个JAR文件可以不用编译就下载吗?@Dean您可能正在使用maven 2来构建项目。您应该使用maven 3,很抱歉在github页面中没有提到我要更改的内容that@Dean你能建吗?嗨,ant,对不起,在正则表达式运行之后,我没有机会建。当我做一些更复杂的检查时,我会研究它。我有OSX Lion和RailsInstaller。它建造起来很容易。我喜欢这些部件。但是,我无法在此处找到有关各种组件的更多信息:。例如,JSON提取组件上没有任何内容。
// ("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»
{"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}}
$.address.id
{"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}]}
vars.put("ADDRESS_COUNT", "${__javaScript('${add}'.split('\,').length,)}".toString());