【问题标题】:How to extract the Substring from URL present in JSON response using JMeter如何使用 JMeter 从 JSON 响应中存在的 URL 中提取子字符串
【发布时间】:2020-07-24 23:40:57
【问题描述】:

我从 HTTP 请求收到了以下 JSON 响应。我想从 JSON 响应中存在的节点“url”中提取参数。

{"Id":"7S9LyBqyv1e0trKrVuP1OOZGHeg","Url":"https://abcd.com:443/u/custom-response?prov=34545sdf-9013e2e61e66&realmeId=%2Fxxxx","realmeId":"/abcd"}

在上面的 JSON 响应中,我想使用 JMeter 检索“prov”的值,即 34545sdf-9013e2e61e66。 尝试的解决方案:使用 Beanshell 读取响应。

String url = vars.get("successURL");
vars.put("responseURL",url.toString());
responseURL = responseURL.replaceAll(":"," ");
log.info("String URL "+responseURL.toString());

错误信息:

attempt to resolve method: toString() on undefined variable or class name: responseURL

【问题讨论】:

    标签: json jmeter jmeter-5.0


    【解决方案1】:

    我认为你需要更新这一行:

    responseURL = responseURL.replaceAll(":"," ");
    

    类似于:

    responseURL = vars.get("responseURL").replaceAll(":"," ");
    

    但是我不保证它会起作用,因为我不知道你是如何得到这个successURL 变量的。

    使用JSR223 PostProcessor 和具有built-in JSON support 的Groovy 语言一次性完成所有操作,建议代码:

    def url = new groovy.json.JsonSlurper().parse(prev.getResponseData()).Url
    def params = org.apache.http.client.utils.URLEncodedUtils.parse(new URI(url), 'UTF-8')
    params.each { param ->
        log.info(param.getName() + '=' + param.getValue())
    } 
    

    演示:

    更多信息:Apache Groovy - Why and How You Should Use It

    【讨论】:

    • 感谢@Dmitri .. 此信息也有助于处理响应中存在的 URL。
    【解决方案2】:

    您不需要使用复杂的 Beanshell 编码,您可以使用 -Regular Expression Extractor 轻松完成此操作。

    这里是例子:-

    您可以在正则表达式提取器中看到提取并存储在变量名中的所需值:

    要了解试用 reg-ex,您可以使用 https://regex101.com/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-03
      • 2023-01-14
      • 2011-12-14
      • 1970-01-01
      • 1970-01-01
      • 2020-07-28
      • 2021-12-16
      • 1970-01-01
      相关资源
      最近更新 更多