【问题标题】:Jmeter Using regex in Groovy to find a substringJmeter 在 Groovy 中使用正则表达式查找子字符串
【发布时间】:2018-06-13 12:29:28
【问题描述】:

在 Jmeter 中,我使用带有 Groovy 的 JSR223PostProcessor,HTTP 响应是一个 JSON 块,如下所示:

{
  "A1": 283,
  "XYZ": "123@192.168.12.12",
  "A3": "",
  "A4": {
  "A6": 1,
 }
}

我有兴趣搜索-->

"XYZ": "*@*",

我可能有也可能没有那行,并注意 * 可以是任何东西 目前我正在这样做并且它有效:

if (response.contains("@"))

但我喜欢更优雅的方式-->

"XYZ":{any white space}"{any set of digits}@{anychars}",

如何在 Groovy 中做到这一点?

【问题讨论】:

    标签: groovy jmeter


    【解决方案1】:

    我认为您在这里不需要正则表达式,我宁愿建议使用 JsonSlurper 并仅依赖 XYZ 属性存在,相关的 Groovy 代码将类似于:

    def xyz = new groovy.json.JsonSlurper().parse(prev.getResponseData()).XYZ
    if (xyz == null) {
        log.info('XYZ string was not found')
    }
    else {
        log.info('XYZ value is: ' + xyz)
    }
    
    • 如果字符串不存在,您将收到not found 消息:

      • 如果字符串存在,你会得到它的值:

    更多信息:

    【讨论】:

    • 对不起..我应该更清楚,我可以有另一种情况,我有这样的 XYZ:“XYZ”:“123”,我需要小心不要将其包含在我的发现中.
    【解决方案2】:

    您可以使用find operator:

    def response = prev.responseDataAsString
    
    if ( response =~ /"XYZ":\s*"\d*@.*"/ ) {
        println "found it!"
    }
    

    【讨论】:

    • 嗨 Ian : if ( response =~ /"XYZ":\s*"\d*@.*"/ ) { 没用。我再次尝试了我的旧方法并找到了它:
    • 我假设response 是作为String 的整个JSON 响应。我认为你必须使用 prev.getResponseDataAsString() 来获得它。
    • @user3556956 很高兴听到这个消息。如果您将此标记为正确答案,将不胜感激。
    猜你喜欢
    • 1970-01-01
    • 2013-07-06
    • 1970-01-01
    • 2012-12-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-16
    • 2012-05-12
    相关资源
    最近更新 更多