jMeter RegEx JSON响应
我已经阅读了一些关于jMeter正则表达式提取的教程,但它不起作用。我使用的是JMeter2.7 我有一个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,
{"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">"id":(.+?,)</stringProp>
“id”:(.+?,)
并替换为
<stringProp name="RegexExtractor.regex">"id":(\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());